(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 6.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 5126362, 173360] NotebookOptionsPosition[ 4640687, 161106] NotebookOutlinePosition[ 4834501, 166065] CellTagsIndexPosition[ 4793122, 165058] WindowFrame->Normal ContainsDynamic->False*) (* 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[{ "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", StyleBox["\n", FontSize->11], "Cryptology 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", StyleBox["\n", FontSize->11], "This 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 ", ButtonBox["Mathematica", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www.wolfram.com/"], None}], " 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 ", StyleBox["Mathematica", FontSlant->"Italic"], " statements as transparent as possible, sometimes sacrificing elegant or \ smart alternatives that are too dependent on this particular computer algebra \ package. " }], "Text", FontFamily->"Times New Roman"], Cell[TextData[{ StyleBox["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 ", FontFamily->"Times New Roman"], StyleBox["Mathematica", FontFamily->"Times New Roman", FontSlant->"Italic"], StyleBox[" for educational purposes and for enhancing many the ", FontFamily->"Times New Roman"], StyleBox["Mathematica ", FontFamily->"Times New Roman", FontSlant->"Italic"], StyleBox["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.", FontFamily->"Times New Roman"] }], "Text", FontFamily->"Times New Roman"], Cell[TextData[{ StyleBox["Henk van Tilborg\nDept. of Mathematics and Computing Science\n\ Eindhoven University of Technology\nP.O. Box 513\n5600 MB Eindhoven\nthe \ Netherlands\nemail: ", FontFamily->"Times New Roman"], StyleBox[ButtonBox["henkvt@win.tue.nl", BaseStyle->"Hyperlink", ButtonData:>{ URL["mailto:henkvt@win.tue.nl"], None}], FontFamily->"Times New Roman"], StyleBox[".", FontFamily->"Times New Roman"] }], "Text", ParagraphSpacing->{0, 0}, FontFamily->"Times New Roman"] }, 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", PageBreakBelow->True] }, 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 [ ] 0 setdash .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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Alice) show 86.750 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .27694 .34233 -86.75 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Encryption) show 110.500 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .62531 .34233 -86.75 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Decryption) show 110.500 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .90602 .34233 -70.125 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Bob) show 77.250 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .23684 .06469 -86.75 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Key) show 82.000 12.813 moveto (Source) show 110.500 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .61779 .56445 -70.125 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Eve) show 77.250 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .5 .01472 -96.25 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Secure) show 96.250 12.813 moveto (Channel) show 129.500 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .16165 .30346 -65.4375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (m) show 67.875 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .44987 .30346 -79.2188 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (E) show 67.750 14.000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 5.688 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000 0.000 0.000 setrgbcolor (k) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 71.563 12.813 moveto (H) show 76.313 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (m) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 81.188 12.813 moveto (L) show 85.938 12.813 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (=) show 90.688 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (c) show 95.438 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .78822 .37565 -67.8125 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (m) show 67.875 12.813 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (=) show 72.625 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .78822 .30346 -74.4063 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (D) show 67.750 14.000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 5.688 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000 0.000 0.000 setrgbcolor (k) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 71.563 12.813 moveto (H) show 76.313 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (c) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 81.063 12.813 moveto (L) show 85.813 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .2995 .16464 -65.375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000 0.000 0.000 setrgbcolor (k) show 67.750 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .60025 .16464 -65.375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 20.5625 translate 1 -1 scale 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000 0.000 0.000 setrgbcolor (k) show 67.750 12.813 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 .10356 m .27444 .26348 L s % Start of user PostScript 100. 44. 100. 72.8 MAarrowhead1 % End of user PostScript .27444 .26348 m .27444 .30346 L s % End of Graphics MathPictureEnd \ \>"], "Text", TextAlignment->Center, TextJustification->0, ImageSize->{306.375, 189.125}, ImageMargins->{{68.4375, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 R+MK5IE8J9cnPYSt8T+r+DxHU/8B4bvDjA==\ \>"], ImageRangeCache->{{{0, 458.563}, {282.688, 0}} -> {-10.0086, 25.3494, \ 1.30849, 0.590583}}], 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.0396"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0272"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0483"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0236"}], ";", 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.0161"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0168"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0402"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0007"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0010"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0787"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0751"}], ";"}]}], "Input", 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[{ TagBox[ RowBox[{"First", "/@", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Partition", "[", RowBox[{"#1", ",", "13"}], "]"}], "&"}], ")"}], "/@", "TrPr"}]}], Function[BoxForm`e$, TableForm[BoxForm`e$, TableSpacing -> 0.5, TableHeadings -> { CharacterRange["a", "z"], CharacterRange["a", "m"]}]]], ",", RowBox[{"FontSize", "\[Rule]", "8"}]}], "]"}], "\n", RowBox[{"Style", "[", RowBox[{ TagBox[ RowBox[{"Last", "/@", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Partition", "[", RowBox[{"#1", ",", "13"}], "]"}], "&"}], ")"}], "/@", "TrPr"}]}], Function[BoxForm`e$, TableForm[BoxForm`e$, TableSpacing -> 0.5, TableHeadings -> { CharacterRange["a", "z"], CharacterRange["n", "z"]}]]], ",", 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}}] }, Open ]], 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 ", StyleBox["StringTake", FontVariations->{"Underline"->True}], ", ", StyleBox["ToCharacterCode", FontVariations->{"Underline"->True}], ", and ", StyleBox["StringLength", FontVariations->{"Underline"->True}], ", 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", CellChangeTimes->{{3.423391330402695*^9, 3.4233913382933707`*^9}, { 3.4233914992006507`*^9, 3.4233915170445147`*^9}, {3.4233916045138245`*^9, 3.423391611138867*^9}}, 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.00021873926399999997`", "}"}], "}"}]], "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"] }, Closed]], 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->"Link", ButtonData->"paclet:ref/Permutations"], " 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 ", StyleBox["ToCharacterCode", FontVariations->{"Underline"->True}], " and ", StyleBox["FromCharacterCode", FontVariations->{"Underline"->True}], ", 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", CellChangeTimes->{{3.4233911893080425`*^9, 3.423391236167717*^9}, { 3.4233917968588057`*^9, 3.4233918116870255`*^9}}], 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["CaesarCipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Caesar"], " function defined above." }], "Text", CellChangeTimes->{{3.4233918739061737`*^9, 3.4233918814062214`*^9}}], 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"] }, Closed]], 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 ", StyleBox["StringReplace", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.423391904703246*^9, 3.4233919124532957`*^9}}], 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[{ RowBox[{"|", "\[ScriptCapitalK]", "|"}], "=", RowBox[{ RowBox[{"|", SubscriptBox["S", "26"], "|"}], "=", 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"] }, Closed]], 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"}], TextForm], "\n", FormBox[ FormBox[ RowBox[{"\n", RowBox[{ "Ciphertext", " ", "obtained", " ", "with", " ", "a", " ", "simple", " ", "substitution"}]}], TextForm], TextForm]}], "NumberedTable", CellMargins->{{17, 57}, {Inherited, Inherited}}, CellChangeTimes->{{3.4233920035945034`*^9, 3.423392006907025*^9}}, 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 ", StyleBox["If", FontVariations->{"Underline"->True}], ", ", StyleBox["StringTake", FontVariations->{"Underline"->True}], ", ", StyleBox["StringLength", FontVariations->{"Underline"->True}], ", ", StyleBox["Do", FontVariations->{"Underline"->True}], ", ", StyleBox["Print", FontVariations->{"Underline"->True}], ", and the following:" }], "Example", CellChangeTimes->{{3.4233916459203396`*^9, 3.423391647389099*^9}, { 3.423392017969596*^9, 3.4233920227352514`*^9}, {3.4233923625968013`*^9, 3.4233923672999563`*^9}, {3.423392673614417*^9, 3.423392680864463*^9}, { 3.4233928852095213`*^9, 3.423392889897051*^9}}, 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"] }, Closed]] }, Closed]], 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"}], ")"}], "+", RowBox[{"(", RowBox[{ RowBox[{"ToCharacterCode", "[", "b", "]"}], "-", "97"}], ")"}]}], ",", "26"}], "]"}], "+", "97"}], "]"}]}]], "Input", CellChangeTimes->{{3.423391552716618*^9, 3.423391553935376*^9}}], Cell[TextData[{ "By means of the ", StyleBox["Mathematica ", FontSlant->"Italic"], "functions ", StyleBox["Do", FontVariations->{"Underline"->True}], ", ", StyleBox["StringTake", FontVariations->{"Underline"->True}], " and ", StyleBox["StringLength", FontVariations->{"Underline"->True}], ", and the function AddTwoLetters, defined above, encryption with the Vigen\ \[EGrave]re cryptosystem can be realized as follows:" }], "Text", CellChangeTimes->{{3.4233916690142374`*^9, 3.423391670201745*^9}, 3.4233927582399583`*^9, {3.4233932650244517`*^9, 3.4233932668213387`*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"plaintext", "=", "\"\\""}], ";"}], "\n", RowBox[{ RowBox[{"key", "=", "\"\\""}], ";"}], "\n", RowBox[{ RowBox[{"ciphertext", "=", "\"\<\>\""}], ";"}], "\n", RowBox[{ RowBox[{"Do", "[", RowBox[{ RowBox[{"ciphertext", "=", RowBox[{"ciphertext", "<>", RowBox[{"AddTwoLetters", "[", RowBox[{ RowBox[{"StringTake", "[", RowBox[{"plaintext", ",", RowBox[{"{", "i", "}"}]}], "]"}], ",", "\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", CellChangeTimes->{{3.423392769865033*^9, 3.4233927863963885`*^9}}], 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"] }, Closed]] }, Closed]], 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 ", StyleBox["StringTake", FontVariations->{"Underline"->True}], ", ", StyleBox["StringLength", FontVariations->{"Underline"->True}], ", ", StyleBox["Characters", FontVariations->{"Underline"->True}], ", ", StyleBox["Count", FontVariations->{"Underline"->True}], ", and ", StyleBox["Table", FontVariations->{"Underline"->True}], ", 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", CellChangeTimes->{{3.4233917193270597`*^9, 3.4233917232020845`*^9}, 3.423392796177701*^9, {3.423393297415284*^9, 3.423393300977807*^9}, { 3.4233940093417153`*^9, 3.423394015044877*^9}, {3.4233941832647038`*^9, 3.423394185499093*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{ "ciphertext", "=", "\"\\"\ "}], ";"}], "\n", RowBox[{ RowBox[{"L", "=", RowBox[{"StringLength", "[", "ciphertext", "]"}]}], ";"}], "\n", RowBox[{ 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[{ "0.02857142857142857`", ",", "0.042704626334519574`", ",", "0.07801418439716312`", ",", "0.0176678445229682`", ",", "0.045774647887323945`", ",", "0.03859649122807018`", ",", "0.038461538461538464`", ",", "0.0313588850174216`", ",", "0.059027777777777776`", ",", "0.06920415224913495`", ",", "0.05517241379310345`", ",", "0.044673539518900345`", ",", "0.023972602739726026`", ",", "0.051194539249146756`", ",", "0.08163265306122448`", ",", "0.04406779661016949`", ",", "0.0472972972972973`", ",", "0.020202020202020204`", ",", "0.013422818791946308`", ",", "0.046822742474916385`"}], "}"}]], "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", "<>", RowBox[{"SubTwoLetters", "[", RowBox[{ RowBox[{"StringTake", "[", RowBox[{"ciphertext", ",", RowBox[{"{", "i", "}"}]}], "]"}], ",", "\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", CellChangeTimes->{{3.4233928068340197`*^9, 3.423392824787259*^9}}], Cell[BoxData["\<\"\ informationtheorytreatstheunidirectionalikformationchannelbywhichaninformation\ sourceinfluencesstatisticallyareceivercommunpcationtheoryhoweverdescribesthemo\ regeneralcaseinwhichtwoormoreinformationsourcesinfluenceeachotherstatistically\ thedirectionofthisinfluenceisexpressedbydsrectedtransinformationqu\"\>"], \ "Output"], 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"] }, Closed]], 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"], Cell[TextData[{ "See ", ButtonBox["[Baue97]", BaseStyle->"Hyperlink", ButtonData:>"RefBau97"], " for a further analysis of the Vigen\[EGrave]re cryptosystem." }], "Text", GeneratedCell->True] }, Closed]] }, Closed]], 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", "\<\ eJzsvT2PXMm2ppcn987P+mSR7K7u033v6Xtvzwx1pyUREAXUAISAAkQBBNQG DRplELggBM6AEChMDUCjBPAPtEmTf4Emzf4DMtqk2ZAns02aR/uNZ72xYu9M 8g5kyThoFLsqc+fO2BGxvt71rhX/67/8l//4v/3v//Jf/tPzf/nL//Kf/+X/ +I//6fn1Xx69+s/DS92fZrM//V+z2fzZ6Wz4/f+cdf/37O9Xb/46W978/uav b/6qf29+74cXOn6dzf378P85b/X8+frXZXNd75vc/M6/88mb9SbDz+L1r/6u WXvd8AWzNbe4+f31r7w6vDB846zjdb0/GlzvLx0umK30IV7Qb/qQH40vnDOw Bde0N3n9qwY1vL/QFzDA8eCG39ftE46miumZLXijfuBg+gGGVt5b6S997e7T vP610+g1iuHi4cX58L/DfDB/pj6UppgvHh5ttuS6fLfjV31FnxczFzurVl/Q t8QnFr5EY9cduDsf6D2cmFqmcrhSD7EaP7+GUIfoB6nr7mXSyx03KOs4n8y0 F7Lzs8WX1ecc7z+u78r18/GMdM2f7U6dbv3c9+Nbb9kt5V5/Gv6e1Tsvmo/3 7cf7yRtlmSdDibcWuXfLXva3LqYiO2+G0TMvq9xuO48z2bbtn6vma1YjadF9 cpOzqLM5Mz8eFZv69a+aa/7VuwyvjuXYaqTd1P6pO6n52p59Easek+abp9bw 4q/4uLeTr9x45/qRQhrHO9pjazdSXNjohslGWuzuq0U+oMe1ZOQMYJHakLVr NvRIG1ou6gg8KX5G/TG6dVUxqSiKjCxbQWvGONVBIfjN4Mr0pYBWke7Lffpm JZq77dty3ZupLLcaqqoz/bfct9NnOwq8FZRVzmnZO12xIWP5W48nBuuxM7y4 +bKVo0Vrc/rcOK9/3XgaRlpj2W7zao9ajbnnqxq9PrqyEeXmCVKJrtq19QI0 H1qkrtfvqZxbHRFqpGMDbKd6eTTs2KbNZ0YPv2+RtUd2H3yTI6sGsdtjqXes VftIYQJSUSEcdfMuvdP1b4/ApCqoQ7p+tzNZ82o42nt2KSDeaR0qr12Lkb7o R/sbO7/IK3c8jlVubMuaN7sHtpjs/8XkFvX317/2kxndNm8X67UZKb/Jarbf 24ejtF9keuRgMtDWPNsBQEmHtlymJiovnHzObC52b/45y11Fzgs9UkSohkWq s9lEGeX3N77kruwu6wZn803EMe3MaL1jjzd7/9VN3jA34J59sSNlk9eX1kyh sxrd7R25u0H2KaDGoI03JnKw673unatc4DRmRVqv340UBDdl9Htu1nwwhrW0 jIz1xI4NqXfblt25LHc5fvPXsc+24+bt+nwxFXv10o7pnVzU+ymmhnLq630p SJo4GvM9VmU5VajN3p7Y58Z58ktVi+J4V63dNQrXm6IqtL0zWN1eb6apc7AZ a7fy+oHd9L2WpN/Zle1uWIzfrQ7pTlAaO2e6iu03Tn2nkQFr1qOvW7eNjoiC 6p631DUv5FLtDSxCxnJ6Gg/yc1poJ7Jofm8+dP0u46AaCi72TfjutAyf2Xz+ WwZp+tPw7xu5aFPLtfqcmXoziY+6lJ7R5PdffOTQkaPlnmIFXerhNoAY4Q+t jZp6xl8Kx6y6aqzZuumTBcC0LnJ1LXb7/LcdV3U5XpHxdti2s8oXTzXRaLKn S13FdbGz18YOQb1zM9xFsxj9rm75rGMyGhCAh369fjdvvnPXnd2N8semLH29 4mfNdyJHL0GrSOtA1pNprk7/fKygHD82M5pvFyUa6+CRt9PQCsHmb2LzN7H5 m9j8fxMb/7X93Crt9QV2LOkk5hvjnvsm7c3YPdFUHCRkMoJJurrFd7525DEt dj6z31ds4viJ9NVr13vnvEUE6jevmqdYtG9UP2kq0TkV8wYW2efejmbrZicA mtf4oPdTRWC2f6KM9nejETRPM9n+kyhm1yPVfETQP5XNPU/7RcB/wTwbcWwz F9NxfMn5HMeVZXJbfLIdgW/Zau1+x4dutd9m7KjtHcee39tNMLUfY2d4pBCm geOOYp4873gRR7I82g7LXV//s9/Z7swWKBijtDsr0f1rw63GeTplMS0TUR4L lb/ls5JXrWGOdC/At2uH7N63X9OauH1xyWjObiax+nxXNX0pRq3r3AagO0jM juazM9BXgV62N9lJI0600r6Nu9x9ts+o8cUOfLtprjzCyljPvvnrLti+dziW 51jGdvOtJqq4Tu6uTLVGuU7MCCqb19HvwV2++GY6iFMIreJH84muHOncEcA9 mdx9GrJu0XZz7ljF1URqqyi2ycTpBurGOP5in/jWhMIX/YB2XP+67zU27J9D p+fj0bV4YTfdT40eaHI+Y0Xsm0732s7G3Auh7jxZOvmjhK+9wr0zNLz5zxKM dgitAzgNVhq9+wXNPp9c2eRf9ji2lpJWjzuq4SPNXae+5JtdxGo+8jR208MN sOafWTe55kvL8QXsz/eaplH2ujV7lWSo6bF/vpODX0ynv9v3xv6A583Ex27c tJyvaUZjkjlwEmVsR3LAk/T0Xpd5Vwg+d2WzW7pdU/BZ0V/8a776YXPxafP7 YTEVO2nWHRd0dMNR5tkf2YzXbW8Cvt16Lcq+dznGz5wCtV9Njb9v6vm9GTuV U4Mx8iVGjIGJw7WX2LHrXE4ltRt7mn7UqYO0/+67i9qkSsZxzDSNNxXvHURl OtCpa/DlHOn0GT8LOWjdt+OHnWycHHQl46ynH2g35nIXF9jxbdMK9QzvC8FD t+Ojfy4g6SZTNJWm1hiMDNfexXgzSTB6JscTPdqTvecm52tCq+qtYiJIbEGS fZ53LsFkgqYuQtyy8ixaOkqMfDFyLvaLdTdOujZfWHdzXz2+Rl/sSaNOJLDb UV994461W2w07vWb/4pQb99m+CLOVsG/FrdsmG5TzbXM5dyNnCva0DrH/ulu gnHkrdBgLMs3GatM0boG4POt9rsHNyNMqm65kQJoMa+TZvS3RxF8G6dMgZR5 gQZ3DRnR1Mg3mTine+P2FtBq4ok9e7IlOTY78gtx7EjtVsFr9+tnPPBJGNPt 5eG0VuKzRmVesU7v9XFI3E7X3pztPmHfsTPNKPb6Vzuf3MFUd+zsm38FWbbd iQfbNYMNtj4mt0wJNPmRuSUklEs/uUF8ILdMw/vcyYa2+7/7EoY+Ca67xgyF cWpn6/t2jiW2s5F17XY1TLj3CWzs0e9dGwzH++t2o5dnuX6nOb9+pxu/utHa vLi4fvf611c3oI03hf4AT3m4ybGuRN3oN/3rybt+t7TTFEr5c9MxNQAtttRN NkMz4j36cdc0tEahyUqZ+TRycCPymtx34s/tpeb0tqzTKHDHad8ho72Z4Ger yfN89ntHXzV1Hb5EZAr6QezyfNqx8/c5kIz1aXVKGf9UiDefeYzGm0iB3OP/ zhsRmQYBY0dkxKoZwVR77c4UTtiN0SZx6DIpwHuZJ7O1Lnh18+Li5dWzTy8u rj7On36YHVx9fPzk6uOTtz9fP/v08I+frx8/ufjt5+vZ/NH92dHTD4/uP3n7 +IlefXT/8vTpB/315O3l6Wz+5O1sc3n67NPP10/eXn18dP/ph5+vh890w+u3 dc3P108/6M7PPj1+8uLiydunH559enT/2aerj/om/cz0/d3VR70zm7+4mK2e frh+9+zTs0+vbq4+vryazZ+fz05f3Tw/f3n18kqpNxG4+MkN2k+s2M0Or/cL wfai7qgR+JcTN8rP7FEN01Xp0lbuqtWKNOz1slsrl8u6aYfePAdAUnWrLSET PKW/CRaYVOIw/APN46ub179KWb66kSqUkpxJnW719+tfX17pnZdX+u3Vjd5Y v7x6fn79TsugvXP9rhvWptdVLy6GhxwWbqFlu36n98qiHWvBX1xosZ+fP3mr /7+4eH6uRR123XDB4snbl1dPP7y4GHbMfFj91c/X+oh2kn5m3bAzenblyyt9 wxJ9vYuDTnXjjmBNnOGDiT6zjftcMixIpFPTbUUQpmarmXt+roeVPDx+ImmQ iBz+fH15+uj+z9cP3uuty1MJj/6eX57OHz+Z3bo8ffzk8ZOHf+j1J28vfnt0 XwKo3y5Pf76WQM6GS2e3JICP7j/8Q9fq83pf93z4h+7w4P1wr+G6bvjfUhdI WnW5PnugO+rFn17ym/7VxA/vDZ+9PNV/uifin2L66ubph/kw/8MGmfpeK22c VI7VpXWOQSvQurOEOuOMQ8z8tn1tpODyjdly4v1OMF3IYHvB8HBGvoAK7ZRn 9Y6Duj0aobW32liHmokXF69unn3Snkf1aS2lQVdaKP359IOmeKYl73WBpl0X LC9+Y0W14nphoQXVJnjwvujgb1j4y1OWTYutj1ye3v9F66vl9BbTv3qvLOyx llOaW9/PomuTPHh/eXrxWzdc0LNFhmEMW2zFBpS+1m/lDlvtYu1jiS2OVRB6 J3vB4nS3+X2NN2j69ggSYOL6RnCD1L3Oeg6pm0FVDEM70aPrUZ+85V9N0IP3 Mjaa5TLUThPy8I/y+4LtjxEbXlv8fH3/F0uS/ma+Na0zzUMnWZBBG/7uNam6 u+ToG82XbqwP8CHm/8F7DeT+L5rJR/f1f/2lddEN9R1/r4se/qHl0aUsjC57 +kELpO/gxhqHjKoeFw/VNqES6Jtyn5Fzs27Z9WVjal6zPqwCJaYSf9ZN6n2P iM5SfvwVi/YNvjtF1u5Ge8FeTNQf0N1GIjYM/LQtHkjFoW0nQzRI07B8HSqy SNG3KEmkQnufabakab30qtZKe17K79F9rc0GMdK6IEAhMLFGXlB/0OI2fFhS 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 CW5LC3ValG7evDPAD2H1NFCU9sR8acFQF5xtbwEG5D4mPvWUgrqdwmXkXoKq W/u7gfe2FzvCTWoNnbx57bZIzOcpeNfSh+QDE0ndFpRZan3MGKn3UNSNe5Qo aec9XQcBdnYCKZhAv2+IY/ZMzoMRXYfc8ZBPiIEWqd4pGu6Tw1IYYjOyz7ng bOE07+fNVSxUkdRZCsWRK0N5Xx2gobdpvBUc5nnj2g2X+iF1ljBMW5wL7u1m T15OsG42ynv8sm9m2yukNpmlCmMgd9Wd3YfGL2k7dnghW3u3iaewI0LmeZxI Gs9nqRWzSeblRVVDipsCdq4t4M7cfMp/m1V7Lr9MeVzlLRZcYJIpsVl6PkpS arflYo+WXCZ8tT0KuDhiUWWvDCURbY0YnrfKfOmom1mSmdXteOwxclzNLSLx xVZVWZnCR1mrZzy4Iy61fTMmOIp8ZkllgUsGYenjfnOJ8vX2j3gK2c4ydk4O 6MSzaQ4mN88bL5QzW/F9r8nm8vyKT7wrAx0Wz3aMPM7Gj0kN437Kcy/ORGYt XzTfpSteggegBCTn9NNnAIoVp3rYgUeYBUTbHA4Gri/GtDZabCo6YPaFkVta mgCY3xKloxTvrA1Xygnw8ubrnT/6RXRPo7LFj0Ela5oXP6lJSrTyN215Fzh1 cDKCeLhokGx1+TJHL0NwMYc33XL9JA8V2OhU+RmJLfba5DiQCbpe23Szx2XJ M0yNuwS659ninez+xtok3A0KuvdvGfifAk3AgyENiF4mujxx0gXZRaOiSQg7 HUwq5h6bSMbSqjw6p+626qilgiRPPLGPa1rw5XUFCxMzSu1awm6Mlt0uwzGb UgbOrmLk/Mj0kgt1YRcCdA/h/0+Mu9+KSe3fiXkH7oU9Bqccon+dpUUXNubN HaxE/VOlmn81/PSdPsreiXLtV19fvPOWe6zQV7RKe2S5r2CAO1BSwIAd0wuW yEfmz45d0QPBLhKr+c7c9zUy1GOPgEI0tW153tuWVwileLq9I0arb35kNDRw Ka5izeaGSLc8q4u2WdazJvQco6bpLvNvnxdbUQK8g37VzHLqwSDbg0+5jGid WYbJKhhDrKbecyXdLLPRw1ddRkFL7Wkr4GmaeZkNKIMIbZe0b2pRU3iNgW1H dVbEuzSX5sByFi5jCLk8iRMXJ+sKeir6aky9xz8LSZTv4DQbYjfdfNWgaueT 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 fHKYoIUoIWanzz1fs1nicuBqcrLbMiFN0SS174xfPqGEYCmNVc/pRZGaT0/J Qiwj45LOpHvkFovMGQyWpNxAOrNEdnMkLSOwE++BU1gHvytO/Hd/KSkOE2yq Rmsio14987me2NTP2BSWs6SHmj5ab98jft5FhVw9Drgc1JIrtPweqdHOjElu 9YeoxjcyD0eT7HLFO/bFl/8fysVEQ4Qa2lFAmoWcHcXPwYdIO1UT4zdKTHK/ JJXZs3Uj+HqgO8njI/MlpV4VzLKe+E9mkoGXtuWIVZE+hunOpfDcl6+vyS3X qNCL5RlqHVIY1iZpqBBoWiuOqFKZVoesm5gGoW/9RVEV1V3yhG44Nf4JYeYZ AucO2yi4KkxL2OQVXW9M6epW3GJqPnqV1KeC0g1OgpMo+vr6oDuaiiiHc5ml c7o4hTCiWiIfWnVXroeP5M15GZ/Bh+LfGliGWh2b4ppw+no9zL3qra5mc22D roDY8ULp6Xgmu6/yUN3m4CavupaPUcvgA3D0eCMl952z28mkcO/B0dWIKgr1 gOXHXG8TKT6eSzYi3OpyQsfR+qN/RFRN5y9NxoAu1tk8x1LrgRwmGpeO0HgY eTE8LFdFNVS5j0lWspRV7pr5xAb22xrVqwSmOxVVxGV8AT/1egI+drm2qRZX E+eMV6NAi0NThlnhJh6jTBR3ADdXdK33SSaNNbb0gORJX1KRA6EVaRlH0Du1 gwRAPKccpmIPP/L5+JxQUJkA4K66Qch3fMbNl/NIi5xenKmNCwQVvHtX+y7d XO3eryrAap2ta1CBwWsC6awLv8x2Bv+BidS1q8ElXoZDzb890tXucMLp6kRS w3GVebE6YFi40CR7X+JN3sXn+Y3Bhzic7gqUWb1c2vy1uXtMiPfWIZWfN9K6 8WX9+5P0YeIcItRPecwFR3Qcu4XKjTutbaIsPnRLVTETDl5x5WH5PP8U74Cn Ux3W2MdR4pqqCmFQVpeFqywdyAV/atXf8G25ZfjksGd4d7X3xWUsaaJkvHrB N19JTwkrSF78tZOj4mVoQ7qTl9PqubWoENAnZum4TaSlCFg+8/sL0u42Lh0T l0SP/zWj+Jxwd4yTHck4jYgf5RtOKEQRoir3wLqeko5zHMS/Kg+Pas5TKFKl euoHcUmfJbAKUumVki1QbTl7EYLJ3u9EXIAkJEEzEaA2pYc1mCDN5eri5/T1 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 3/tXs7w5tK0wrzNQkK2pKCXbZSDNXVncTqNvjCNzE7vaszWrpKbsbMduL2eR 5DDKu9IAPCebpSPH4ODNEtsGLf7X+2b5vvYsR0eLZz+f/CHdixy+FMnCHUuS uiLIvv29VBGBKJrNGAwlo3QhbSvOYm5je7tZJMx/kIbftdpIe5uBcnjZnNfX 094rFYBHzLRK056QcvniTw4JZ8rQEu6LPzXlaDGGmSVI2JbqETjyaFLm/ETj JQ/pm3M/ndGMyWFThV5EAD0bObnOmXfYED/fE3S8PuvpbZrq15naj/5MxTb6 Zy1Ld5cNAbqM0StbZjdIuYguRZ9pZPZT+LhUbcCWCk7RnStJ4iewg1xF4zC0 g6U5GldLAoPsyTP2lCtfpYFN8uSRz6GEa+mUb1Z0VZbJJ37uHJ6YpJwUVecU g1eRpJhPhjVDH3dTcf5JmboWvB42LEoYPLozsNFyW3qGHbd0m/iW7WPjCZ7y 7SzQbE3WuVmm4+iBiM2O9aczT0wAzNNNbK/tNafkikV3CPPNO2pMsKW4McNK TPvMIIJJuvUszU9ewih1kF3r9xxgp0lnyhArnz2Mb/7X+pS7TEJXcKY4gZqa Ziy+CcoCLSjDZnXR/xn3GG1i+26mG5FacJ7LmXofkbbwXDBQM1uMK+N9sx5E z6reKMGjQ9fx3L5m/bav/sAxZtVoJaff+ii9jEG99aospq2y0rfZokMK2fJE qogtQb398ee9VvPOmE/AmrtwM9WRTMqbuox0MI4xw7reUvAwQC/toelINnVS w3lywOVdh6CoBW9N7yHaGfytVmhknwu3nzY+XnV1FbR/Gl+07FrmKZtZXgON x3j5RCsq9LiEyVOZZdK2JRjK1XYVX5tsuvU2ce/mjP3cj9lF2tGPCna+JZCc Yy65j/vN8M9oX6Zdt/QCXHoLY/tfMvK0AK9HaboL7bpnMnYKmVot7XGjPL4X d+1cTdANd86qjeozL8Q9fiKRykjD63t2xnLG4d8zAB2pYolSMr6qkll/+P2Q UQS9Ju4sNSuYoAGNEYvLeaJLExrz81udhQ/UZv/QijPP5TsYQ3pXeTZCbpeE Bxs1M9p7aLUUelYRb3DVJuUX5D2OMiliWdqigHxR+F2Rw+m3jBDb1GcGXk4Y o3HytjiBE1kup+hfsRGgwbFEK71ez2FrJzI/LYLLPVH0X/VCl32YJ+InnKrC +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 1S+KfgohTiU1spX7DD/g5jA1uMrlxUgru78Os+/o7AR2r84jPwsa1/J65dmB vJuOvkt3g20ceOvsS+YeMti82tczBZLd7MifttTc4ufayuqI1apUXEoD/T1U TLyqvb7b8DK4/8t32miDrrter9nd7PucYMdnIncnWPxjC5cJRWXVnXTFSaKJ WIShy+YqNmLrCzTyaqjtiStdm5UfTFOFkvBQtwZlaj+F78jhm5hdm4t7EUw4 lyprHLkkdtHGYPrRaiHZr7MP7lolAyS6uJ2l580fXR+mMi83w+ERXmUtWVY/ /mLWkJPjqMzAHKTo7H8/ewP47sk1DoapSAFHWa9Qq1tEnSZXcumRKw/RpJ4G PQ5xixIyjbsJIcfimo6YRQf9imMkaJ/JwCao7VzJMKifQPwq+WkyYjWZ07rY RTTEu4cSdiNSrUF4S64PPScbCLNF6LWt5i11DPycFBjo1I4z6Ykhg35ZUFG7 /GaoDXFKlsNrEkkeaXepL+B/JO5UBrXFBMKFCQM449WD+1jJDqXDeO5rYeDu w9pB54uJRlexg+IhpObqcDw1gJM/C7jcKM5pJqodGYGnKkR2gCqC/RAGj/sK M386dBOWn3/92bcsJt54CECcHbGJQwDKcWe2Hu1fYz9zF7HSljBeC7ZRWr6i tk/Gmf66tYVnS3zS7JjXKwQCq6plK+tHeuWeckdeuQguVHeImJQSdIaaBqlU BrSW8B+2AwC6ZcWdZu/l8//Yh/MsrlR1zXTWoSGEw+j4mdLfmMRxjoUSKOfD qknON1EYwPGaG/M1p5FlYMeYslg0Kwii56BhOnwVYL9eufcuDaX+vXG4GmtE 38OcUrIrcpiTW0Kaz+bMrJQukmfS0TSe2v1182+IxDxAiOdYiF2qMoXdmLeR HN6mdZSZAb52BRkvIcwA9eEewsdzYdfk2rmLhtzwWbYaJGN0eaxWximk4n63 4X9dbN2rH2zFnK8Hp2bmltvOIzu/Th5Uvpa7jYZQQaPIO9VipZ+eLL2nyGpl BWJeRPeKLJFqpx8Eh8MWhccmSGvrm59SiAuWmn4eXPhBZ7jnpUJFp5B7O9cK gNTsBZWGdP5iNuy2R8cV+Vb17wfLLNAYkkjV4O06qrYuPwCh73r8DReBYmzy sjj0velTHPltyUh5dntMGhu0U0daIm1oau0sZikzXxK6FAHzkjjwYuYgCH1I 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 k6WBZ6KWOkHrs4U7m5s2OqGMXfWI15TfcEo4gEbdoqey2SMTljkBJVL4Jq39 Yitp+3HK9IQMKj+9caBunuK3Z5swPchnR6z7J3tY7YnfZiqBhBLq5qRWRKPe 2xu0PX7L27HZZpyJyFBtNa3V9LcuTi8iaeumup7DifVZ7tMz2vbwKqd6W+sq iXHt+2P0b3+ft5iDnznTLTd55MB6lUFJ9WaKyOcy6lNG7FLZXfq/o8fq4exs gJRGRstzdPCfLlePcdjGopHxze8/Xu/M1OYuw62a/aXY6X4GrMxWjRH3yGx8 AL+bAUwGeJkxAeyJ4gNuoiGnmpp2Y7fBZufetW4miI98Trg8JOcA9JRXt0wv Ga5MnEsZzJ3ZGRWEHUTq4bDXZ3MW1UsvHiBQEEKC/eEce2c8Fl0faZ0jlLk8 pZLD4Jx5H0b0229mOctRWv3FmvYc55TszNCTpFrvyD7ySH+afk1wXG0LvT+X lcWr5vP7nqMbww92+nU4FDmvfIn9BoHmIXfZs0hddfEJ90kwTS631Tq/vpU+ ZStzM8ExfERvUNvFSCFdQc6Kr+CtkQo/uFVPT3btuONsk9zJgEAxhDQ7beBm dANryqCJpNS4/7PQ7B2SyWx7KvQhze95LVNnndW5Q/p7y8Hb7rkcc4rg8O8N AWsRNO7lHZZF3FNbcHJVz8nUm19/6RG8AqqTX8RD6mDpoVGFMKNcw4eXY75P OIjmNorDZZXsxrvXMjSKF1hY8v/MkrPJPalLsFpAzcftQnoJ7SnYf/aWhtRJ WqXAULGsGRpXWkdOD3whMQm1UK9X+2SKkY8JXgvWhnKMKySsd2t+S3XzqO8o lFOT4yRErWq1m7I90WbJ38T0lCP797/toTxn3lpqh0lN6d+JLkzZxZa+dUM4 A08qICjRo6yWA8S9g15xchYMKUtOoOa/6qG2DKSlMd2EmpfQ40VxyBlhLiom 8ojj0ypIUuTtGLvUaFhM1CBhzq4w12wOVmSAbDSZO5OZgN6o5AJxJYJ6x83/ tBhpZdyldxv0efnguNJWR/S9nxtP3tMfrUkNhckEWQv8VKgPyKY4WqdsMXFj ycWq2KKvJMrzBcFCQZNBttH73fIjyg/ZkPRA19QMp2CCcv5JpIHv1nFrL61t lJRLV8UtWzLFHTqdt3aoFNBdlrVyqvZMuL6ILyylVR0ydy5TlDVx7EAXNSqE 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 mMI1uvaoDijOkCuJiTmPx427tlBX+4s9W2ghbyENIIvWIGxdQoXB+mOfuH8O 8gk8r4elnKiIgpV1szVOAuVeqNqnhVoaQ1MO/cwxn8oAZhWUoOo4x2xHzCUM 3a9yDMOxOMqunAmvHR+vmB/k7ns/MKD/1ZIOhmjHWK4bfPl1Q4dLPCpJy3on 3hTlVGUZogpZjlnBIsPeSzDIWmGHWee9PrUcxv0cEOCDU5xQBhUE5fvxanCl PGc+kHIbv20n+Lyq8u+cTqTN6kvs07uh/uOakE65jb4a1IUl8JrIWHw+BEzG az++Pnl4VagS+nPLufOYpyxqtVRumWQ/7esTqBTuYYNlKpLsuhgo5hviSHPW ZDF3u76+4ATo5r7UYDr9frOc4w53ZHqPTxATe76JXB3fr2A63nAsqZv1o6V9 XCiuWrPmv6TXrgk6kEVTpJCRIFDAoj01jp2hObjgYsLzt1ifQ29cCihgGvYd uYl7DKRVWhelM7co5FrclJ3sjeIQrfesUbV9EI6m5/V8rJdc9E6zcsJ4YUjG leFwJzjNUMPMsYvKifdEwJWPkZHfoT6yFRwqPvD6i+95D8LaUfXcrx4WNzfO DDFrB6sZHAKED/LVN7unW1BogpG+e5C9Jd92MVef3I5to2r6C1mKuvX0Ai0C HwP2TRmEUAB/+02RF6gf+DXWmvXUE1t09YAf+qoFMujOq79BwILrQ5A3jG/K C24AXtr8t8chwHAwoDUYrz/4SAeIsdm0tKOf3oaE3XyV+7DVE+VCDWkosRVG e5VGFkqZkg5y5XYH4PLN+dLOdG63p3ur4HQWkCCBPHV1pMPAzhdy2lRw5m9V EDPKxlPQhCFZkCNx1Wp7OxI/DOza9retGvfNuf2LMEUWIxkAc3JR0y0kGZl4 ztjw65JpS1YneiF3MApIU48pCGIOjJE+h7H1XAZGsxNzUDPnTiYMmYybzFXz cCbUsMr8GsbnOlxUdEZRlMZh+kZnPi/N/vohTdXJvpXNf+MLKKgZQDfN07Do 689FL+MIliwaX5vnHobwxOTfT0Jy1P98kftZZOSiadPLBKzSzsrfZPqTN7nH VJnD2F69RRQK+Gw/8kJo6Pk0+hbOBFfQbFs9Pw6YjkX6X+2WTv7ed6za0WBN HJ/Zjc2wjUKcKXaDukUvND4kkxs25Wd2eb0pcieXbrHvb1W5iUbfyZvb5n4X 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 zySwYvD+8yYK2rObk/6fYEZ/sZNX2p8UOr0VdQzPGUfHXlALR7v1OPMX6Exj k0r0iaC6WSdGpuBwuos9pXrdOto8xaZ7XaDd6NMR/1IjZo/lfTYaZyd3AkHh wQrqKNSR84O6z7UbPWM12M8HRYoG9WI208+meatY5CeJm5PyMtoaZ4phSaoI mnFyGwr4PW7FngaFE7iF8BUv8hE2j1EqkUhzgPCqZKhriExKYC59Kl9CiMR6 iPeHRp8FTu5JUjg3TT95Z7aFEkZDmXdoJ30qDee47WH0aXoVycQpWEEQ49OB qyu/B5JqL+OXf6Yu/xRuFfk6YxwujgF3/epLTjYJHcm6469uHaRiW1PRI1+c n6QK31RnTNqPsKqGY3Ts5URu9zeRBsEstUYUzs2A8waLq91mlI03fhhjmH+L t8+eJvlMykJzE8ihWxRvgsbuCBmoEjlaBfsdHwa0gHoajMsuxFr7hdzWiPHH 4AMRGkBH12l/AmI2m5Kl0jlTM4vD00V5bT/6+devT8W3xiq9Q7ntuzcXzOFN NXjjWEY26w3q2MfOFPMTd/HqM22uiCC6Ha2Xq985upPNQgF89LBK1ruj91Yz m5VhKsvb81bHsME241Gm7xI9j3l4wwBbqO6SEdO1gr2k4VP78x1Dx7fzLSs0 5/PoUeMXDvyGAoPKB9WUdWY96cjRz47Pb9xrcRM6IvmRJaMOd8rB2IU6SvIa uelu1ppTsjUofySC346lFKfzHpiv+QMqSmWfOE0YLKk7vsnFmCq6ytJyaTbv TcVrD9tAl2X3VaUTV0/yET0ZxfbwPv13URgZtWm00U8jebZZHXEnuyMJo3aI SAFEyhyE529rTs4859zzPcaZamcdF+QXf+DiKZOOkYCdsT2KZ2gaoAP6W2Bg XpovrsJsiHGsyVaDdH29vWTjN1+5wtTCMyTVR9IOaZ5mV+AD4hPGzlZyV659 feUbJdoBH7ncZCxXmyzb39barW350PyjMegWWoctM5eVzwEBEpds9bKvXp1t N5o7Wub+JC+2N08gsksmrZby9zqAWue2d+k4bnffjW7G+HOISV7ImQnGno98 f/eCt+sWEeQqmSmmKXOXIT2+q/QljK2wdidz9qSIFBPElfVLPDOlxUABKAFB FHQh3BKToT6tRnpSNg4H7fAb5+eeHjSVAKCbjo2rV/nNrkGeOZdjuXVMrEyn 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 oznrRXku6H639qnJnoZfRC3yAl5ELgId1IxtyrqIj1oD5agr7SLilWWVFXfI Fe7ME9hCY89Z7sRlh4X2kliFLZeHw/ohcsrqBQwplOUCoCHrhvWUhQwiEcvA I2IG+fyslhfinpYD44RzQIBLVvCIMQ3pyqvco8mBn/GcTHrHpHdKivi7eAmK ZrlkTjjJLwsa4CJvHX6IUDX1RvJFPDgmN/YgQB/ICUT142h3SSSTMQPQEGIT 949bsU8cbtHyHG+JaQuTZiPTJ+Yi3ycCAIYlQcAsc94CN2wlnPtlzrrH25Pr bfKugny/Twyeu42tgcrCOM9b8Kj8zWfirRhVapyJ86hGh0TPaKu6IYV0lvK2 OWTyr4f5XR9P5ixvRCEed9hE8Ud1sx6Ihzwq9VMGfDLW/LHI8fT7Kfc0hUHs EQgWsw6nKlEIYm84hDYUKGaAvHqYrF/8ienz58RUcAS2j/dt7TMCKMsjD3VU pX/1bVxYHs3MQW4F46iOYwexibEz58nVar8wK2W9DDO6g31APQEh7xwgzqHC 5bP7HC8gIsuCvQK0BWdWi87CC3HwE1JPAlACNLIk6uz58FQrDjvBc5gDhAVA gmGfZMFL7skrIFxjqNQz6hJ2ZIyDCRBY5hl3gPsRt5RTAgaLYZIwH977E19D GCANqpV8OkwAEVa/h4v0VcQvnIOACqgTJRCDHpgGMJE0aq4sr9oQDJm75wPz JMZFXycwBjmF0jBQ12A97ICBOkCLqX4lEIZF/vlvmCZIsji5AXvbqk0ed2Ku GHd6RfS1+bIddLbCb8NvyErdtmrICf80BtxiPLuu1p2dLnRqGDcrEqR5f/tA /qwap9U+XPRBrokQjgXzN1J0hojKm6PR0LVXgRy/usxA5tjkFdhmp8m0blUj yBUnFglNwqSQTA8L6lKiBvv+4flEx0nL5NmYi4q1jpTqGbVKS2Zgjqxa1mr5 1pdUM/hN1pF8FVWnjEpzXNJMHETMemRPeVFMh91En8IyxEsetozDp/1ANlDS KbIwyGH5TJef2EWKebrXvFLODa+aZ/+MZI0iKCE53B8ihcnH23CSwz6vKbvK F8KGYuAb3gZV0NyVQiQbYK4lf9yaTcZYrr11vJL7UAEre9swKZ7heokYPOWj cZLvG+AQQEMdRGaMW4avZlfMG/ZcbV6IlM+lcvHgjmhob7FQLPIpQa1N13pX k9Oa/Nx1R5Tk1OSx23HVwVWZ8qTcOE3yQV55Iss/9Sgfpplt+gt173yCt1u7 +EY7CCZKSREBQbuhvZLJVZ+DYPlL3FKAoF//MYCop3oz6zQXmfqYew91y/CT NIt8saGgg6Xv2IihoJLdbSrNGmFeAEaQWTC/rMu8hgh3AIuH/70gnsPR5XMZ Xo1YHNFTB6VbI778cAPLlKI6W8Q0mB9go6zEr7/KsSi6J1Min2TNS67j9zkO InVkvPYSkpn5jiz0jzV59hX8MtE5SSexNVEktkxE8R5xgu6O/7PACZvz73Bb zdvTxikLXxB/CPCQA2KT3kVjFF5Hmsx18ncC3FzHLudfWHKc6Mt+EOxhOQA3 Any2QbCU5DMpJRLcTv1yrqyurgZmXGGMqxItAaBKE+dyWwu3vFPQniEPrUyZ yvUoYO/sVu7U85vfbVbrfaxGAp/1ao2DF7e6iOKtTrPsY23gnhzWz+eotlXF gX3nWBSeEPhauSoDgleXtB1v4vcYzvVQhWjVKzqcyUeJa3n6eaZ5GKzwPAz2 zjhBAreFrr0BjBhm+JQ4KfacDcFaCMs5yzaL9V81IcJb1iHMUCAHUj9dIbgI Wz3GyL8c7IIEk+VTCOKFaai2m2UFxgX4mQ9kreOsE/HuY/jixIO0ErvOOw5f L30l/8am4+5zRMgTWAT3IdAKn41nIijIK7kg/sZxuHhtjKrNSxDq3FZwAeNb ORvcAzL2w6WVmeocuXsyVLkiKluaaU58LQ/VfSQsJhwYZ34HHsQ+huPPPsp7 DndlL26YLD5v2CXKjQ9Jdf2wkJ/jMG01JLFsOT/RH1UHlQtB2QmxZMdjDSMe SoU1fnADB80OD9V+Fr2Ps/tVc8CvI2+6yAH90+HdZ6t0/vaR4ueR+HK8qHTf MbSuy5UQdnv+6SHCwFLv/c2rSxEyuk2H7ncuMZZTqejS53kcJgyFYC8uZss2 jNPM0sXNjId0ybw0mCgx21HozqolFTv8IlwBIFUrYaSLN6vLIQzO+3j2MN7w 64fPzO9e4ANNL/GfFkhc+/kqx/4M4471gCx1NAhjj7pmVcffF7nNLsSxJKZj QbwTN1K+jlpf7gXkii9/m7LNU85CJlysHJ8s+Wwgv/lhuM2k+HpzjIcbS+oM ZUHmxoZkY5jUjUFndpa8jNvDBsGljO8/xamC+7Ll4lI7wjaNITulZskeYNye x4I6Lz0iWn/CDNJVwgJ3iBE5JBynYZxE7EknYqxPksypergZcMmOkucnf8nE pdk5XGSgC6W7woypLuctFLFZSQHZTeV++qB65a4t9agv5MgS6Hh+RANgqi8v GNMV+O06WwgqIZc1qfpXCqWoRqt8Be8VbLozaw+DL4aa0gRNl41PLQH8hqbs cSovM5nt1WU2SzZ/uHd2XJCXUtYYzvSOdWCZgUYw0A9D4x9gKSy0HKBjMSAa bNF4lAapcDMThNmO5fZAaSB1Axo9Dj9fZ80nlOvoFpT0JbgMZ2vpkjY1cKie zjgiwPdBq2T5xMVk9cbo7NOi2yNmGZrojj0En324IR+DgBmHtIPj/yxpaTWm qKOiyVYysoMkqt8lHWWjIYwnZfRVOHO+dN3k7GNvvTdVN1LnBCpVT4qCn4fN nIvL48qmjKT2ANkPFzgsNe9LNIwYNxUnHgv7zoY4m9KIzVsEe6tpnk29aXv2 cUFNdw2YssU81Wib08J36SgJVsR6JUrEQhdVyyWKxJwrwRyDrk5HEJydJJ0t VwBqc9m+k+R7vypVl/CgQsEUVe5oOjUT6H9bMJgL/uQvlN6YhbgWgo6mGi7h +pe/DXRW4doWW2R3/EHuPlt6qjfs/5ROyIMo8QuRrhLisZu81hU5s8in5lBG TsA4RFJZErVAXvApAJc4L1cWULKQ04i8RC2rQ+wJQSlEHP4vqjpQrrzndQei +BnSWksvJK5sBtb8u/BhhcSprAsevCEIGE7yOqvckgbSoKS6V+QZGCFXCENI buTBav4ZGgX5tZCw9Vcy/LVFDHAXx8pd+VSvz1WA9VFyEmLX3i3idHE4zQdY 57iSLck0Z39ndSp7qbSeZaTYrqUKzqpGAW29aLJ7a6F572ZN/RIJ45JnZHyI fjPaVRHnrT5y/dkI8Qp/s/KJWqt2EfPZtdbBSeQ7eQL5qTqrW72roONtepFL ELDnwOFGBXrlGqqMT/y/6DPhSjftfDPeLnvOIKFuZgHGDu7REOp4j9w4niwO aYunI/J7SmjGytcP4eKoSQ7WKLDv8C67xJR4mLEKd1a7y2k8YQ5TyqWWP0AV CbaGXW9ZXFT177G3fERMlLhOgYUtEaXEprn2qxYkRQl7aGAr32MbvFa+DR6G M4WKlFsgNYC7ki9Bs8rED5f9HUqhcg3sLeGt7AgYHVbfwFwIldzjBvZSusVb EpLkXYkn9jhTtpSc+p3vM8aluDm7zq/xjJh4bnU20gKiCZp/9occ+EV+BDg2 tuWRBJQDRQCkGrsuWBzIW14qU88q6VEhQrn6D3okmEpc6HRJn9UfL7L7Vziq n/2hiyZHoeComjbCpNZ7k3UaIIbcegoQF+f1tI/6XNj1mASfK60IYXvEYGCe o6zEKP5VsRgLPW6vfqI7boGSkIcSAcdij/X7Vjn6GO3zYEH0t2crI5z68dP4 0dBtY1MUGA7r+EPxIlNW1iwtK4S/YbnB6s4RhqOgmoM/o6LIbs+jzu+hj5Li /bh6pgpyIZfLC/AlWa9BIf8lyyUuqksJfmdxFZ6Frol9Bno5/GGKtVt/UVRD nVhVg/V4YSMQmrJtbaAW2SASitHDpLowoA1GVuny2c6QNkFlTK69pW6M2Nl0 dGnNuxPPEowzwC1K1PuIM2BwIsbQ2jFpu+sGRBd75r7n1gqGUzj/lPc5Ziaf mJflNiPMQMxDOKFbsS+lhZ/PZvXG2uOQWwB/6hkomqpIMm+Yyl5bZufOaSKl hkctVehozlskXK4kb52efTwKahVUn252OLPTcZjrHKsLGLrNu0UOP0qL9+xQ Foa5Fie7zmEdKxPZXpXPf5Musb6QWUDK6f/yi9Lnp7nl7NO8XwaYMIYRFmX+ PC16KhLl+uylPBAQjqX5BZ6KyguGYy+MPla1hbwKJAZxTHDHBm90+OR6LKWY J7IfFjeLSrAzfi445gfdI0VgYLOH4Z+vhkPfTZp6L2JQLKdC6Bv2p7yCo4N9 W9nBueWHL2VBUeIU7rUgBATVObXFlKbV4nlx3TIeJNuuVSPZ1TBSMEpLorZ4 5bZRkrP+C7sqNvmGTZOP5JkhUIGeBe6e0jPFcfibX/0PqagUZLprsSdVIwal jNEyr2zfArSf/ya1x9sWwRIpAkDaP2QK7ZuZcDLC6O1UBZqF1n86cprf/vlo IOJuNcMs3s9rTvtCfb/pM1NRDPXFz+dMd5Jww1xFtaf+7oia8wObyGioSTj+ ze9yoE/+wrQ2VUATLn9o0bJr9M0nU81DEEj2561lQpwSL3Pj3eNeuwR6xw6v bRHbUtkc6/zl6glYHxHqALgxtKUWOgp4l+AWTdQbfgCWAWG2SfJGshT7Bliq CWux56Sd4kfOwahyRsPOPnJHsWSKLa5octN9WPKWTXICmBpmh3SK5iPMg0+r 7CLlI+8d2cTBwEOmgLQJUGR4y45l2QbShXuXVWNAX/cYECIq2HLAeEfuMlhB 7BFJoqFKenDhT5jPltPmHnfL8AA4NwRxN5YcKMNktSUts/yCnTJYycnsEdHD yWC3+RcezmyZVodkTTEfVeR6OOS1FfSGAS6J6Fu6yI6OcalbJAgAOLrVGI3j STMrjLV9c2lzAc3NJkMUT2BAcEBpqWZdZ3opw9qmsj0yxkOwD/k8yAIJYWll sO1fFhCpG136sj/ZxclrIAIGoxkj9Bhfp2EmJ8WOWFEKWTXiYV+3WBCEttil RQYIeKnvAw8p4YX3ggaQ0zVXHMFmMt5b/SSxa9j3udDDdnF4wSe4SJtZpHJ0 GdZo2WY0Sz+jScbWfwhyiR+ULOAFLxt9dZIfd6xNWRWycWm3q+8kqCgiUWrB bJ4kmOSOZx8AsDqAEP+Vu401emdVGBvv+Q9LJwBZ7BTdXqZKIULewfMoZyfv aYJ+a/l259V1D6AQ3bTNeKPohgHsHLkmWc6yRryP9f2jzs1VrfKUfvtY11j5 P/CWMIsuV8OdggLyLkqUwaTwrOZDXFhaQcXojNnFQaWdx+ncHV5/TciQH2OC IWsf9vk4SUYzTVZga38WIzKAomgg6T9iUMmAzv6LrbwQ+CzGWRqzXZkwCQ9E a4XhGcua9dB1+2FbN9TDiVbNXpTNk8t7+P5GqJGgy6W5dmWAWd1K+rMHknLH 118NslosUZc/yvXyJOzYjGCJ7RrxsbRznL1+2MJBW2a+D62/TRz+rLEEtY/u lZNFW/zejU2dlIkVWEE9JGdel3jdrUUGzqDbT3BYRA/6ZYqkeamsC2wQYgbh K+ZvFGLcMiCpm65woQmDp+SZkFWMBDn3j7hMHzlc4FXAjizKVzXenMEpzizE vYy5fjSiqZfnisafVDXjh79fapyno4Mfsvjaxk7j29Vr1msfaFnaFTOG4ZLL zVEJU/nHCSdq7+ssR9YI2QL5z/w5gp43uEfuEWOooSplpOEnf3GoruLRLdJv KoD+IQ+umqnYUQd3lkeJWwIzAQ2kzgD0v1TTNw10JmZ8ztLHZs03JbZlTUQV o/jyh6XxPk6V7EeDFDvMJ+ImqHoUTMOitcFkaNnlzCjtUIqk25PW0UDHSTt7 +zib3QG2xVUJaFOadiHefahYua6YCM5Mz5ge9Ho0jVEZUTZTVhE4Ml5Ngwew BU8m0Bg+9vDJb9iWiKn5dJNwggluI6EqibUzgWUPwNoCWyNsxkBHAnBjgSTH wdRhpERkP24SF+nmabh82NyYMDETq83JCIkNfmPU4+EhQDE/4vfZcK0UiY3N WfA/+muBOK1rc9SYctU2N0qbj7VvNvH2VI2r2ytX+zzYuzyoobK1a54FOw+7 S0v8cLLxeM6Gr2nfjTWjxkJkOpUvv0fezWF62lUozgTBZkEaAbxRopnyWB8D 4Vvks9CnLi3jl1tjn9ypel5chDpS3HKZD1R5Fon5juFaAmnMnEHQaz1E1wG3 HP/JQGdMtppeDm/4GIYTgaynztmAehBy2sBFKDxSOsmwlmpGeExEa3eNiTSV Dkqw+OpY7CBs4LvoP6PX00yWayMv7QYZAlZ6XJvLoBaPiQQt0x+RXXSAKoCr +0wQqls0zYXHxC0c0Qg9K/mU1XThM4Xbx+BuntJ5Z5bgUHGq6/iumsJ2j3kS 1DLjoePZGjzsMGoHn+wZl1D67nSOTJe4Xaslj8M9S6Fh6W9eo9vVbHGS73Cq R0K0h10Ba1N9jGE4Z9Or09YJAfmFMJBS9bz4WDpPju4m/rOS62tjeBtoTVhf OZyCHMFtMUssj5eVT+mi0XkbC3FNIxR8lgBSe7WfGp8Alai6H6/BSpoPn88Y 6sd5i/u93WGH398CCmKybBwcumr3sF5p+sIFQq2lyz9/LT54thPaNO02JyYl zfRzi077qXpxNmoCn+S10n7oJusGZaxDPh02Oi75/VhtxwFgak6V53WQm0ed OG+gGiXoqhCvbXN8x26IpW6BvsBTP2Wvw3xEzxLP+gRXY+YJ2y8A6oSaNvcx a4AayY+fFi0RDpFmfLi3H+R0Jc6wJDs4jVNlsmSnbAoRVJvZe02CM/FslYX8 9qdfHnPHzx+2ST5oaVlMb7XLBxCRb5pDTR5IClWUe0hsGZZjcnjtQPbOL0k6 r/zR8eE1+mbn5BfHvC4R7EaN/dc11Zqod2PXLGFxT7JnHGLGd8Gq04dZBZi9 gQKSJKXoSsPqm2t91ypaluPI1yDUqzBC49Ph7/89vxXGtIixKq13WCgMgR/D GXU7Fc5Pvo+KA3TFzMa10UV3+OR9ICE2DvDmO6NxObkdYI+1u7XCU8IQWN45 TD+YFYVK3Sl2aX3IamXVJ5/FRlTFd0sw6D6mIc1uzVusV8UJ0aZyisTCbLAQ sYDQcuF4Vk5gtLgfE/5y++zThqTwCXA4cbON7DkCGmCBbClY8XtSolxAPMqz NZPENTDJ1MJ7VVG2AiylcD57QQFcPv9NOLqbCGAVjrOlBPIuIPbENs/fWWZp ou3Z4yN/VuDWYTKnjrRI8M5UsFqJHO3s2i4F+w3usyahlZTLqFXWvO6OpA+H f0/naaNsgwXdwDRwQfZYEs2KPUuUNp7z6682MOUHWmnL2apXk7V+ToV+tn1s JboP6ENXRfrDjj8sXMYAylxnz2igkeQHNrw6hVrQL+LvIvSjyolKZYhsqTWE otFT+LNUPEnmAKvdBIqKKP8NT5yXJUrGKVGA+W7X9a33rW0osAWsdLRMyayR /iA/dxM5QxeodEgxXDvlmEVjNYkEsVkGFV08XesyZMDafhWJYOx1IPssSGxw YET2idSRoUc+t3Debe7Z6IvEgqbW7BUKWusogrO5VvOq89nZjF8aTLfOQEvV J96zx9gdzZDf/6Pw9uI0+xw8+OEnn56Y6k171YyMtxjL8EZ7TYoGf71qCjn4 baOqwjGrqaWUKkVd8K+u4FaBZM9YcLj0A2LKOD6THKuU1x3PRgEEwGN6iCHN JwnGMQfKR9qUnD5vK50OKxi6OvZPEaIR44EpjYddVPfZkXHTkaQ9FwNFPQdM pmGs2LU3+E+luWJi828XpnGE3+2yDPs4q45WMRr3DxCpQfcxdI0z4o0x8YZf a9PZ4y+z1Lldl13sZKPKq75nBo+/ZCfACdkz0BuOgx9kYuSBJP6kPjy1DoYo FO/kOdpgMoJVsaNcdZljpitQC75lIw0SBIkyYpe5hJQzL6zB4hzJnb/+Cr4A RXgiLiyrzfGwqG+cytlVCRpDMefZ73HZsyeBXAYRIRwg6x+7orpqkaf4j3+p yfLvCH+Hha6CmE9izJkg0yQdDKxZ7U0dZjwx8XgVUS6tqlBK+dFfa3Oyfnsk iLYBB6Izh5TTqx4f+pR3ZQAU+zP7aj/3cyxl+qANS4hmz87ZDKes8FNOyYte CzSidwmlha5Q+7k6WuxAFLERKwIyi4AhR2HjGmcVIDZrDy9Qeke8jHoG+j32 dxSjFo5O6iqdZwGsPrdt2lRNcIxGdeobGiH803GgV3yiN5HbSZZK0Ud+voli M2BBWcuxbd0ht7RRJ5DMoZByskcNtzbe8Ez5d/uw+XgAWQDacYL/vDL/cIxs EFFvB/0jjVSuhO0K0b6aAc5sJIuq7pW1fm+ljKqIRTiHYV2pC6K2UK3PG+PV 7m5uVpCuKZ1ktGc/qg1t/rh5tNRymmLCABrY7fWpQa8J5i3jC1cNds5welEh WLTlGZ/qVIVCsZ1QfVZDQHunuXL7ET4qf/zBOqoZQ3YjbKKcUVtBoh81DqiJ 0SKpCskqjSFF/LDe/rkjSfxXx5y299u1n/93iOZgpJ1NE+Wbn0oiB3VqYhmn Rh1lL5130EMPJndtLwcnmgYyotPnBJ76SIu51krw0E4kMv1rxR9rO8IqhHdQ m/iAD4hZ3XX0YqbNhioUb2rH2HAbxvSuaxyYrTKE7cO72Tsa86HLrcL/NH7J aFzD+1Q7KcL05DR7r4mQJMlPUek9RPf61MMpPYMWZGqay3KkpxICarRbwVeB iGj1Un7a9ImMiu0QtuuI+RmKu60hmyNh9m7DPDXaB2PffcNuWmd85v27ctO3 pUYWwR+dnoXXy96CChpy2G07R6eSswmRms7Gnet1/IIeuUyeX8yJwrAU8cMJ dlkYJWAz2qGdY9coC0gPbE7ZKhSkv2PpXfRIlTrrG1LcHZ/hoj6s43+Nr2Sh deLId3aaKU8GvQAHp96OfdMgO5fyBaySjAUNWOVn26ENvf0jVZDIT5tCYa+y 2JPtLrawUMZRUGQs6nuIM/Y050RbpWngaRYNxwZkNbKaB66JQAhtMSL4gh8d x7Wd8tp3R4qAe2ajhIUHd6iZ7sRGsn3wos5buIAIhHOuospOzen6+QWBLcac 2QORKcdCu0V5TAVh0OqEabe0OGahObZHT6o3PZ8Sd3gqFP2h+fSU6bOj0LXm 9qw2e1Q9OdLcO0Fz/0kUaJWaXt94SSbdIcEYqWmAavcJcaysBILcCwYgp1F1 tpB9wIxilag1e+N86fBsdCVAMScb5nue9RhC84RSGn2XZFeRzMraog3JwR+V Yz1VRAMUJcszeKXENwoF7+HVVKHjZXghs0qW7YXBIBt16wDGwuCRMwiTEJZ2 pmGfhxf+OxbEAfCC9FzbJkqvm8ON2BiyItX4UpvTIySavucqKJhQW6XJJN/l Be9ZPGpnrYVyPgMHPtzd/8rlN9jmH1Wz7g9eicvNduSwEgrb/Vdvbsfxe8IS ulwGUt6BsIpnkiWHNsINLjXwT77LTR3NeweXHjy7558eXpxJqjt1D6rFZGPi RC62UH3mWL+FYrrh+1FX2dkZyRF+/jcbtB56x8flRiDKrlWXE13NJax9jNp3 ceJn4dE63HbAWMmbY2ubIlaQF9ZFEg4w+He4SQeWMyyYsvDhD2OXMs6VU3Si CfgeG0DQIXI6o5sMYBWsHSUDY9YRWxK8Nm/U1aR4XcEiA4sNgfVVa+M26NF9 F3y0mZ7eyUlbio+kHNEatqw94ZgCja+IvAGIlVE4/P45PpH6JsoIFBItkCxj EV5aOLG+KZFJXRDrrBXxvy/9V8kHuXot1dUN03NaiyY77hR++qyoToC2Qx0m 3WIyH/mA3vmo45y9BJlSyK/bx01lMb+Ro2a3fUGnt3Qh3TPCD/hdGLQBf/ZA WaSwlaPTcfLzvxHPvWA5NZdNanqXSXpdr83JO6okM8PcsDqHqe7zRhtNtgI6 pzVMjXSVi19HDd0auR6Ne7//1bdaCx4qzCYrH1un7jk3uGk7I1K9xUPi/Nbr 3qIROqdQjKvFasf3r8msKcHky449FZeVY/NLtht7McU/Z+CxuM9KwLHqgIn9 HCKk7rMIySqO7K6tfGriPOnTskpxEbiGc/ov70jGDMtWatvZau2jucv0UYkQ lnuDnp0FswOIu6h4JM/caV+gtoTM7hyrIplyl2gtyAOMcJO3Rx3utRltTlfZ +54xwyhbBrdIWdH8yWqKDAKjVfu+qa3SC33ZCvBsp3F4W7JIULwt8TDx/Esb xmJ1hK2MwUaMpBPI0lSeKnVy0BphpQqQMkN3RY/qyXQcxrBljtMRVKVkuLmF QTDbKpe+/80jaeRjUSlVFLu81pnrV+MzBjEv8UIZ13WDsI7xrvPsSS2zeolT DyHxUiu03WSKJ+Ezm2LhePBKnD+E7G+1EzDC5NAqmNSVgWgeHsD3wRk7L5MN is/otky2UlNFR41V2zHBYpN1rpvhKVtmRKdj7iS2iOW2fph2zCw8Mjy1f5qv CjG3OgrHh2cIyXNOrCVJkArqHqmqaMS/vECpPSYL2ZYii2RYzfmXX8TP3yu2 wgRByYqzQBuy8AY24PC1/7fJNHOVjNmlR8m1tWVbpkTz/4yu2ydLZORfypvq GijD1Pp7cGJjcjG1EWM8F3YFcuX/MUlTG3yb2u7VaCit+xz05oJ1LHpzVlU8 mZ9nNWRyF3+ypIKrYNYDIvpRnniqIfIoZX3Q7fan4eb84RIAaKatW5wW7COa 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 aTm1UkjWrcAkMassOucMw8/m0o77X4TQW+9RmYz8Ss/isqtkW1BAoTMKJzjA CUPqJAFtTfRJAfakS1/ZzSyq86RJfymmz6S+c4K2fv5GwmbJitWocCvMClGS A5w8sLdp8cySq8IPAV09rpKtG2s6dOgQqlHRN+GtuuFNfKrIE7rCxrjeGe1N uL6z4oEa3p65jMklD3B3djmaf3wwV1tvmln9h0n84N2hmtARvRLF8g785IP8 /P1T1W+VEKkZdS0gzXfH9492pSOIpNOJOQjFxNl0goNmauuYuwxOA72EOFA6 ozbbmXlls77POntQFL+ifTkYx8rMpXNIKw+ZWYMSNAg0abt09C2Q8xH1TVLf sL8206Le2sgfIVw+3/HB+8t4UuJ+2pPdWLaQnHsmrU3DCDbQuE66+Adfg286 V3IL7Xq/uphSSh3xNZjaH87hrUA4olbbsxaDcY43dKskj9NdnLK+URDaCrJr +QPPRd0GwxUPZG9oJDxbmFZni4xHtv6o6CnVvU65Jx+Wy7bVfiaedobzyCB+ VKA8yRbwnWYJvtHBx3Zf/DlmdDMLk8x9zcs7Cjdz63IeJ7KtzuVU0jkw+mOn mV1qXr+EYg66Xavcm+CN1DfHh4y2rVPJ/bLN9RGa0kTpbJWNiai4PWL6hdLE LQOB4EOW+gbLLvOcPq8KoA1IWV/LoVJywBQusCfQIQBnRow9e3ti41I6pVLl upsqjCItp1D7XCtSgUucdqvpV1mGUs/OVcj5C9DQr+S6IOqVTiu35KdZ/agr 8x9Vnzkk6FMZHxogVAfULULutgilfGb7+VY6D+/KviYPmsp5tPNqlsqsXQnk f8Zd9RZPK7xqwrr/UlvrhbmuonuKxPZZ9YZP+ih45rikmDePgrTlflUFD0NX HM1WRtmG369FvQhJRbH8kAA9GdPrH/c+79MVAuBEYmdVhVYp6VqPfZsb1yTJ ug9kPJZjJGucQkQPpmnkV3KkFQjsXY9OLmEfCtUymHWmkVDBieM9RVF2Q83t hPJjQwEoucjyb4ojFyXPxsbdyUnWG1ij7Ou5a4Z2dglQytCl9qDritVRSNlW I0lSYhHfWqJqjUR1LPBetrc24yycongMyVWWblv6HxqZsnTBxqigq2jj7KS3 XvNEwzAWN0NsX3RDKeWBqnVVaUFRBRmlXm+xCFta6DV3svuvM656oJf+TzsY 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 G/A29tdyk/2UfDUfnqefjfn1j33M245vkxsO1wkOenp41SfOg+O7S1JkqsWl CoXsJozC2t/Be1l81O0YxpW7nF03dzel2fz11dssxtyPlND3S/HV24DWXv+Y P8Qc979fc7tevX35Ah9Fz6p9yCbreb989/9/cj+93vzLN8uHZ/1nxefVXlr8 LLlP7DSvsvnHDhKi5QLzU2r4hO35r7AbO+j7c5w7PzJ/S1T0EX1+loW2UNs+ i7MgLATXtvzZmmsEn1p/XU85C/oXQgPk/AC/JpBjHJIoNxuurOHkxHPoMyU8 WzyFRYHvn/72joX3eNUUG2vucr0i70LL/371+gUrPc13Nv3mXr95nYebtZD2 yWb/fHd56lkYWat5fvvDHkq9kihVc9/yrPIPaJ8oT0eTxvabq4YlxLLJ8uBf jCIrENR2Pvi7n1693ZttLuQyf8uCySLMv3yRvUVvY8Ft3mwk2bNe4eq8ed8E sdBozhFZ0I4hSax1tdSBTn9kb4vJ5vkD7+HPTPu7Wsq057OamlCwsnkh7zgZ g1P6J+0v8TzHvv6RzaYd//IF4VWOzQH5LTc5xhVru8kBuR3v/l2jxPZyJx7n l9yfN++/f5q6tHcrERo/5U0n2/2ZNzlzririLLlCTpW/hzTG1+COYvfbnDI7 U77HLkaetlme1/4MX06L6LPp58t3h23d2flP49L4t+4JH+sVP33XkH/s8Ga4 0mvpJqUznkxMDOzev+033UvzGR2FAtFabTbc/XE7NtpEQVmaJ53MUZy3J6lw 4PwTbHBgWtFgHqgFqiKSfJ6VjmvutrJhAmLqGie37HR8o6SqmfFmo3PDbPm8 NSE+5UF2Z22EaDlPI68TG8SCctrW7mxtzaAHgiLIQ8ySOWXJ5HAXHXt4lmvy mywal0kzt5OHeTErIv+fg7PV521ZwI7N26+PS9Y8ZhGLZMWhKInd8XiZbOsA IKbXlpp6jlOHeW8gnBhlE19ejrPmwNYU3X/CDlfFlfUxQ+e8qZ8xH6fxtw/I 2za5dfv/f3bHjjkHAdertd1nAK7hP8c24fn13+V3Vtg+Bdmvmqt49yy+uO6s ighx9TIEEKAstwSoF7SeUgfJe569zAq+IEml7pGQdgMSF/mG/b+nxLkE+Klp UONEeo3RnzknlPmsxVR/LnP6LPdUTiCLnOQSPkgYBT4LtL35gkwWpSa2RZla skZSrEmO2vCHVGzGdDk5xHKjULLI+1Oiyrty5SmPbiB45dPzNYjc+QK5KkBV +Slv4JrzXWK+udF5Lbdj/2XT7RLJaX2/Swx+spxzICIvG2EcdTBtOPnKOEhR t0RY+7Dsh+eJiF69zRn3xnmNccYwwZ4m6k9wsf/7I96SV777KRtzFjOiWzEw 3EsW7QWzZzHhGPU/TEvw0Wr3nBFviyCBLXm3DnuvVu+/Jd2QMEhAw39R9ruf O23tMDkZoOb83gbxZtU8yVrK33lKdHxy//O88ixY43mK4FJTwSM1a5nYNWcG /ZNnmSeZAn6ytvRRedJZ9nnpitXCvGnU98aQM7DtsMr3AU+1bku4qKHFSwWi mCSlb1TI7hmH1wGL6Tytsapp99qdU3itjw+U2xRQu2MZ6NmOvrFCuTNTuTNG HpUwjGV7NJbW3+hqJjxS7wfx9IBb4Xm4QgqitCHy7gubI0L+c21PoHWyK4FX RLtJxtIsuZm8Lyspbsu0NXCDZ9MivT8tvgfrlXm2nmbe44YFN/tAne4uBbm7 fp5NJJdzG1wrybJJE5lJrj6M86/+OuBnrb+USvlvv4DXTSG6LdMtmBkW6Aes wtgHM0DKAti52J4RVrjOVszJE+fkbcAO2EA5vHOizjAE/p7lGSC3gu7ntIQH hPPa+jeVb+GiyleWPrNQgv6+cyfNZnMecijTEIN5OMl5wXjmeRE59ecXrLR2 XJ9b4rrtKmhNURYwUMmKlRk2E+kgv3PssAsngRKRE9KwS2eITMga0yPZB+t4 Cs7hiUUnSUTr2mxn7EaI4u5/fyyXRBAiT9G9Cl+5DzzmwtkH71b98nkFLnqI iwh7bjk+nkxnXsN/s/+3g3dnEkv/Nj7KsPHLPyWibWtzQ3yg+CHImrbXcP3K J3R0MBp1QLSto1E4ZMHewmNlGRIhcB6X/9awpmnxAH52c+QPWwFyyv2rQceY 6IYRCmBt67636bsviDQVtSStu266FrS7nwo/Mx3cE7uWemtgzKODmsASFTOd FbKd1n1bSFzJb784kzOhpc3SXPW9D6QCd4reTtMNrjyL9KE+RbtGYIsfn7Wr pyn2PeDyuNz/D31WAPrYyn2C7kZIAb55/6s7Atx5417Ins2R74Ou5zRg9Der s62R80etIJpR2wRNKm9tKKi0ZOksO7US/6m9Aas86QI1Y5+8rpmFNYIpeyYq 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 4xa5ZA4tj/jVjayzzkx4+n3IAZGC4oouhBdmEmziRko1vjPeJvzw6oa6haNh eVkL1ho5ab3yOknpsLtfQumCGC+PMuxzGZlxwX8/NjfYj9BJsQ3Nsz0q5Gnm CfH9KgdiSHLKthFrN+P6C8GC7krjOyrYk5kU7cGkD1M8XG4fPr3tSMoNdiyO bDX2HDeEnGKdp9QxfZlsarmAthO9l/EjpCas3S+eFIArlJCByyzmfwGByo8t +qwms2XZ96HPP006/ZRwA+rNTfa1bLZjATNFUkAC6oxAIUktTMZ334IsSsqI BoVOhMJI1RXZ2xfJOZZoE6dKEUepy3YoY06MRNjU+2DdaNacJlIk9Tv/wVfe 8WdHM3nppE2z1MK2vGbrPAssZhljPXs3ubJ4QvS8g2CZkZQ4VQldqQX+oQ69 p+Chl/CRyaqaL/8rdtgAbUPU0N8ny/aFuHYND0+tbivtwrbt5DvUwu1wRUuV 1sW0xmx682o+jcwJQzl3FuatZlGNXrGDlrrpP13Cpq92e2sbNccW2tHDDnJy RHa2ZmM77a+WgH1axjsFt9z86ZD18K5I9n7ft9wll5ESXBkGD3FjehikQVio ZXsaj6nQq0Ly1737JkTpGioUEorEero530oBKpb+s2iqCFdE6OUVZV2zKs8X nFLurJmyJeVgPmFjEp09e9en1K79Kn1NmuOnJm1y3akRs+6BFy+fU1g3+ZP5 VBWcSwz8VlIhKOTmoI7uwM5T40KUP3F/1cHsxrUY4aR/jRN1J+8PX//4WWt+ daWsFr7baN37bjOyEwzSj7NvWDpgnJuu2N+sP+7gdNM6WFbaF088/XbrknQN Q0ss+f+RrOiUXU6IIMv9LXyPkbSf1ZXGst0ouDR6xZPhpT2unKZVg7JpnO7E s9nU8tUOq2slrsfa+2nOyIrmofeQNeTwW7DJsZCKe2Q9yzvk/578a9S/rKpf hkpg7vgLoUpro4Izw6urtOIdvrAVkveh1dUUW+yU/ngvb1CpznlPyasskKhA /xcLAyUQ3+6hj185cGkC2rtTqBCvNUzd8Jt8389kcp4U73nunjnq5CMv0QeK /+U6gfXcdwcZBhezJI3sRJTD0DZV59c4x3IgYkLzvv7xhNjmjOqlH4Tb9hs6 6gGOITjVRkjSrn2z7P1a6jVn37DimlZDvm04upomCar3nTtfSxn3mcc8NZB4 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\ \>"], "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", "\<\ eJztXWtzEzcUdRw/4jwIj0ApZeL8GIbMtOVHZGhmEiilQ/kj8Gf70UTXtjYJ Z9dXkbR7Vz4eiJW70l2dcx/SSrby7uLr1eWni6/X7y/Ozr9c/Ht1/f6/s7ef v9yIdncGg51vg8Hg/7OBKy9uiqsfi5t/i+/uh5OwnLJ85d72HM0zV9p1pRMv m7rSyJWee9nElSZ3641daeZKT31JZGPfVmR7clO5iZTc/3e3OnLv0gjIRO3Q SXbB1SdKLUg2BLKnyraoL6ietn9TIHsJZIdA9gLI9uuJvwaXDpQQEZyZEiKi FulDsiMlPaje8zB6PiSGeAxkz4DssVIf8oBMVHwEl1BEIyoQxEdAdhJBGfJa RIX2vkjfn0sq/gaXJGYlM42VN9DaRNthZDtEgPivpPVVVK8vops3sPAJXJrc k1U32ZyltNlMWw/FKeIDOfHQWxNpbiDlH3AJOYT89qqucu0Ih/pfDdNIH0JX q0URysjzkEX+WPLxWan2VFHPvYSZ1xHerx1bM/Ghnegg2S8ttEWujQajmGlL x9SicERRXgq1KI+gVI/Go9+X1KJZIpowV4MgIgW1QMZAwFDbkb8b0oKmS7Va liIwHKILs1W721rWPXlW10jr9CvGZeIptzj0pRNfkqQuT2EvvEx6Nb4r2/f9 +tWXDnwPX3qZ6JNnudUwJn0x9KC6DeVL93a6WJvtXmnWePV8qeKvpUMtbjvU b0A2LaTeG8I23E3CJmzCJmzCJmzCJmzj3SRswiZswiZswiZswjbeTcImbMIm bMImbMImbOPdJGzC1tWrPrRwTAK2koDCHL/ZniSgfAIKc/w09iwi9ZGKbQ+G YpNgV669VVQUFgw9TofW3T0pKeFdshkCCUKlP8CYNklFa2HRbydvkQDrTi71 5k70th4sx4NCgBmMfJuE9pOAuRPN7EG0VM90Tu9dcuvKeZFmkclXV5/khm3J nqgeOtbhcZ5gsF7PAhXRrv1QsO4lvx2VZfzqG+4IWG0LiXH0tfr9suhBZ9to U5v20CbkzqSsFcrmselE3H0UEj4W6ImGHeML6GwQlDWskoduJceBdL8sEUPP zN8NjenZBwJ0rNSj/hOqOKIN+VvtpHx4S836JbLAaQk6I0mbwaqng11fOggi 5e6RPjcvraWj43+4JGzd7cMID8vELkpTyG3CUmYnjOd8tr4XWGFwxnfgrHXE WAgNamExUQzF+z66tC1SEyqyvdj4TkBjCm+LMcUUkKgdq1vz1LkTNWyZpCAx hY6J9+uRL2UJ8XnI7LzB+1KPJKn1WXqQbZHGmOlTTyiTUBl5iNURiUa6bnAn xObKaBFLuUeNYWbBdpnroYPNU63TtmZFC2B7Vq/2APpNcVBr1HyLXW1sVlWH zaPnglTb2ZkXsaBR3Us7hwjf8Yl5jEjAasxqStbn/VpXamP23GOj7K2urGXo vStatcNHiyYRiNMQUmLWDGiccOMkhFiq6apT8/Ol3Y0rcTEbOSnGkJ9W4WP2 QttY3tFuBQZNSjLtAqYw07RBR8zeXRu2Cp+S9HhXC2Vz9MdJwjdXR8E0Bj1m JbAD+tM8XaX1alF87EuWVvoCR+6YXadSFj2TzkQtAVPtNpnrcDuW7WCZuipl 6voDb1Ui6x3D7pR/2pOwCTsd7OgFaCpI98Ccb22aWhIvQVn/OA716fXRzFuh b9MoOKlLA7Upv/gWDZTF7N6w7cM8VLG+FfPhX+prR9+mLZOgbyBuRws+uFnu JmETNmFHwJ67K7PgEnc+LHeTsAmbsAmbsAmbsAnbeDcJOzfsNo6R7GMLUpaS MkvBwJxC2ISdDnb3icdmC1KWkjJLwcCcQtiEnQ5294nHZgtSlpIyS8HAnELY hE3YhE3YhE3YxrtJ2IRN2IRN2IRN2IRtvJuETdiE/TDYl+7t1F0J+ui/tDhf qhB93/OVBzs/AN8T2qI=\ \>"], 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] }, Open ]], 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] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Enigma" }], "Subsection", PageBreakAbove->True, CellTags->"SubSClass Enigma"], Cell[GraphicsData["CompressedBitmap", "\<\ eJzsvb+PJFmS5zcT6T7eWd3XW7Nzu9sk5370ES0kiAQRQgguuOIggkAALAIl lFBCAYsCUXdIEEVcHpBCEqh/oMSmNn8CS2yxVYoFUGmJaFAbscQWm+b2Mfs+ i6ze2ZnhYm9v+ykBz0gP9+fvmX39mdnXzP6nv/1P//5/+V//9j/9h5d/+2// x//4t//bv/8PL2//7fH1f7SvLn75i19c/J+/+MX4fz/+hR3/77+4+H9/8W92 b34c7761z4v778c3P+7uv9++8c+Lu28v/XjIb3Tm4J92vHt9f/Fq3tn3N8+3 g9vf7V5+sf3LDuxffoIdb9/cPLfTLvi0/9pP7Hv779234+3vJjvBvtFP7Bw7 uHk++pW3m/qXNjy7wpDX2c63S/nFbbSD/cn5r+9H+62P5+LlF8Or+eLFD9vV Xn6xDezFDzHUZ99sP7djxmw/tPPtCvaN3cifZRvJq3lgqDZOu4gd+HXsynHM eOzAfvX8u51fczuwa9qVNS3cy25qv7Lx2Dl28Oyb7cB+a+fbU9jBq3m0/9rB 06+339rx8+840x7Kvtxu5ydsF7Q/7ante/u5fe9X267DMOwcO5NH9qf7zK5j 17c55Fc+/tG/jAfnslzNH2qbGfuTqbar6WFtBnzM24HfdLuIf4Yw2Mm+EDGZ EgDWy06wJbbr+7JuI2QJ7EZ24EK1Hby+n3zyJ5e9kZPtmzc/DgiJyY9/8t/H Lpn/j0vyv3vz4y9+0QW8C/g/bwG3m/s/dy7g9s8pxXwTGQlyij+fF5zjdxhS GENgGRqLaQev7wcEXJLu0n2Rw+TPsahXiD9C7Sc8PGAOuI7/OaEuenqpi993 1Cd3lCahMYxBOmQHqKz96/X9p1JHn6jB14rJbnfkavzpB7qXnj001a8ZI+ey LlmDLXjO2OjPGNLngwlhtCujE6n6F65STcu5i99x4MuCImfT4pPGtMSDMwO3 vxt8yWJx/UsODIG4uH0O5wvNnMSZgj0OkL6c5FGfiaNT+ZXNw1TFw6UiJFeC wdU4YNLsBLTQhmTf+CzFAKRSqHUKDDjdZIBfSZykScyMBin5vP/+04R/++b/ 6GrU1airUVejrkZdjf6JqNGbH6dUi6Yo+aOqOjyorhQP5PeJCb55PrmxErLg +/0wX9ii8tz2K61/fj9K6lOy9FhDFQQO7ARJCnPmP9+ubNt23frNj7rFyH9d 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 Dhh/AmCYil9WkCgpG0PCQKssY4ZGEjCHLFndnJUAjF1eubfpAjvzA85Z/rn2 hcVNecwOQ2uWsl62WmVnVUuOGao/Pb1cPlStbenAawnPczX24cwTUo8ztKLX nLQ76UrWS2NrSkGc8Gcdo4Z0ZJTzmEvQFy5k4xzPW5keM51cSu/njKku4aZc kqN6iJTnQKDKYJDSwyhEWp1HMiYSbL9ywfkUrWUwh9LDQlZJJaLK+jt6ijr/ 4tb7t3EjqrFQEXB9fAY8wCfZ08IqfGfVE+f2USS8rI9DqG3+8ZmuJcv+6deT QIVXR9oUUQDoSRaxdktqkIW7lPx0WI3YGmzgtV1nCfT6cgUVmIV0yRUouold AcYlRV4ozeMKHRYKMontAKyu6UU97sOn6fbgqDPJ3GGKnmabjOffRVE9kowg 865BChny9RU2I+5IzAp2AfAe3EFpf7Z8cLK0HCF+df99R4KOBB0JOhJ0JOhI 0JGgIwFIEB1Asxw1ToIpIxSDalSrTpTcDPJDgBPyN7ya47/ME8tyyNh/+oRH 9N5t3xFzCgVak2dAWSTEeX08Sbd0kGWmdmq4656GOFDeUt4lRPKYJSnlwT5m Naclc7rXx/ptsxrFfiAqIVcHtt0+85oJlwjVZJ0rAqJyT0spITUnyQCDu3r7 l0ycV4jhlCntIhzITiVUIZ+/Idk+ixyvyQKxwQNarvQj7gcCImvU+oy8K+Rx zrrah4/S9gW38hnIA6Gf/Pb3Ifv7rFvlSxwoiM8j41OTHnbOQlJLdh+qLhz3 E4xrlnDGW/M0excKS4R2+QoKgHGadTDRM6gkWYqgCas5Z5DI5gQfyf7tUENX Qpo1646T5a0XCLgFulR6tGv5ThGT59/JBRVehOvsKbR8iEADBOs1ymoN+VYM DKMWJ6DF8AhGKOnbVf/yvMNd7ZWr4lGKXCho2RGiI0RHiI4QfwdCPEiikkEB xSGLwsT34j8676FRKZ3iYAdbcZkiU00cTpnU7PvDUbvlNVKqAwy05cbEWKMt QlNBF+qYyCVzudhFMz30bdXmdp/9XPfZdkH7Ye6u/eGTrPexnhdtYfwIDrU/ UAWCC9XjLRPD9WacI8na5KV11QWWfB5Cd9Vott7Uv9/UtNIYM2NslAUkk+GQ GVSHrCMDTnC162y0QWVJ4IdJ41KQNvbZUINICkim2bCfoPQCP2RZ1pmMMvfh n5kShyysCaLoKWiA4spqUzSwNKes/8gBdSqZVUrSrCVXPb3rUahxKUUn18ef Zvhm1PDSOotNu94DQmKy0Zfs8YGZJpNwzn4oYMmalSuPmdR1yu7FDOaUpQOW rE1pxg6BD0ItTkTYicXpxk5M+7EUHPDyNKR4t5R5DLSn2V2YmeflaXOeSdlo 7gC7Oes6XSbL4fNSZVLI8Us3LjowdGDowNCB4SNgcF7CwMbDC07bTz/3ojBn 9kU55yeIDnbhJbOGxSpQ7oO0QU0f1gztS8YPGVl3uRv/LnVna82OVJtAu5EC 8Kyk1o0pPAQNoiU4g1X17syuaA2HYAU24l5u6UdvnTXmc43aP+tXNTvj5Rex 7Se0n+kSzbtqgmOKSEnv3ChCcozy3k9KRTr5Gb+6upAz0Sck0MX5/GHvwPYw SSxOw5glpY1k3T4mfGOtalQ8CMaFJ4lHvkNqdkwpJqH27YckXlTEreSD476C X0z+PtsGH5L/iLocgqo5PuBwpP4FHWT5IDUFk6Y1U8X5kkz/Yn+Np8aOpNEa cw5bc+JGp8zrOWW+D4OHOsMDOuc3JrbaxT7nA7wBhCRNjM2ieXLb0GIu1Ytk 4Z5K31wy9HGV8j5M04OXz2ZNpNUwUUauFnnJFAmqvai2nLyQ+lM+ho4HHQ86 HnQ86HjQ8aDjQceDMzyQq4BQQgYUzhKq1EzXD3AkROa1XcxEPsEjIhpiNth/ n2R3lGME+GP1/HNM10LM1pwUWyYAGMA+Zj2rNu9LEz0XhLDd085r5vsxs6Gx 18EAus4ds5MMiIKdzTSbzinksWZG0ZLk4CqbuYBnBR9BERN5bofsz9nMVRTk /dszBJpblveEmS6kkdwlAg2o9ZJEXjnt/UkJYG/E6yWrRO+zdTG9ew8bY2Aq TogGVMfonTI6xrepgGFA2ILLeqR8Mg07ZJhJsQw5h5gon4qH4xT3IqcoUFnu hPW8g6/aEB2DWzDi5D8kr1pIcMpkNQ9JxBjqe0DFKEEdIYo/2uAwEI6ipZHF iaAFc11vD0nOMck0xEH8RoE9T7IFEHlgT7IJDzKMmogtQWCLRn5LkiFO0bsw 8rfI59ML81n2PYQYcdw3QjmL4h0tB5V10iu91HQaxHXmJc83+CFKajaeho4c HTk6cnTk+LOQg4qQ2Rov8IAva3deJVElSMCOJKE74OT1/SOVhkkNGLXppYaI a+qFnOFq7oZAkeItQZjfN9XxLJwGP2vJwmYHqK04AXs580tR6tjdVTlKUkWD hEMWapyDrhi+cTzwSJl2oWkdBCHRhC7DELHhTwslFJSggKyYQxb+EygqWCDm RKVuEL5BNRHSal9QKFpxkCSIACFho6Gp/HDJpiT8izkRazLRpcU7FC16MFca UoZ7mI1m35m6wEoBKqCqLEHhDHsTDVPQyjFpzDmcFEjSwRplsCNeVqVozXqX 9NTwhR41Ua7fLUYA9kjSTluNyA0sAfVDJnV5ZKFlwTNdiA3glGGyVhPn2FLK om0fyKfwB89esUThDApa2zXtzTxnm4x9lvdeM8cc0mUSfkP2+CFANUe+PG2b KTY/fBzRKKZKqzNbKliPaeMICjp+dPzo+NHx4/8ffjyoWv3AYLmN1lwDsCHT Bk9oVpsbVXPO/9V+KOIF++F1S5vdHpE+AofS2UHAwCwKBthDLtmFaH7ffihZ QPqqcw3JBSqe3LZVShuHbWG47VR1bMn88ZzyCNVjAhwyG1eaJP+jBsMdlQNS DQpMg6RQjBKuB65JPQVCwXY3ISR2y9JjpFjmlcR5zSJwzOEcRIFoPKY72vlf fhJGFuoLVPh8jsfkClTWqun0PpihY/F+jjI8XcbHYn42nDsku/aUrU9kjwjk uOnTrx/5nE+eVb1TzjgHbOkxqeRv3Ud5mnDULqXgn/zRx3OSit/3EiiF6KOE EQESGdlQGt092lpg4KzXe+xYmo8ct8z04JCSi4FCJ0SNwkvh0yE7HK9bPbmg RND/4rhXHnezfQ7JcsXATAgMRi1Svc/aSS7JkbljlxJCVMuFKg21zr0fXyZy 7GoN7NIQvINHB48OHh08Onh08Ojg0cHjHwk8MICS0j3SS/X1/cSfBRu2y0MK r1nncn4IcmS8kot9CorAlHxc7OBRSyoZV79Vmf4Kx6zZ6pWcmyUShi7c7NuJ MistpIjQkuzeNasGHUvdZaZZwHN4J7s/9IaE5eXc2b5GTOQsJQiFJgYEqOwz aUxOC5n4uH+WD+2+KJZrT9T6BGnW7Obr0zKsj5uUcb6cCh42GuVDIpY0v49Y EmgtVwd3xNXBHU9PH4HKcoGI3r1kN8ZT9DCOu8+l5LbgzVOpxjJjOwUvOBkq CUCYmU87Ub2JUxQnWXMkaG6P54z2vPsoE58ZY3ElP5wpXLHZEDUEkTgUBswp E8nnZHivrXjahVoNPtsaCI56aTDPxywd4JWpdsoURHqZmeutqU4ERKiHTWXM DCRN1KGSbynT1eMW+4+KCayFp3JImpGfv6E7eZ+u4J/ef//IYWAq4ZXWTrgE UzoqdFToqNBR4RwVktGJ+TCpeGWmkuyoO1O7COsb7A7tWDLlnEYbMQ2ae7cO VEAkjAWmBK/yWspTshRs6pZs5MesP7k9g5A1K/otjfMRE4Pt8OS8+SvSrSAI iyPmhKIJii/gWl8ya+pYutbL/MF2mEtK9Sk6dwTjspIbFIZYk6bq4jZp356U VZK02sAqH+U60+MAJK7PjTAcSG9yvBkUrCFTrXA+yC2LsUmTEpuDayIWApwS WAhLKbgjfUoD8FLUkENyNYRPOZmBT2bRzFkBUxgj+udSCl/O76udCPyEGJyS Xjq/b9qA/PCAAsVjsj0kiryjWGgp4tzqAETYguU4vDu7lyHx6WmjdyC6z7Jp ILp7yo6T1ZZcH0O8MACI859+3eR2Lh1VECFFrBAeFTEQnh2zIGYNXWFZvJon 8TodEiKXHK6VWJ+ZYF4bakTx7GwJ3KGiQ0WHig4VfwRUEEYVo1POx1fztg9J n+buQQ/gWrDGWRoDHTdezeHKhLdhF5HjEnePYIOZy8TnYPlhCLjuhvbPWRBO vsV0zIUhwKUOyaVQFra8RUumQuDSOmYGsTxraQTtxEVwiYBaaBo8HbPamQRN mQio1JIkg/qwcnFCPhVFw8c/plCHMrk6hncSTYL/KBEzDADSDplWvEbFvnHO 3l1z8gflu3TWyyhvHcaINuRyTYpumegY1E6XuEm0R4wvWShuMWnGwnpak8Ph HIWABDVDOZTqPOCc3JfMUt26y5u5BhcY7oK0IWRGbxIcgkvwUgdtuWXPiotA GshaEjdk5S0f2h2lcEvzUTaTQe+xOakVp6QWIRgy2XRlBr9m9cRn3wwii1Bj b4kMkShZR7MVdY1JJWruezmvEWmskjSuR1W8c5elata0hJG7b2vxmsE/d+dm yJi2yVhclh0wOmB0wOiA0QGjA0YHjA4Y/8CAAR8U6qfnlm3RDW+2M+Q3zY3h ro7GqFDIwwHjwrngG+QAJBhzSwb7P2bx8g0YgBj6l6OqTAoM1mD9yvIeq7Cs Z7GMUSiyT2rynOlo4moc95PsPB1gQ6+ZNYXD4Bjs3lEu9LVwfBXAJs3ODeLw 9uvWGReALzImUo6CLnlKhDpiUc9Z9HqOWpwtopS1wCOcJEjQOLGGvThS0CDk REGhGaS8KUsWCjuUPonHQn0owYgo+CgrnxJVXEG0g3lLwhtEPTm0nDkFp5oS Hwqh32c4SBJLVnnCscQsLR9aNEQQ6K+Fi6y3HYSGXPFRaFriMjFFCoLMye8B QhTGWltdVzB4R4RiKXn0+QYLeJaok0lmx/bydN0NbPAmgxeecBaChziJ1UFc z/vwxJ9SBCStvns1b3qz7RsvJyqqobCl7JVY3bQC/MzrYl1kzvtYSuV1hOgI 0RGiI8TfgRAewlC97QhwvPyCrsAXDgkt44TYh+iZ2QQQayWy0DBMQBS7IK7v rOLRVkYRX3faR1EYiVghHwzaVSrWrs0tQuSMgRAWZMSXPQqmHLKAZtnxNgLj 8uFMHdUpj7SnUxL9nmaHWg4g8QEMUASoz7JmWZbimQ/EepI9j09ZYHHN7Cge dn38wAgac/CBBF49Z0egZM68rspLPSUn1FW2zbP23ksGODB5dKkaeVF1cyVF qYbpg0AGa8e8Oa92xHIhdLLPpiqOAYN23SKEHt5J51rUgzmBdbgUFkg1DAXn qfphZj4wGZYkip6SE8raHZO7A0ayIry1bE7crIsCCzIDhffeVm9KbAiYPCaB l/cA2f17L5vNXVBfSDDevnAk3iFr4rg/m5w1EyX3WcFziQpQAT9g8z5a2wwZ EcNCaVBnUOSv98899jFkdOOv/fMvGie7a3/X/q79Xfu79nft79r/s9H+Uh// EZWsaj4W3gK+UYMOJaATeqDgvhfKHLOTz3b+ix+2+VNpqaUUHkg/eRhqIjSL vIu64KY+ZmHHuXCTmBtX6EsFApgAfBJrFqJ4ktUY5cwnuuElgKJPyymb2xyT /Io1fMwyAxLGY5Y1PCUHJp0HcXG5weeordmQDB+DTLpj5pwxctTI/dsN8MAV eQ4QcFMIkZspM2Xn10KW0gNA95h91fFM4FxJ2YlfMSGKiYjYTZhD067AwT6T zGqF0zliB0N6KUYZ6GupLK/fsljyrmPISurxYZySsbaU1gvCKtGr9llRI9Er biS/Ar2wQTXmhCfiqaU39eJzVtdYs+AEz46TJhd6FBotyQcDTng18UaaMyR0 3JKrdmr2Pb8Xbg1S5UNGoJh22hN9+cn2Sf9xUZ4UlcPrs5Yinkt2fsQtVNOw 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 LVn+4Uk2Ll8yDQvlWLPNtyIFEHPpR+RfbleQPtn5v/29UOfMgr/OMg8lGBE3 qv6DJSjdOzkzRE8hxsFQD5k9JuXGeYCWgyhAS2Wce0BHdwz48Su05Cd5Wey+ rD5uMKZCWLhkQQgOeBusScvYR8GPQX6yOTrh7Ei80zdaZTK95Osicsf7odJi 9qVcGItSI0GzJ9sxXaZlL34Y/HNTOgMP8iLscZxLgWciJpyR8+D865DBKTt+ 9k3QQepTHzL0xmJ9XHSyhj+yYOVFrWiZMZF/2RGlI0pHlI4o/7CIoshIHCjZ q4ZIOIELYM5AtlCsJM2fIG9ykCpI5lCrrYQqXJWGbkztdSkyKB8yukIl6YzN h2Zo8ffRti+kQPm81XIR3+26dO7TLlRb7gyajHKM5xY3Jv4qqzEiEdTE5F/H UssIdBRbMxGotUneR1LztI984ekQzWpa9WVGhRedUpWHzB1Gz5akMTJIuxrY cIyuQduQnIEho+DCr7bdyDfAIcgIHQjx/LsLN4ICgZBQKZk0+MntkOpIc+Kd twUMqJDNZQitEAmTAGgh7PvsB8wBxiPfYNRw2SSUxCPL6kkKZ4yQiMCpVOXi e0I5ipscMxlrLZwSvSKojT1HH6d4+fCTtVTf4t24T3YtOWfXmfil3Hm/46Q4 yz6Zv3NEi+LnZoOYLaOSDiRWGn7YSx5IANHXrDCQrx0YMMOLH2IkxyytBmaT tMe90n4ReVO1sUGOMS2af9VRoaNCR4WOCj+BCvb1q1l9Mc6qXIs5gd+TqjQw MekQfBdNA1uBSzt48cNZPjKb230r4RG7bpIj1qhdqCZrOAHVpSIWNk0S+Qpj htiKZyx/p/yLfTZ4J11ijQqSZ3yFNcmVCMuatbGPWYZyThqpHzzkdvjdJ/ln BSpydOK+3Gcbu+pSvC4NcdPqifsS0Udx5Rk0LBRdcX0ceRN+WutnjOSyZYXN 54gyLlnRJotkb1tQ/2xbfWDjkGna+0weJ+6+Jq/ikJndpjGn7IyLQmM8Mox9 YWWmeFYvYavJ7WA2iZwhY+Twrk0L/AA737QEByu+S7v1Gsnj4QH0tJfxmCVp MLswlCA2Mp+yQZasww1tRfagfKZzVCMdfPChYYegee7UGfCQyUEyPGW3XpWC RIjrPlp4DLxhTLNsyV7NO6dNbBr0ah7plOEDu+TVpMkB2vF1ggHHrIrAmCH/ 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 w4S/taY2+jnEmiLsj7EqHuCzHq270pkO35fMvRxcRA/NnUoLHjPrHCt9fdvq sWSsS9YeIcCgWn9F1NfsdHwq0oSF3CCKA6iGEYRc45r9ZOS4p9n9L0UdTqFg OGT8vGUZEpPCu8XIzk3Ictdb2X8y5VMIzCh6CcfUc5/mu4a+3Ptp3kGXIhbz ri1aFYucFEVQokcd1qBK5zinlFKID1I+UAYnK5OaeMYpW+gknMTjqIoRkl/k J+WDGMajj2GC2s7tAGaMbd5ozUOC3JFmfN//cVCibe98k/J/moSbeIX6K7Gq NjUOAf/NYNuQX4pDAAxAO+7G3Y27G/c/qXGraRrW+f0fIxn6v/xtEGNI/d3V JeqDYqOQXn79phm3tGIqPBBvZ9R+lbFS5CCReTXPbqPoTym2djwf31w1dbxT MssgAcx3kYy/TfE+PbGlVNLwvfaQ2rviC0hk1yPtf1pDsC+evxSC4QSs2eWN bR7/YqYiiK3Z7o3t8ZJ1sr7tnGpO4evsLMutMTyZl6LuQA4nx+A0P0tE6Rvk FAwIj4ZqHuU1+CZLoUNeSekA0SYy00FYvhYRh5mCfDgsTlBojkOtQZbHgWJj jjO0rm9TOzJ3+4eMwLfjL++FCkLo9s2HfwJOyINkiXdrvJq8zvitPLI6gOKj xTb+nKRUgf3ctD7DLbrNHjWVkcpU+MmDZwD5gMZB7guwQrb7BRvkF/PClHur 9zOM3fqm/egGvu7/xeCpTMCsT6rV0B0hOkJ0hOgI8TGEyCoAheqqzHNY9r6j +xeCgfKrFgQsiirbKF49oxIB4Gk0QIjNpFHJX0JEh2VWSfXarmNVdfeIfbOK pa3rO7TYK/rzbEElD7K05VzxBvhhN1g8AiFHRK+4Yi1rzZ9PuC3CLcFYrqBm T2p1PidhXiYow1IYzi86ZdSSUVUyQdvZ0pGNvfQp241VloMS6poQkeRZsKrI YC2z4WcGgJN0mmogFRnmYBFWAuBSKqMLd2GQ4kneYIsbVnGWLLKI3qsyXLk/ AjyFdNfGY9jZqyvpHNPnOn7MzQlmX31Az7M7W4IZtzDqEqdUganNIxIFR515 PyFPhCV3LwaIkOfUYQH/7lPJiGriGhN3FaQw+tfZWvGqSMe9BrV+OJSIfGTu FZFHUymJgVD/Oh50POh40PGg40HHg44HHQ+u8aCSAtWvrSb+JdlWE/xKXsq4 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 XclB09FTBVnaIld+ed1hTvuIi1QBe33XnXBFOhcOZ32A6cey5HsOP1VXuj9c rLzijQyxaQfxGbOJR5MOiCNmzWLg64qnTplRr8aauBL/KjYhP5/IcTkFtuBN UyymO9JTEpoK4eByclXrRhzZusK9M4l9hMQtR6OHuad0ZjT9vPltO5SFA+cy ZNdO+jbndzBiTD+thfQaNNhqUFUVVOy8Kgx6EXfXjbRBfrfdkx92P+x+2P3H Z/cHyQmnGFj43iq0V5Gwf2K4+B6fV6N/+HvPROSw0p6AkHTIXVFm5YBu38GS 83lFOFQNTvjx1HN5mXE7pOnEGjG0YPl4j2r1Eq9kxJK79w+nmqjS57mOurJv 4fQdVKzFntIEr6uPqihDQcHeze65M01UhbW+FuGr456G5jY0q8qupCQJr6xD B5wwtNUvUsm7WPJL9NLWxFlvhlXokRXlHrkoavgyx5eeokCO4pemK8UN3sSw 8f4Ys822h2xLzhE4nnTk/tZ8xmo8wArhvudcscFNsLIHdPwJOyaN+zwGkkca jndBs4Y21hxEf5NKMZ5HviJLK7w5J5Fi/45iWZ5eUZ7f/gT57ttnG0SBf3bA u1D/+nT/g9nL8B9kvejHtqqBXDBpaoe+fsn986th98Puh90Pux92P+x+2P1H Yvey3T3RtmfmFdPnxmd1SsmFKXNpAhI2XKP0UlMItFAHIhbvIj9X3rS7PWyf TrpZHsJ/uYJ6zvbmV157y5xwvAr4sks0Z1DZjQx53UfvjXB2fRf5gLXUaNei mIvADlbF/iDBmmNHb3L46Dl7eDW7owSFEYzWZMPx1A8iC/Mk87xPIfTAuljh VU0J5NWGFrLgh94RpRbUNFNXa9o9qXWV1WWaseezXyLUdkuqs1CqtfV5IMcc GiM4PD1SNfbmm+ni8ujIqXTnmpzYm11TgkenWN/tFgw5ktOrCqj6VltzBg7p mXWTlbxWE66+pbVxLvTrL8sMuIRPLbNo6KZF1367EDBmDi5JMvrSav7sYaeR 1TID122zxP2k/Z+kfUt9q6YNWmbpVLgbdj/sftj9x2f3Ovzez29KAN7tGv6f KHtfS4xQii78jaQUdW0yN/Hr+58/qddi33Wx1c3i3b43UT/Pgm69CPZQv/4p vHE521qMVIXr+j1G7Za/RlFcfnj6vb2WTMggN1je3VpkNTKVjR3M6Wz39s+y NLrK7JLJbZaVnNjq9mtP+cZZvO+8AXmbWRfo5qW0uQPbdmFf/D5DLqM/Zv0A eyD2z5giDrU3misVJtLCKHh3utyaCiZf5mBz8ExPjAoIQZD8dpma7u5UJrLZ eycJL9sqPnyPUDLKiDZhb+iJE2WX7iS8UaniFITNHn8JF6UnXYEK/9/iiItn nqHftRDXfy5CIIYQ1Vasq5xcLdn/ZAu7uuWP/XPJY4uy6pSX/0m7epqPhvrt cvsVJPZCOYdHXNth5cPKh5UPKx9WPqx8WPl/RyunCUatMDU+CG0cWthluIW9 15kAF0EGFEA0u+ESfF9mnxs2KBtPrG+P89XrdhNTO6JjePEpYN4xPJfXy6zV SVpsCp2POX3iGD3QyNL1sEnhXeWKlMB01ns7JZuTAVgSs9Oqqf89hd5cTIly gKnzLi4jVAi+mXhvun4/1+5GSphbg+9dMKpVv4YeS1z/4/S7PtHMLFfu61ZY YvFGN4keWuIoufcQ467hqddBZqFjmsJc4KqOvjpImHtNdSAAA4PLDQjBXbeO PicVVi4erNIYjJleboNzrKLATeotHrNBP3801MR/yBJPZDhqJWKNfM/2ZMi3 2zUjAfnmt3j4SiYxv2xPpT2UX86Qxq5NMOXHs9PSCNOV3NJ25tV2UXvly+1J dsPEh4kPE//LmvhBlTw1yvyz3tVq0EVnI67O3fipqHGpO0802TiR+v7qhdfz fvPn9sAy8c5Qw+hFoOK+ZEJb68t9y82w7FunTGj7Mow59Cw0O4LopMozryll qiGay61goC+cpNLOMqxz0dKpjrfy0qrsZrCwE66Rlfuqn2Uu9smXn3TwKCiC a9rJuBWThAfV3KGxkknW/ZacdhMGHLPD5tkvtv/THPh1pc/NO5VlH/tMq0uy bz7SqnfbuN90+ANB6yNKb7zja/mrXP3e2pJvPOChBnHcmjnP52xnYW1kf27L BuqD2L25VPD2+3BNVoV8+PP7rsh7Cimh3TwNrpl5bV683w747bPw2Dmvt3LH j5vL2UoOcs6fx24OHyqcf8BRV19axr/NP6yzawASdGyGxQ+LHxb/MVl89Rwq W+ciT5dfPWR33qG01iu5tivJlxTDTtsis37qlqXnP9S8zSNSZd37CptX1jcH Cbs/ZY+kOHRYNipgLB/PXvWa96n3yc6UwPmuJ6pichY+2JJtKNK2o3auOr1O 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 cVjzsOZhzcOahzUPax7W/F/OmnNG+1U6+Jhs710Vt7XYaITd39003c1dzJPa SW9Kdzb32Zm1hljdF30bZeZrqO1B0mxP9Pkf04V43Km0cCpgwtzTILrVEjNV vRqm0Cqdm/MQqIBGFK48tkJGznXKdlFZKpGodFIzFR+501O0W2r/noTXn84p Pau8q0avemwX6ehz9qj6F69FHcj12FtruQV1yy6ZrC5fV2stN7ULr7/Mse4s YU+eH5Qhz0ttOoiuLUvg29PmTTGtScHx8zJ2/ebXp5ivN0RH9ptyOz0ljgTN /41QFbNmz8qcUGHbb3B2cGoCZm6ZpMLNTvKoFxH0oC7SJ7lg4lFQHbfLvvn1 +hyTi2Md2o3U4bDaUCUbguxdEXXeIwGjnOc09N4zmzV1onBF28q0c7pWw+7k xQ5DH4Y+DP2vb+j425oq1WoNW1lxvkFry92PvbUl22Nbucap/NsV6avTgj9f wGOnf1G5P5UEZEHE3TapaitAKqHtXbFKTW8PuxZc02ha2d7elXdxdtt1N2/W PqqJKjVNtylNM1oUS9G4VeW78tGg3R37gMkwiHMXnI/BT7Zkvvg9DmgbwJJt cC5qrrWB1Iuvcagl6V25zOsq7llfLkN1a8q3OqlS2Wtvx/kU+zhlf89y+6kO Kxjz6zxk+0uviz/7ZbtBXGs1ewq98gGCphQptvNCYWMgl2enu3nx9M7RwMRg 0WDJydmuTcp6GkukwePuXMQXVb75lP0reggpKwtU0PA0e/Hl4Je6UzxZbgOx WAYGOVhtrnmx23r4mVY77417lwavUWrtjJFPnrvpi1j5Z8Ogh0EPg/7rGTQ+ 8CTqGe7x7ZveUupWPvu/E2pSAEDxwIUHXYfiQpCCw4qMpiHS+rwk7MJL98xd w4jJlch68Jperk0edXXL0/2+Fi+sssrXJH+Vr3TntuSJevFSXllm7voRlk5K avkhpW4JVcynHaO7pdhSqDykMYkqFcyyLPeGzyxXM9Nngp+AKLplz0lfP5bG Uj0WJQ2lzb70YSqdWZbiuB2i9GRo8EzU7PM1T68+8CJ0qa9eNzneEPd8AmhY hsEkgiDk12CQre+Cb+h20/y/jcza+T2l6zmzb1sariJxfbn+QA6pOhHAo90E 25IZrnV3Qab6oPO9bNfm/8ZTQlNjKa0HPI3bN0/Fx8xF/kS5sMyXXebU9jmy WSwzpdUKX2SLoN2aD+mEF+WZYdbDrIdZD7MeZj3Mepj1f2GzlsZLrUNjcFnA nnJcQ1OwW/o8unfv3Z0HF7y8Kioxl00k/FVZcercWTiXWm2vkRNzQMir9uQd ebsYWq9OMR8hVAkZD2WEUDcR3qc3pR58sDpasNBJ4RQGPTSzr7NwQoGm232P Gn01XTPSoa5x/uTrLqYoLGWgeGahlanupskKLSmEloAxCQwEA7LaY4wleuKS cFxMy4O37PHsdp/yL7sBCJ5y3+4OIRQ0++jLcYOL+FKtnV/dbacmub04ARRz pIMHa6DVgydmH1KixtDJdX/9U2Sw11R4XfcZ/ov5G5VVoFRBneO4RgPQXNE6 h8GHRdI6CgfUu0yaZ3HoM21Z6wnbckvpzRz64VKj1WPNlsKQfuI7X2cILvWY nv0ml35/OV6xjncY5jvMd5jvf1vzve/y7FfZqnlQRjq7OjRBaTcLSd0Ypf3i gkdW/eQ5KTPKyO246kpiV4dcRTs8bZwZXC85zKu3461ZbtRI4aRN2Z7ds11T B0H/lazb3qwj7yr3jMMKOew9S/I9l0NfFFDeAAxN000nP7zfYh+760kfmBJv wFX16JacGPzF702rUkhwLKqreL/46qofL6Uo++wXfPtd4wX5XuFiRgRXSLpa 1KCvLzn1EF89r/ypLIbngLGitpCjsqKQjKa6YoRzDKDu2hn5Ccg680WEzxwY wn/+6i6WwakQysBXysanV9FQmQoXgqgpkb77297yMqlQnZyDg+Q2/FxqyJ1V budPBmY15yy+RSGCdYOWmbqxXO9/yqZH4w8/kN+Ga5Z/UuvlJ67KPux72Pew 77+ufZtV7XXU+/QUbciLvk+K2UOfDLdLgcl8xSl7KGLp9ym6ngLstch9pR7P qs9aryHRRVXqw5ryCvae/d8Y2gEPecmmQqqM7jmHc26vwk2kKd2jDb1n1a3P 79FDUkFamgUTpia1VxU4GaFMzmvNeirypcm+bjL0FHEQDoXpKzPFWMH1XTXi VszxkE512IS01qsbv7fgQ+YBOyecm/ridykPxZ8EkwWiZlHQ3ehhpHd8TUiI O2Uair0aC5c88zUhswRS1iE6NFeesntxuQ0PH/6Bu8RbqZtqtDjnwIZTDoM6 rjygX2Ek70pqsocn5y5Nf5X3qwzprPglMaAlBncfXiQDHr63G5Dd00Pe/lQN Rx61+B/FdSdfNpcG5J4yfqSW1M3zMWDkWbp8w9suuNDx5qEPPh9gMMBggMEA gwEGAwwGGAww2IFBLXK7sU5VCkpxf6bTpyylH0pDSddjqViinHyRbxMZv5X0 wyT71uiZu70CjD1XzN1WB2P8bFF88+dBqWAieL0WN8Sn/nKi4l6LpsRtSvP6 v7NqqDWIzPhvF+n6ceaaG1/3DaRp3N2kaD+sEecxOj8I91mVM6eosxVrtjzT ALvon1VPPp86cRZ6YzC50EUTDXNI+XRx8BL0B8BcXG0W3VsBIYruE5McdO9f /H7wKUiwVxsAcIoJDDPZeM/5Qwzt1ARK47xuDAttNaL5l2sDM8jq2zFRR9lb f6/F1NdRczb8GgC35FRq8fuU07KgPuwpvNpnqoUDhHXPKdlLMol81Xc3CtMl mjYnjXVSZUr6rOwp61ARTfZdU3FlsiPKx9GRWjpMsSDNXBnmPsx9mPvHYe6P EvW7BH6m/Zsc+HQ8uhhE5cdlunLXXEKxoLo08u05uPPs5qxNBt5oNwGJ/WtP zsu909c/bevCEAgRrm/+pFVzVoVeDz77N7eMd7USt9GWNlcpdYf9gKTu8y9d ZLTJn1ySN4czX93ILDSEG4xNqwGTnDnKa3LdfU3JLuO/XibojnfNseeQvyuf xnx49osAJph9AoNaC6i3XC+4xBdzhjMBIf6nWT4/xxScOBL0QUs8Kywe0zSj 9BafGbNIlfJgvSV1MVpD6D3ytPm1Q0XItGHcBgNvfgvATmDuZRQFa8rPO9LP 6g/lOin9aJ8ipd5rK5KVpU7Bi1jfdR/eWRpbvPPts51plJV8KM724waU3vUl 01BdYA8As6r75U+7r6Cc+rAbvdT24xSGlQ8rH1b+17XydL9bkub0yaz6Peqq SrrJapN/d4ENYf33hQxfcnmzTqTyv32FftW3j5RWbXtxZSB7va9/2Jx2s+mv f2ooa+bynC9yLvlCej6uZli0/N1Du0pdhp2TfC7q6PLPz6mjeS5qFKddR+eV 5KB8vYQdyyXGuJ3F1jLJhXN4yBSYavyTKyrN6WlzVXSbTnKS87CHPbpwF2ap T2WXQNq//bss4MIJb5J90urOKySi6fOBkXFyfhxsuANuufnVkObIynlmrdk+ CDVRm2eDKTh47xzEFZ7IwYW2+dc/heUZdJ2Lbvzx9GnyJ9opRc7VqnBMbdSE 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 +fD0999HwOqVy81zUdbfZ3/roQwhyle5ySp1PFWhRa1JF8EQrYgea6rQm2vn z3UFlWg14OEkvq9J5jXqyPSv3I4vCyQ0wcZ2PTnU4/imdPHbnMSqCkJScul+ beIKqMqgca76bOXpktVgdKwBs8TL7AVZKOwl5EhmkMm3/W4RkxLOFYzX6iUn Jrgpx58E9HWSQH01mwLqZuJ/OnweVjusdljtf1WrjWa351/b+uVfyFM9lAru c7CHJmWPtUDK5L8+kI9PFY8xVhDvBG2C6nKf5LfTAdskI6zDybufr8gHIqAN k50hLNff9gKtmZob8bl8d++TcCe5l4f5YNUj++s/5lwUUUtOxlYcD3UIvwut BIwVPWdXoYrRMDkIph/PMnE/reG2aaA4856zA2O5T6QoyZSWk3TZLI8g1KwX M+RcdGA52BEiuvB8hs6Fs8yWp4pw6e7Yp8+gOp5SFPbvVRprS+SozfB9ke5P p27P63U6M3dm7XtrsPSqKqxuVk0ERCbg/noCPkn403MqEYrrFFp3rYpu6xQR vJZ/qbq+HeYFiGVtaPIiz99l45rj6AZxAWm6ueLAb83bO7fOLzOsqF/w5Q6J w0rNWwY9Z1Z5WO2w2mG1/9WstnKscFCPKYmMOWpDJdh0zK7kmB1ioEVTPfiw Vlpes6tCpPNYysO71O6WX53vfKodfBi3LVh7cqxuW2jwm+C+Is3o+YXe8I9v nH6R8lP9BRYz7Xmr/Di8qkU1QO2KKRTEn+xVh0HD/AJIaGRT/zk2lIXDaGK3 PdiiHePN7dFciSsorq9bbcP6JYNE6Vp9cxYvaNs+iyAlwgqSj7ZrmbOnMQ88 KAMMvyJDIDYuQN2gIJGdgTvGnXCMnQ13ETeS/T6IbilzstJd7fLCcSIG7/HF H54mP/PELF8sgJwmIO0k7YWkZu8dCQMRwjMEW/mfh66Us6T2HFqk3R0zbzOl 2HhHNR2JwARMvTc+Z5H3TmQEKz5Xwsy2K1PMdYFh4vZZ9H6opuNIe0y33CQU axWk19yrfz4kT6HHqXGvEeIyseHFv/5pmPsw92Huw9yHuQ9zH+b+uzR3rJM/ 7s6GVR+LZvwJaVIx+nGt8EWQQYcd4fhzn0y8Qo7nbHI8hLCopKm46KzQ/CTf rpskVEXsE/1FFrgaLIiGMxq74vX6v2GytvHVq0aPBdlvLxX3NUI09nbLuphr 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 52xQcM5TqLXeTyudM0eTFSuGPGWUC1/Wihj0oKYlzD0Aa9CTs4N1PxeNq28C 02BxCtQUetY9FRCS2enJADg6exyt1RRPlUjR8tOr0BG6qk9Kx31MSyI0JG7m /fKt6zeq/2pobVg36nXruq3fgh7e9bRnMlamUewMF/9wlsvcJCjzqScdsh2y HbI/Psg+Rqi2MrF0ejnAM5DlLGbCWYa1ONgSXvF51bc85E0kO7MHPj0Miolw 9vBhsmqbPjg8VLTtoVj3PBOIFBNLM0JLebYScQO9Ixv+8zZ06PIAxQkr2SZP T+4ZCzAWLMAqeY2HJzYE38gqFk8LUhvBCP5Y3fhgkMPJIfQLGQHYpOvZKpxc 6+2JxkNolEgQcnvkYuEY4VFFqCq1aZ752m5spSbMiH3EML/9drTn4O497CiH 4V3rJrNjjC2US1+fj8TpoasSueqPsX5c7LdMKX+C1OW5QQXXl8LVKUHnDi0m 8peOmUcyRoBD8d0+9RM23DvVbzdDIUWjZ+uK+tX1lLms69ngOy3gYGinGYb3 f/hrkbHzynCU7P9Px2XHZcflDxSX0cukoS0LcNKfHpe2zp1bbYyC43ykU+v3 ECB+xMsVdrOwVmOfSGdCvuDMiCoizrcgXxuONtwSGt5yANMOb194UpNCMArH bl+4e2wtXn1lHZJe5m0Uahlj0iqNMylDIg3mCNbjGL0J/9/2zudFkmy7736Z cRVTNe3WjEaj1xbjZwYxsltW8xjEgFqmESqbWiQoF2lIUC5qU9gFSkzapHGC E1HYaOeH8WK8MPTO62d4i172vzDLXvZWy1nOcnzjfM75xonMGtmSnqT5cTdN dFRkxI17z/fG+fE956gQC7olyysOjjBXn1vl9/kXnQHIFVS7gMvmGkZgzkku El6uZ4MR22UTKWNS4OWoAt8QU4GLaD6gnAODZsdOyd4AejLs0E45g6q88gSx EpPj8ymPD9ttlMNxFjQ3DKXd3/EqKkHyczbCVWSZEQ3l9dfRayFv7aIimz/R G10SwF4GwSe8UV7nBo6PWUwe0byK8st4uK6C61vxV2WY/K8q5AQy67+m6IrR IxV3NPrunXlX//13DZoNmg2aDZoNmg2aDZp/FWiW7LA9Iaorgev+6xFh09YV /dQkzUg9KQ14UnJ74s59kPl39K6lHTz6GKTXLcJpiQVWBQErpx68iBYSUPRI +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 yXFQxTvDjTwgpuqZOUqao7Nn8VF384Ya3EWfCJH0LxLQ50Kt9Nup/jzPgdj6 J5QxpGn9apw2ufXwFWePMcrtzdBuulxHNhxM/OvIbjNqP1lvA82HYCfdQMWZ QnFdRLcFuTHlj0WL47ySp4BOfYpUI3u666558KhPwZpxXR0N0LTQou2B0GwQ 5EeSEWowgNhEbYRN1NXjVkIeewCq3SZVQsgtl6jzLUKTNkUDB1UmHB9X0RhC IGa6wAeIqXsDymc9WEZXdqCziibYPItto8ryMjo/gd0YczkxHIBpvLXDtKKT tWCvIjPgKopscMNq1+D7JedRCu3Sq2IX7b5X0WeLCVGkVkwoJrb+vO5M9F7a HQvB1woBYzk9mtaSdwlPPVYKSA1gXhqaHicjlC7fFIJQyST+OnUjN1g3WDdY f19gXeyxdYJP09Qfak6R89LlGxo1ZwN3F38aN4DwQ+V6wnqVsaRwkJnHIDE3 5L9wXhRBhKn0IhooMOU0QFJmHLE9xBCsbKZldVephdL1p70UYABxFTlrhyH1 aRAu478MS1SXq84GlXRQjchDplUjHBmjpA7LWBVCnD4I1N3zCzKWEXD5a6qe jEjeRJcKpHsdfJ/MSGIqDFv9MjpgL6fJdOYiGRsqYgjU31arQYK5fuVzxQ6E hiz/2iqK6GonuE40ae0NEXN1SNXRssMZHOemvs4oHVV/W0+i7i6i0Tc2kQLe RMfZAPSy6NhgFA15PZYOHu7ATNq0E/H1XUSuScZpczJqyEsv5ViuosbyKvL2 MXZwM7FfMg+w7cLNVLQ1VvGuYzta7+7dsd9uHmd3akRzR2KEJDxBeYRVdFbD en13ev4ygMk1xYqUKfrbN2Q3ZDdkN2Q3ZDdkN2R/p5A9gdH9pCbULDjU/fSZ HjaO9pCYzkXHGetyR8f9R+f22VNKvv90Ixn+JPsJgEqEc6np+qdqMZthNDf5 nalgNmZxtskW0XsCrHNg+wSlSN2PjT1XB2/ZXsPB7ZMxmGfBaQ6KQb8uXW8L 69dQNqi+iNU3GC42pp2jX3sGu0Xd56zvppcWspOFSkNWG6He2Z9ed4LdseMn 9V/Gxl/rRJEBwBkCoji3Lfronl7bXYa9pN4HT/I6urpqR1EQepHqTLGnmp+g I0ArG/cqimYsUhO3FLcuWgIbnpM4zSc/7mokZtpydLij2dgYmNzgmzduPbNf 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 bAC9CGuN/hrkgUALYcFZ/3XiAvHh5lkc2Je3k8O9yiMfegErnfTYNWQhYWUT rCF+yDilsSyjJMAq2LZYvFh6RImxw6WroI/Zfwv2vCYESc/olDmNC4AreVnw FK9ZEDfIM+wB0ouUW8kUEViWcYt0SzVCH1tGDJw0FSQa65TzCDi8INNtPCAE 4MxM9beWbsZbbLzfjb8vBZiXEVe/dpbXzPYA1FS2Isx7d3zAQSAWVY1erOLc HEt0dKCwf/mLJv5N/Jv4N/Fv4v9DFf8/Dm5EF+Uvf/Kgsh+p8DPi0Js3ToXF CYvuttx7SioyiMsFwVxEeQDzt4z6cijpnq2KKXAdXArlphpDolwF+Tn092wQ uDcAVoTcJvjH0Zd5BIqqKcKu89Y7r8NjvozQQiwFo+3lBcpu7nWqTQcpAUkR rwLnOw6ThVE0TmDE6tlfyzIRR8KjMlzJREkAAQpSrwgBtyK1Tf73bCvIFVah P8VuJx8aUsmAxSARRbwe4GJah+ufYaC820GHhYFhUaUY8UDBN6w44FZRPJCf 41MytX2ICrBqPDeS13yt61/rRLGOcugreKDCmrC4ofKxN2/e/Na9imk2kW8i /wMT+Wfyzh/f/okd/0TKzOG1VyxAdeF7JDYZyZmroR7A4LKQF/4qCg9cR905 ++74GCnoeRV5mEr7tLSHGam8CspdR+BXSg7zpGAsYlI1qFWw4ZBKm/UxRHlC TmYWcUOj6kRBBQ+NgrZ1lNMRXBgw7D8Lw84pZIfqgqYhHWYZSTJoCwotIqrC Cp4csj6MwuZPr5ISiw+1e8zPIbHZwqTv1ofeRjsetBquwSViIu/BarYTedWu I0LO/VkOKvWtkyM+NhL32Ki0q+kqBJaHCcHjpLp8qKbQ09ZBDmeQoTq6FEUM YP7ZzzsK/pi09HUA91HH7z6aja1fXSe/4r9t8tvk97suvz9NkaWfnhiT06KT 59Qaig17FhcyzheH96hj4dskrzQmE7nvVtRlOIPFSHoZMltNBb4sqBxKILNE fGk15JDNTJkZy5WakTb63xGN/FVFjnC+y5ZbpCo3y6hsswwirurMYNaiMNQ3 rcaM7MzriOtSu4Zvoj79Uir4FzVsHXVd9N3Ecc8k8Fw+uzxXFrgJYIeFJltR GEXBuA4K8SoYyygGHEC/EV8aO1M2qmIVQBAPO/9loqAbLYLmjbmr6CvQIcZg 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\ \>"], "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", "\<\ eJztXUuP3EQQnozHM5tls688dvMguyEkJCTZ8AjiyAmQkJAg4iEhAtpESMkB EYXcOPAXEL8DrvwPBDcQJ34A/2BJl3eqx56vPdUut93eeAUznbLHrq+6uru6 urr6w/2nD7/5dv/powf7u+8/2X/88NGD73ff++7JM1JybDAYbg8Gxz7YHZjy wWAw/Th49l/2cc58GHJP6AlhCX+br9ToX2JKiSkN8yW6mprSKF9a4fvot0Mu 0dUxl0b5Upov/Zkx8g990dMGhyxmNxVoQyEtdd6X5mj08ilDhfuXa3iGm99R jubxcze0PO335iQ7BrS12iRVDT6ioRoNKaYxtwkqreRbUQsCsK3ysN39hXUR qejBbBtH76KrSBWqNbyWVWcBGqhEpdIcQzwHh33oiN95CHHmz/agtvc9USIj exfV1ST/jIVvoof+IUCE336z5NoqkN1/M2+auBTsOjO25n7Ev4yMyG9m1FjG 2p7gS/jNfN0xmrPOpY087bIpPZm5fZAczGrGa4C2KrxvTfG8HUB73LPZs1mV zeHBtO+j0hsRsESkE1yKgaXUkMh8GMXC0sSQJsxcDCwtGdKImYuBpWUi0chv SvSvcc+ctDKz2UYsLFmVJ5Zeb5el28wSdQxJvjLtLS1zmHJvSh38ENx3q102 9/I0+rbD0mA0e7MptyzVvTxX05ZLZuMgzd06RbPXLse3sBw3wK1IPW50hvsE 0F5tl/ubJWqBIIwA7XoPQQkBqTBSdWSlp4B2rbtwxoD2SrtwUBNFTRnBmQDa 1R5OJHCWAO1Ku3BQT4R6LATnOKC9HBAOWUGrXELNXsr6MqBdDsg6jdd2xoyU CHWsiPUXAO2lgKzTSLfEpS6xTvOiMZeQrqP+H7G+AmiXArJO881sXUHL+glA 2w3I+qYhIZMA9eaIYSkjNTBMk6fjhjRkqXeEdTRPJDUfMRI0VKIxCCFBtIth kKAJt+11xlokZVPR82EQZXOEUfGVdhQgbtDQj8ZUBGpj/g0HjeOhm1YYmQbP JtDmQGCc04UZL0ueEWTU+AGb84+cC4NNap2uApTI/kF2krO3sB61JCBEqcVa N0RqcdQZnQ0DDI07yLJanW+MpoysEWRwOZU01WJDQSOnSR0MBYWvETyKNyC1 KYRQ2ACL8jC3sVumaCqP7KYAMj3JMt1WyBRFaWwBmm/wD3ouCsNxBwK1Gp03 cVc5MhWQ+eaocmQZI+MfVXmm7NoqR3i3PUW+pKheFL+FnqeJkCupP2RFIFMv Eyc265BYpZV4xnwO/StxzjpaN/8uBCOOuSStHPoFEmGDVSK1f8qqBM0d0MwU VckWV8lWy+0KPSNUV2oHTGkrLY+yXHJXsNQuClXBqKWdVlS1e9RcFMpp2xwS cCFAP5nRk5nbPCJBU3edIMcYsj3K6uRFoQxRnSBL8JSiTpASnympExSBipoV sobOusWKTDo0NCBYaFFJOstBIka/PakQ8QXzSdJcDyM8ZByhNi4VHtIxqTMK eQc2hbwg4VFIj52pUOkttyjQI9CrmhDFBUBDS9E1TFIzlZWvfqNXIocEGtjX 44OPBjmpH7hu2KhzR7+tAfbZklqXtrm64WuqohL8uamitKtGyM8IdRYh0nQ9 nsjJMCPLuxDLJ8WOPHPIsosVe0YaTbFP/5d2Lwg+MqJQI0LwNQOwJ3xqm2Mf Pa8brMZUqwKW+jepiYs8swgYEh4C62fuq8BS30O9GeqFmgDrN98Ug/2BgJkL b7tgezl2EGzU8pHONAj7x+zSYPbSHXD7aRaA1MtftwD8HEm1CwCxKRWFNNoC DW7oPj83p1gUdDs5IAoJBgqlQ6Nk+udcfinkJUDLLyv5V9rNpcUXmW/Ei30o aiCoT5FOup1LPU5nIqoqvxUFcVVtAK11+wjnlkqse7A2Z6PAsalctylLV4Ac bgl43UGJV1Tq7EY0ZFuhQU4aloCUz+7j67byoVuly4wTTx3QLGpU07f6dArR UM+PBlXk1kC1jLRhxVvP/FbKu6BnNJo684D0WuWvVTQfGflolV9Mi16rZlKn VBowy3KxBOqx6A3IXz9xalLJeFieO0agM8j9Jl1GQjpjwx2lOlMxwKuKzliV cCRpQSastW0ni2/J9n9zaeGC4AmXOiWsuMh+L9a4+bOqQO9HtrUmyBdNVuw2 ATTFRm+rGLBYpbIR7SKgXQI0tE6G2qdmN49UyPTeoR0epxcjELudfaIODQmb HkY9q0bEmi0OSMTZADHJ0QqSFotaujvRU9TkSnGOZu8C2gr/AqUK0GxwQSLM 3DpzayZSqTkizgtbwBCDh/K5KZTKO+ARmn1KyJ21pJMF2h9BDyM+kwWCQB5g zfY3BBAN/MhHI0VHyw42m4snOs2+xLrROXfp2Fwinug0m0hRvSNzHLk4EDra PkV5WzLXXwU4mi2+dcOh7WuXDQlZwSUgNLvIEQhk7qKJmxOEzT00dsFBvJRA 1Oz7DwKRlI0En9YEUZOpAQ0ZaJRHUyknRKo76pGSmiBqUoIEgUjjWGaZHFWI CdssAg48wWoS1GQWn2gDhBMb2jJXHZsuXVAdeCqiWIisctamgllO32iEbRDR Piv1XcCc9KURArtnvkgHP2HdlmZVk85AG4RDndkv5oo0W12EIL4wXzTUf6p4 qR1g0DSuQThfma8Rq5gGTlxt5z5L+K7ipdn4K9qG2XgX3iPKaIdp4+FQ3XlY i60radhxhBCRbwNZyz3ErkFEM1evOUpcEJGLC/kfeogxQ0SePUTz8vr0EBuG iFybSHl7iDFDRF0Lsni8POU9xIYhomEeuSyPGES0NC1df4sQIrJHkeelhxgz RGkIxxGDKM0U0UNsD6J8n/YRgIW2B0kDa6KANecbRLvUYkVUiMdCzWmTr8aq bYVYqsJO91PR808N4zgjQfzTr2JVIlreSblktydLI8abZtgm517qBsObzFzK DEfIZiHp+RZrbkGlpXtsG+T/NvNvQ5IK2kDfqIeU7ppvEM4eYN12M4kLHbL7 pdkeGkTnTDhOg8DM3uC5sTnCBo7AJDwsC+yICFtTWfS3Jn+gBhZadEetGTlk SqBqtgdIU/SpYRc6YfoXms+X4NTsOGkMZ+pqNyXANNvVmgBG9TRqGJg0s2Er wDSbUhsDlrj6uhJgmj3cUQPTJEFoApidATcITJoAsxVgmvQ2jQHTGSmaZEYd gahJWCXNytkyRE3etR5iLBA1qQI7AnEX0KSpH6WpYluGuKN4bA8xFoiaxLzS 37YMUZN6uSMQNUm1OwJRk0H+OYAo7apahlj3IQoRQqz7KI4IIWpOgJFaRi1D 9D/FqCPA/BMrdwSY/3luHQFG/SO5TqXpj6UTrJaB+R9k2RFg/qePdgQYvb7i ybFSx0aDEEnqlGHqZ5d6Vj8MOEK8hx7Cweyln1z6W/286ucXuebI4kDIV1nH 0Zm+Y6YtPPiukGY+4RLMvWn+7gOusom37nz3CKW8BvSr0im/Q5bywmS2o5Jr 0gzxZYl0HwhFKs1BGm21yatoAsTluHVx7ddRc4vTBu8LJbLT9VqcqxV7hi/S 8srVBu535i3XVJImTap0tbPpSrJ5kb3F7p/su1Irs/2vR694FKtqvrmMWdVt xuzCCTEoqTU6htcOcPPGhvM0GmROaBLhRit5rLJngMpeATTUl2hy5EqDQ1qx aefV57RCTJpMuxGK6Tq3sqtcQt3XEYNdd5bhjkDUpBqWRra1DFGTfrgjEDXJ iZ8DiNKg2ZYhavIvdwSiJv9yRyBqkhM/BxClkfktQ9RkXY4Woi75shpWvZmk K+dblm56Kc/2bTdNSaPCIuG+sJXck/t74NJneRp9S/VYDadwjognnEKyXq98 0NLtbk7WdSc4fG2+aBP1R64XNAFiswLrNHX81VyRpq3WsEkty55gsu1ieFau VCEftyTXW6yKhf2Y9lSZRWfmkF7TFU1ObenGVQTiBoNIWKBL3NpKWP8SXPq8 JRDXWIxW6nYDuecxOE0wjFbVUmbYyh/5nnfCwMk2emPTA0Ubo8DrEUNY5hqR Lke1AOFCXvetvSB4VyQQzjOEIZekplskECiKivodaVB7IMaz9A1zFh/iapt5 1oRwN8szhbouR6AgHjzTsgipkjQCORDPhcmXU5kpnJNI0kiylhkmGnUb0qOF W2bYRikiRiJk2M5ApWuXgRi+zYxYGdrjWKQLJiGZS5klurjMzEnXAUIyN2aW qOuaMJtS328g5ug+ewSfnXyQ5KTOsJDM2Qk0sZkwcyhhUtPM0YhYmMAdN59S T09I5oiRIctQOg0PXpn2yNQYWJpwe0xjYcl2FkksLDnz80ifEpI5OyxFyJzz PMwYmEPmUc9mz2ZdbN5h5afSRp522ZSeZLfTb+njXE/oCUEIg2P/A4nRnY8= \ \>"], 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] }, Open ]], 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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 9jV52E5QulT7/0kHS/4HNGc4tg==\ \>"], ImageRangeCache->{{{0, 528.875}, {326, 0}} -> {-31.6099, -3.75, 1.31379, \ 0.724688}}], 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"] }, Open ]], 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 ", StyleBox["Count", FontVariations->{"Underline"->True}], ", ", StyleBox["Length", FontVariations->{"Underline"->True}], ", ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", ", StyleBox["RotateLeft", FontVariations->{"Underline"->True}], ", and ", StyleBox["Table", FontVariations->{"Underline"->True}], " 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", CellChangeTimes->{ 3.4233933409468126`*^9, {3.4233941349987698`*^9, 3.423394139436298*^9}, { 3.423394236546294*^9, 3.4233942669683642`*^9}, {3.4233943132030354`*^9, 3.4233943169061837`*^9}, {3.4233957529934998`*^9, 3.423395755852893*^9}}], 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 ", StyleBox["Count", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.4233941594208007`*^9}], Cell[CellGroupData[{ 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"] }, Open ]], 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 ", StyleBox["Count", FontVariations->{"Underline"->True}], ", ", StyleBox["Length", FontVariations->{"Underline"->True}], ", ", StyleBox["Rotateleft", FontVariations->{"Underline"->True}], ", ", StyleBox["Table", FontVariations->{"Underline"->True}], ", and ", StyleBox["Take", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{ 3.4233933483374853`*^9, 3.4233941646708345`*^9, 3.423394288671628*^9, 3.423394340421959*^9, {3.4234538303062553`*^9, 3.4234538337120914`*^9}}], 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"] }, Closed]], 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", "\<\ eJztXW1vE0cQvtg+vyQOEBJICi1xcNoUVGhRWhVVfIkQrSDkLxRFqBIRilqF 9JeVP1RV/R1uds7ee8kzm7n4pb7wWHC3zOzO8+zM3npv7xgfHJ6+++348PTo 7WHvl5PDP94dvf3Q+/n3kzNRfSGKFv46+9vtRa48iKLRYXD2Z/DRHZykGuVf 3emx47/lSo9c6bkvbXntnUz1qD7srxiKHgLZJpA9ALI9Yz1kD+FukCZpzjdN UcVO8W01CH+TqKKsitRJXaXe8iO87UtRI9Gln9gJGq7UBF1t2JuvVMMrqJd1 2HOlXk3zVc1ri22RbFyM69Vwdww6gWTWECBZO+iycSyvVsPJiHpLGz3jOLkg U0co3U130910d9DdnLFnO6bdx9r2E3V33fsoLbVdqe5lEhFZ8Mb5eoUWN6rh Gev6bAXItqs7IKzTzs2r1e30lvDW1epYRTadSJM0SZM0SZM0SZM0SdNCc90d 5ZYLbXojAFndtpxk2Ui9647pDZ6UFl2p6UqxEVe10tKsBLp9O5FFWRnaD+ga yW2AtteM7lk2cukY69WNnK24XSBrXn13LwJZa/5cW6TpPukWygR9Xhx+Hgjt 7+rBiHOyUVnum/VN4UZONhjOHGjnCXkv6U1zULAxaheHvYWxUf3LRK5WJlRj h09FQzIUww6QoW+cNpCp4OljWbRNhK4RNNsjaskOS6MY+bDTSzEJxPx7dxLN jhZ92K24OOAibbCj2McedV130oWxR2hoPDQ92gNf6gKnR8P9sfNXUy3Tu8zn hk4q2N0YXuV4+x8CXy8X5CfuJKBfg0o3JxDQmkfYAFq0d2wNXi3PXUpoTYcm +FXt6jEsRsI9QkMU7agGgiIvFu06jZWmOrP2nRW0U50+tZChuuHqqZ09Pyzl 38nE51uKDdT9tTLOFsZodlnzjCWgK2m96Dt3amqjeEm0TiI+z9wtnJtZm1pU 0/W+vlzA1nZ8aVmpFY0wM69a2ZnVvI3PjKNMv0YuPefD4T6FeT1s+aEvBefw vMl7BrL2WRlZC/j7R6DaNnpepkn5FkAetSyBL7aCFiU/YN82vaGeSgf7Mdwy 4D20Kk0v9uF0NlLeNjppsYyBPeALpTnCQrJaGQMlnTNPmzqkTuqkTuqkTuqk TuqkTuqkTuqkTuqkTuqkTuqkTuqkTuqkTuqkTuqkTurTpv7GndLUaijdmpTQ f+IdmvgTqPaB7NhYD70RQChCEYpQhCLUXELJe6EdAuB6fXesTxtAXkybUpBn D3Aip9zLdq58gMVHpWpv+Xgkb915ffKSZ/RBTv79xdz5ZUD3/pLt7ucdIuca cFKcpVeoPhhhCMR7X3qp9bUPANoZAPHaK2DxldcGZpnUxL4ncOxL+xYTp/nq yISUvpy+CfHua2DitdeaTByUuUIuMlv17wxCEYpQhCIUoQhFKEIRKoWShwqu ED1zB5TwJfD4QY5PgaLkYwzaoR3aoR3aoR3aoR3auZydx4ksysr+BrL740M9 AmZ7QIaSXPeB7KlRtjUd6pIIRU1dJmkcJKcgykeGuiMtCpkJl7wVlOUCtegG cSfgCvRzW9bMMvKYRFJM3AXaltdu+xJKpmJNs4eSb8WlLV8DMhTw3lV17ZLm 7nl1o1DqOAkaFcXLwn0a2hWGepLmSVFzGSLcNghBqWSISh7BVtIoFKOJwaAp ZUpB/ByYRZnz0pFtTUBniKlqD40RNbCl0iQiVstA1pkwBrouUYKizRmH1NAd NL+rwU0zlhksq+NcRP3S9qzDUJ0kZ4b2P4cepU20hjmQdy0n29NcpmbsRKzu lLbyibo7zRcYgxJyY5rI9XxeTZSJETEJ2UDJLtVAZPMbjuNqFH3rhYryVKNJ Muxq5KZ14wBADNA60zqeA/mMrQ4VKMmJal24reZbJKMjn9ztVtCDa96AOmxV yLsaJForTsll6AtEVvey2kPZUbue9TOgved7h9r2fFt0BzHDLqLL7AtjvefG ek+M9b6ajivQShH/et4oJptB7Yugdjeo3dHGgr2L4Tu4th92EUjNiBQvNMWu pkBxKtkJa5z+nQ4U+sL5B8jQltBFUNmft540gFyZkngTTRvWrckAgBzRzinb sA3bsA3bsE3F2rxxJ1eIfnKH5NYsafWxWuVo4T+//0/H\ \>"], ImageRangeCache->{{{0, 434}, {267.688, 0}} -> {-4.37178, 19.8489, 1.34084, \ 0.50601}}], 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 ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", ", StyleBox["Do", FontVariations->{"Underline"->True}], ", and ", StyleBox["Print", FontVariations->{"Underline"->True}], " as follows:" }], "Example", CellChangeTimes->{{3.423392075719965*^9, 3.4233920774856014`*^9}, 3.4233923894563484`*^9, 3.423395771821745*^9}], Cell[CellGroupData[{ 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"}], "]"}]}], "}"}]}], ";", " ", RowBox[{"Print", "[", RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2"}], "}"}], "]"}]}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "6"}], "}"}]}], "]"}]}], "Input", CellChangeTimes->{{3.4233924037376895`*^9, 3.4233924082377186`*^9}, { 3.4234540109125223`*^9, 3.423454012553053*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1"}], "}"}]], "Print", CellChangeTimes->{3.4233924159408927`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0"}], "}"}]], "Print", CellChangeTimes->{3.4233924160658937`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1"}], "}"}]], "Print", CellChangeTimes->{3.423392416190894*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1"}], "}"}]], "Print", CellChangeTimes->{3.423392416315895*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1"}], "}"}]], "Print", CellChangeTimes->{3.423392416456521*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0"}], "}"}]], "Print", CellChangeTimes->{3.423392416581522*^9}] }, Open ]], 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", "\<\ eJztXVtvHDUUdvaeS2mae9K02YYQSkAIkFqqlgKlbfrUV0ACoaShpX0oLWm4 Kj8hEgLxQH9BfgCXt/yHvOYn5C0/AGlYn5nxXPaz196Z3ewmZ5XMOMf2+b5z ju3xzoyd++tbjx8+Xd96srFev7e5/vzxk40X9dVnmw1RcUCIgT+FEP/VhUx7 jWRw8Bo/3kt5kJLjT38hTyuS24JKfQhks7HiohjYQorEMpBdsCz3Qc76ppkm 02Sap4fmijyVZcZb/UE4oCniWUydqWupV1ULr6mUKPl50acsBSWZqgBTS/bV X+kPryAri9ByTbmCzlcFlZuui2RZMUb6w91lYASS2YYAyWpGl2XRPNofTkbU q7rWk8XJKZm2hbK72d3sbna30d08Yne3TcuPbd1T6u6i8lGUqslUUckoIjTh LSfLpWqc6Q/P2M7PzgHZUv82CNthZ+xkmR19JZw8WYb1yU0npsk0mSbTZJpM k2kyTabJNJlmP9OckEft8y8EMC6PVSlBj3AQ9WF5jG4+UGpIpioyVbTE1Wqp Kpm92eO+TMRl6F7VsCW5KVAX3UFB7hmx5DKoLVdOyDyyOniHqU0sVA4F6oS5 eAjIypb8uuhafGdU4PuEWXyuBUI3H/XBKHlxBV5wC0f/fKKUbs8VnXElrSH5 YBoe9ToFqxApa+qsQmecU5QKOrpIs22oTB4gQHTP0baBozh1FDAI0lWQtWjR +P3gNbcVh+hRtylI0YQTYOsbvSiiEdplPVrC/VXcFQqxJhr7jGo7kxlJ/o5l Rj/rFvX35Ika22ug0Gi2uPoPUKRoSqu8vRhGmpeVAdqWldKnvwLjCUPFaAVC QNdkQwzelqeqMiZV6CymFot+60BU5F/TWuXAF8VYW2pWRY8UKIUmu+hqMuHo 9IJCQLQRwqSijaYm8ff+3lGtJbqYRXP9S8lc7SV9SpYLOoiXMoHyCkrHjEIo KYQod07XWs7JcoM2/dR2iBwHdYtKM2re+WjWd1Kdi+edmLpo0V4ShLgiTwXV wC1cQfGkkXhSqxbO/zug+XW95oSjKkrzRZ1meC1uXdfgWjQFHFRdIBgdw0w0 C0AzPCcF6AsQqouAkMy2rqNTeukGCVNn6kydqTN1ps7UmTpTZ+pMnakzdabO 1Jk6U2fqTJ2pM3WmztSZOlNn6kydqTN1ps7UmTpTPy7qFju4opf7AhXPQdZd IHsEZKtAdomhGIqhGIqhGIqhGCpHqLo8kqjWJYCndKrEC4Vpeb6d1EFntPxn jY6ltJq7WLzYwkw620Kv07GcKBee7xjyyBVELQjmt0my8qxsoHfI/fejFfiG oXyzmODKabiSqkGpr4GsbrDBURVaAReoeKZCsqrsfZSUFW1UUMV7SRUp2atd V/GNrhe1UtbHQ4kBiv74lfN1+dSxS2r8oL0HPqceoMag1P4G7+pyqa6hzzzw s0Q8Cy3mRstm0LbvaH3Zx5YY+r0H4FJc1Nps6yZkaFOK9NLRHnUZ2ksA7UbY RfdQQ6VliGhlGwJF64vqSgtazoXW1l1VNSpaXPs1/8jo6bYRkCfQTSe0nC1w 62dABVrfixxs6/QFSwxkDgrJFUt97ivvkfMM64Q7gGYI1adal9mvO0bqUXhs N2NAgxEKD9p7wHNanI9WTKPQuCGhpdXoOoCatSEstpcc23Cg1mPr+vOWXIYs HXzxeF2GLhF1nTkk0o7qbTpqEOibBuXmFQPU0fULhqF7yBxq1agicgBqMygm b/rdJiHzgm6CLkjzigmKOnIEajGoOzu6BI1Rc0AFmqTY1n3fsi76rjWToa5+ Ewv9FZuGOLSYftG5xjVjDbS5waxzDYOJ0VwvtXQbhWjJpfB1XWG0l8CcS2GD Ob+ALPTV9qFlOTSzN0Bl+bZtgPo5Z6tmegLqp5yhZnsC6secoVDX6j7UDzlD ne8JqO8tVaAujLo6Gt8doWytMkBtZbCqQ1C2VqHXPQxQWYZbA9SLnK3SbivT VajNnKEWegLqu5yh6j0Bhe7kZ4FyfGjQRaj+fxTCUAzFUAx1mqFyfQWkhRpt toFfe+9lpAjL4x1dRivwbK9WdEgFXdOL1iq0r1ZQ6eilj+6/ndGhFzx6t8Mx FEMxFEMxVDIrmCKIvb09sb29LcKPTDdkD8zZLWo7cvmEjjWqvbu7Kw4ODrxQ o8zZ398XOzs7a83FfJ3JYrfsitXdONL9otgEpkL6Q91eCKCma+Lw8FDCBGTC yjeB6nBb+bhCtMN5qHE+RcW+5oKbzeQiEtE9wIIMbXw3+rBsaLL0rGwR8i96 IE3zpOsqNaq0lAIfxtHC2DSyL6gq87ZVDPfzyLTblEPPAr3gNyidlBWAbFGR b96wfSmD3htAdlkeg63b/5AnmsXTY5QRmT+sZNdU6ozKvQhq+P+rQvyufBrc 0E140vb1qppqEjeSYW1T31wurJZ9E38DbWAh1kVkU4nUNjcl2YUa5dC/10DL MMfcVaNHLG0wDEL6V1A2HIVNNeVI2Cj3pXuVm+5VAn5/xyyTOVH4ksOTtFqW +cqx/EeO5d/waf3jjylSUlEel5+jo6PQyjWLMrcsyqz4wn8Df3Xkauu/LOO/ af2yd9Ji4H/+9kW1\ \>"], ImageRangeCache->{{{0, 407}, {251, 0}} -> {-7.05253, 21.5926, 1.43967, \ 0.441437}}], 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 [ ] 0 setdash .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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (s) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (0) show 77.875 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (s) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (1) show 77.875 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (s) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (2) show 77.875 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (s) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (3) show 77.875 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .44371 .60332 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (\\305) show 71.375 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Output) show 113.250 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore 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->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztnd1OE0EUx4dtty0KKCDKVwwawMQgRozGJ9ArooR444VJRQ1cGD7kRu0j 8BraB5Bb3sAPBL0gftxzxxtgz9nt7Lac2c66tXTh3+jM5Mw5//nNmdmPsi3M FtcXX7wqri8tFMcerBVXFpcWXo/dX16rmDIdSnV8rPzvGlPUPlSqWhxW/h1u UkGW42k/p+oW8UwIrXFqzVBrNOSuMj4/C6lpwXbF0u9qk/2GgQlMYAITmMAE JjCBKWNep8qljjvpAJ7yulS4C+hAN6Ln9Q4v6JbKen3ByyVDllo5YapZ+/BL 6ciKNMuMOHODn2PKlaN762MlW9IxBtKRbleYhGSzXQLJVohMWRLloXQkWULP m3ZPkiTX2Yw7FOlGupFupDsy3Thjt3ZP08s29pSmO6NzFLQK1MpoG68I3/C6 tX51ERfTkRnb+7NewTae3g1he9rpO1nTDt4SDpysiaXkh07ABCYwgQlMYAIT mMAEJjCBCUxgAhOYwAQmMIFphTlIJT+J6LME5og8Wc5ZInFEjizn40QYqSKm 439+SIVt0uMvCV2a7IgQG2sSFiw9lnpJ5paSlA0JsdIOkGJHk6fibJ0EvYKn dE3MUZdpIOkjBLbJM4pKDyl7k4p2NindTpz8Js65cTTJFivxx6Cc1b0RZ8m7 7EQ9UxY7PgB2a2zB0tstQE6PKj37q99UpjRJo0mpyzdlNMkmza21o/nLOEOV Sz03BKf+JiyZo0cYFnovJFiejIWyPbt0ubQZIVH6Oen3qEcSi3WqmiAV6cl5 8PEQPpwnTX62o/XUqcTcHv3Uf8bzu0lVngzS7SVveb6/48Neum/jOkfliCDQ rQVsr3/5xlIBi3StY5bRSAHXNBnjZvHo1W0ONB2r5lNurW3QtM+zpn1ue+qR PmSf/W/K0cdmEuWIJYh/1QsuphJmXrBJSNJ0AmXpehH/atJavYgkS/d0wbnA /yhUtVPSlm7Tuk0C0vEg3TO1ViBmetrppwJABzrQgQ50oAMd6EAHOtCBDnSg Ax3oQAc60IEOdKADHehABzrQgQ50oAMd6EAHOtCBDnSgAx3oQAc60IEOdKAD vTE6f0mjM83AFn/xkL+8lQkFlgT1ecG2QyV/IanQ7oHf9By9L4zozvw/6AQ2 rh3Bz40nu8tlNmyjdky4XfPRBglIQAISkIAEJCABibaWeMPVkftB6U5zVnb9 YRZ/W9vF9WPBFsHnSbg17tV6LqKvkSRHzelWhPs7qrLanVvfG7hzz7xuHZs7 bxBHuzsN1qs9tiQkIAEJSEACEpCAxOmReMRlTm1tbalSqcRdVFC7Youp9tB3 oOhyuaz29vbIon22t7fVxsbGTjzVSSr5RnLS62V9X9t/3+DWROzv79M4alVH Po035DUqWZOfeDiUC+831eVq/KqTqnSv6pAnDcbifExT4f96uzJV/CvlLlOr iwLXtO2Z5/SBKn4r4D80UWF96e/+OYJtWau89GTf6xRNhJJLcwpkc6p+zpT8 it+KDl7y1D75UdXtFKVBG6Ti99OL/BwanXpCS1sTSWTk88sL++ItD1lymppe BwcHVYrfnvHr0a2uQlv9j+fFo2y2T1t1/AVjZcQA\ \>"], ImageRangeCache->{{{0, 434}, {267.688, 0}} -> {-1.19056, 22.4729, 1.22356, \ 0.316256}}], 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[CellGroupData[{ 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"] }, Open ]], 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 ", StyleBox["Table", FontVariations->{"Underline"->True}], " and ", StyleBox["Mod ", FontVariations->{"Underline"->True}], "as follows:" }], "Text", CellChangeTimes->{ 3.4233920908294373`*^9, 3.4233933533687673`*^9, 3.4233957793842936`*^9, { 3.4234540553787107`*^9, 3.4234540653312626`*^9}}], 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"] }, Closed]], 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 ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], " as follows:" }], "Example", CellChangeTimes->{{3.4233945567045937`*^9, 3.42339456793904*^9}}], 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 ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", ", StyleBox["Print", FontVariations->{"Underline"->True}], ", and ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], "):" }], "Text", CellChangeTimes->{3.4233924240190697`*^9, 3.4233945832672634`*^9, 3.423395788524977*^9}, FontSlant->"Italic"], Cell[CellGroupData[{ 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"] }, Open ]], 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]] }, Closed]], 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 ", StyleBox["While", FontVariations->{"Underline"->True}], " and ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], " 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", CellChangeTimes->{ 3.4233945873297896`*^9, {3.423454424582062*^9, 3.423454432769562*^9}}], 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[CellGroupData[{ 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"] }, Open ]], 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 ", StyleBox["Factor", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234546004101872`*^9, 3.4234546061914372`*^9}}], 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", FontFamily->"Times New Roman"], StyleBox["Mathematica ", "MR", FontFamily->"Times New Roman", FontSlant->"Italic"], StyleBox["one can find an irreducible polynomial over ", "MR", FontFamily->"Times New Roman"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]], FontFamily->"Times New Roman"], StyleBox[", ", FontFamily->"Times New Roman"], Cell[BoxData[ FormBox["p", TraditionalForm]], FontFamily->"Times New Roman"], StyleBox[" prime, with the function ", FontFamily->"Times New Roman"], StyleBox["IrreduciblePolynomial", FontFamily->"Times New Roman", FontVariations->{"Underline"->True}], StyleBox[" f", FontFamily->"Times New Roman"], StyleBox["or which the package ", "MR", FontFamily->"Times New Roman"], StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontVariations->{"Underline"->True}], StyleBox[" needs to be loaded first.", "MR", FontFamily->"Times New Roman"] }], "Text", CellChangeTimes->{{3.4214723066068597`*^9, 3.4214723079506097`*^9}, { 3.4233947030024047`*^9, 3.423394704455539*^9}, {3.4234547548159885`*^9, 3.4234547600190806`*^9}, {3.423454800237573*^9, 3.423454801096943*^9}, { 3.4234549885644927`*^9, 3.423455029782979*^9}}], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "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", CellChangeTimes->{{3.4233740827513113`*^9, 3.4233740881974764`*^9}}], 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[CellGroupData[{ 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"] }, Open ]], 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 ", StyleBox["FieldIrreducible", FontVariations->{"Underline"->True}], " function." }], "Text", CellChangeTimes->{{3.4234550859232445`*^9, 3.4234550946731887`*^9}}], 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", CellChangeTimes->{3.423370104256091*^9, 3.423375412043728*^9}], 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[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 ", StyleBox["Factor", FontVariations->{"Underline"->True}], " and ", StyleBox["Cyclotomic", FontVariations->{"Underline"->True}], " this goes as follows. " }], "Text", CellChangeTimes->{{3.4234546343164372`*^9, 3.423454635707062*^9}, { 3.4234551899225793`*^9, 3.423455197422531*^9}}], 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[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[{ "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 ", StyleBox["EulerPhi", FontVariations->{"Underline"->True}], " one can easily verify this." }], "Text", CellChangeTimes->{{3.4234552982656355`*^9, 3.4234553025781083`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "100"}], ";", RowBox[{ RowBox[{"EulerPhi", "[", RowBox[{ RowBox[{"2", "^", "n"}], "-", "1"}], "]"}], "/", "n"}]}]], "Input", GeneratedCell->True], Cell[BoxData["5707676340000000000000000000"], "Output", CellChangeTimes->{3.4232101179939704`*^9}] }, Open ]] }, Closed]], 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 ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], ", as follows:" }], "Example", CellChangeTimes->{3.4233945926110735`*^9}], Cell[CellGroupData[{ 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"] }, Open ]], 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 ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], " and ", StyleBox["Table", FontVariations->{"Underline"->True}], ", as follows:" }], "Example", CellChangeTimes->{3.4233933603219366`*^9, 3.423394597720481*^9}], Cell[CellGroupData[{ 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[{"FieldTrace", "[", "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[{"FieldTrace", "[", 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", CellChangeTimes->{{3.4233933992284355`*^9, 3.4233934499631357`*^9}, { 3.423393502088469*^9, 3.4233935067291236`*^9}, {3.423393541791848*^9, 3.4233935642451167`*^9}, {3.423393638636218*^9, 3.423393675527079*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0", ",", "1", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", "1"}], "}"}]], "Output", CellChangeTimes->{{3.423393387712737*^9, 3.423393451885023*^9}, 3.4233935081822577`*^9, {3.4233935446199913`*^9, 3.423393598979714*^9}, { 3.4233936660270185`*^9, 3.423393676261459*^9}}] }, Open ]] }, Closed]], 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 ", StyleBox["LinearSolve", FontVariations->{"Underline"->True}], " as follows:" }], "Example", CellChangeTimes->{{3.4233967637812185`*^9, 3.4233967678281193`*^9}}], 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 ", StyleBox["Table", FontVariations->{"Underline"->True}], ", ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", and ", StyleBox["Do", FontVariations->{"Underline"->True}], " as follows:" }], "Text", CellChangeTimes->{3.423392107970172*^9, 3.4233936956834583`*^9, 3.4233958124938803`*^9}, 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 ", StyleBox["NullSpace", FontVariations->{"Underline"->True}], " to show the dependency in the linear relations. We make use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["LinearSolve", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423395015363779*^9, 3.423395027801358*^9}, { 3.423455536623485*^9, 3.423455570232645*^9}}], Cell[CellGroupData[{ 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"] }, Open ]], 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"] }, Closed]] }, Closed]], 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[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"u", "(", "x", ")"}], ",", 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 ", StyleBox["PolynomialGCD", FontVariations->{"Underline"->True}], ", ", StyleBox["PolynomialQuotient", FontVariations->{"Underline"->True}], ", and ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{ 3.4233946013767543`*^9, {3.42345563504473*^9, 3.4234556422165594`*^9}, { 3.423455701809928*^9, 3.423455711231743*^9}}, 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"] }, Closed]], 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[ RowBox[{"=", SubscriptBox["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->DirectedInfinity[1]], 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 ", StyleBox["Do", FontVariations->{"Underline"->True}], ", ", StyleBox["CoefficientList", FontVariations->{"Underline"->True}], ", ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", ", StyleBox["Max", FontVariations->{"Underline"->True}], ", ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], ", ", StyleBox["Length", FontVariations->{"Underline"->True}], ", ", StyleBox["If", FontVariations->{"Underline"->True}], ", and ", StyleBox["Print", FontVariations->{"Underline"->True}], ". Note that we have combined the two while statements in the algorithm \ above into a single ", StyleBox["Do", FontVariations->{"Underline"->True}], " statement. All intermediate functions are also printed." }], "Text", CellChangeTimes->{{3.4233921228608923`*^9, 3.423392138782869*^9}, 3.4233924342378845`*^9, {3.423392971897576*^9, 3.423392975053846*^9}, 3.423394349875145*^9, {3.423394459750848*^9, 3.423394462641492*^9}, 3.4233946047517757`*^9, 3.423395826947098*^9, {3.4234557510752378`*^9, 3.4234557581845675`*^9}}, TextAlignment->Left, TextJustification->1, FontSlant->"Italic"], Cell[CellGroupData[{ 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"}]}], ",", RowBox[{ RowBox[{"Lne", "=", RowBox[{"Max", "[", RowBox[{ RowBox[{"j", "-", "L"}], ",", "L"}], "]"}]}], ";", 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", CellChangeTimes->{{3.4233944791884727`*^9, 3.4233944838603773`*^9}}], 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 + Global`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 + Global`x^5 + Global`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 + Global`x^5 + Global`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 + Global`x^5 + Global`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 + Global`x^5 + Global`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 + Global`x^5 + Global`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=", Global`x^5 + Global`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=", Global`x^5 + Global`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=", Global`x^5 + Global`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=", Global`x^5 + Global`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=", Global`x^5 + Global`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=", Global`x^5 + Global`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 + Global`x^11 + Global`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 + Global`x^10 + Global`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 + Global`x^9 + Global`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 + Global`x^8 + Global`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 + Global`x^7 + Global`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 + Global`x^6 + Global`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 + Global`x^5 + Global`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=", Global`x + Global`x^5 + Global`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 + Global`x + Global`x^12 + Global`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 + Global`x + Global`x^2 + Global`x^5 + Global`x^12 + Global`x^13 + Global`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=", Global`x^2 + Global`x^5 + Global`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=", Global`x^2 + Global`x^5 + Global`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 + Global`x + Global`x^4 + Global`x^7 + Global`x^12 + Global`x^13 + Global`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 + Global`x + Global`x^4 + Global`x^7 + Global`x^12 + Global`x^13 + Global`x^16], Editable->False]], "Print"] }, Open ]] }, Closed]], 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", "\<\ eJztXUtz0zAQduKkTUoftE1buEAGOhwY3keuDC3PHxE6hRaGKZSeOHCHP8QM /CDu/IGQ3Thy4lkHWVrJ0mQ9oKrr1afd1cPyFyl9Pbg4Of44uDg9GvQPzwef Tk6PvvQPzs5HorSRJI3vSZL87SeQH46yWTIc/Rv+gAQk1fJf4cctwNmH3G/I rUzdStKsDiyU3NCU/SRkHYEVWIENH/Y2pCsgaUJuGXLLY71kogdXC5I2/Noe /zrKocaqyqWQQ72nbmy9U7AL/rcIWZOQdSFtKic0UCjZumZtDAHYJWRdF0Ep yKjwpJqyjQxhWjbpQM/sQ7KFHWw46XTBB6I1Ixtdz+1jgD1wGURr1jGgG2pD 00cqjpchRdELA1dxaXKvtHloc6khiS6j+nbhrqlp1j2xq0zKc8V5dm5UnfQm m0lmXqN0CP2VSmPH2SSi+2CZ5x7VcPbTRbEPj64D3/6aTZ/cvjOMUG63S90p XVOUj2QvzuLCLp9mcIm3pGSZP5MC+dqvOGE6tPAEUqzplZsK4lqJC+zCwpow MX9EXdRjVr8J6S+Dnh/hABdYgRVYz7BOqE18XelC7q691XulELOyeIhP6vXh vn2gEBb5lksuwuOJAt11Exx8qWyDyJ4SrIUW3WOKSyl/WA8FiubiVEHxRQwN v6kavhILyUakXnHjVg8jWGWwOyBXufqkhiwUctXR9BQV4doLIQZhkLCORnc8 xKzHADCStePZkyj2wI3pOYt7VUX9oZuq4nr9ENjwYYV4rV/9CfzAee5RtYLZ JpuZ2S9KiL6KQEflsmfd1IWPMlykLBFVtvSL96pZd52ojXrolj6cm2U2N9Xd YllKZlvHVjW3rxFgukssXdM7c023QaY2doTgbEFW2mLitrgdrdu1juhvkKLo 7dhtm/nbtLXhssFjDUD+eMXWTpVxea4DuVTJsFO2/l9i29Skx4R/+5w+R1dB iCtTBnUkZvFdfUMnqhQExctu6oBh72yC4JgTFh1p5wImWHwL+wwCiovRglhX lr2zsCxrTbzVso1eBrZD3HpjD0t1F+TM8VOH9WoFGeo2bnznYNhpl0BCfUam BaE1LTovGMvEJ+qiLuou1Y0JzAh5WoEVWIEtk/FsdMM32kM3Fta/gW1VU29B T+5Si+2X9qGI7cTurIzh3FPYx3U3CZnJqVIHB3d3iLu1HCG32VtG7c9gmGFD PLVLuer99KqfzWPUHjGP33hR1x6xNc16AwwFzx6x0gnLTwAM94htaXrnaLC+ hxQXngxfVxD/Ul1gFxZW9pqJ+sKpyyFfgRVYgQ2c+8TPyxlWwPEc6KU2WTDw K0gDoCh0wo/ivhgCMN5oAKLQD+NyBSCIU7fUWy5Da/o8YeuI8URY3AXm4zSt o3bgoAFt2E1Hk0WI7GYQrvpnNyNxm4fJ9DhKDVlLbI6UUHHEIn5QMXT0ZYdx raoFtj5Y+g80oJ7h332YzieNf79ZTic=\ \>"], ImageRangeCache->{{{0, 392.375}, {241.625, 0}} -> {-3.269, -0.175, \ 0.0402855, 0.0456282}}], 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", "\<\ 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\ \>"], ImageRangeCache->{{{0, 431}, {265.813, 0}} -> {-4.69709, -33.108, 1.35278, \ 0.729615}}], Cell["One LFSR with a non-linear output.", "NumberedFigure", PageBreakAbove->False, TextAlignment->Center, TextJustification->0] }, Closed]] }, Closed]], 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"] }, Open ]], 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", "\<\ 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 dDHZJYZa9oxrIm15nqWTA/8DEfJJxg==\ \>"], ImageRangeCache->{{{0, 453.875}, {180.688, 0}} -> {-5.63276, -1.38004, \ 0.0801944, 0.0627609}}], 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", "\<\ 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 EpzLrrKr7Cq7itJFf1j4v0CjbWfqH9krZWY=\ \>"], ImageRangeCache->{{{0, 418.813}, {258.125, 0}} -> {-0.0267994, 46.9993, \ 0.716503, 0.732206}}], Cell["\<\ Block Cipher in Codebook Mode\ \>", "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigBlock codebook"] }, Open ]], 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 -18.0625 -8.5 ] [.11905 .36788 18.0625 8.5 ] [.88095 .39731 -46.8438 -17.875 ] [.88095 .39731 46.8438 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 [ ] 0 setdash .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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 43.75 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Block) show 63.000 34.938 moveto (Cipher) show 113.250 34.938 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (Buffer) show 121.625 16.188 moveto (C) show 130.000 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show 136.500 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000 0.000 0.000 setrgbcolor (key) show 88.125 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .11905 .36788 -79.0625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (M) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show 80.000 18.250 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (+) show 88.625 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (1) show 95.125 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .88095 .39731 -107.844 -21.875 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 43.75 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 79.750 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (C) show 88.125 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show 96.750 18.250 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (+) show 105.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (1) show 111.875 16.188 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (=) show 63.000 34.938 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (BC) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 79.750 34.938 moveto (H) show 88.125 34.938 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (M) show 96.500 37.000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show 105.125 37.000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (+) show 113.750 37.000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (1) show 120.250 34.938 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (\\305) show 128.625 34.938 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.813 0.000 rmoveto 129.438 34.938 moveto (C) show 137.813 37.000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 144.313 34.938 moveto (L) show 152.688 34.938 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .21429 .32079 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (\\305) show 71.375 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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", "\<\ 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\ \>"], ImageRangeCache->{{{0, 425.188}, {262.25, 0}} -> {-5.25005, -2.26476, \ 0.0390934, 0.0316272}}], 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", "\<\ 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\ \>"], ImageRangeCache->{{{0, 431}, {265.813, 0}} -> {-5.26103, -2.125, 0.0366197, \ 0.0296259}}], 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"], " (see Table 2.3) will still have sufficient structure to enable a unique \ reversal of the addition process." }], "Text", CellChangeTimes->{{3.4233937213867474`*^9, 3.4233937365430946`*^9}}, 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"] }, Open ]], 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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 eQ==\ \>"], ImageRangeCache->{{{0, 546.875}, {245.375, 0}} -> {-3.6197, -1.17016, \ 0.0363138, 0.0363138}}], Cell["\<\ Cipher Feedback Mode\ \>", "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigBlock CFM"] }, Open ]] }, 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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 XpZ8afjfaNrpZOt/B/fEMA==\ \>"], ImageRangeCache->{{{0, 398.813}, {245.938, 0}} -> {0.0297416, 46.9993, \ 0.75201, 0.768491}}], 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 -18.0625 -8.5 ] [.78418 .57062 18.0625 8.5 ] [.21582 .57062 -18.0625 -8.5 ] [.21582 .57062 18.0625 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 ] [.21582 .37442 -6.1875 -8.5 ] [.21582 .37442 6.1875 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 [ ] 0 setdash .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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (f) show 71.375 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore .59217 .53792 m .97619 .53792 L .97619 .60332 L .59217 .60332 L .59217 .53792 L s gsave .78418 .57062 -79.0625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (R) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show 80.000 18.250 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (-) show 88.625 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (1) show 95.125 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore .02381 .53792 m .40783 .53792 L .40783 .60332 L .02381 .60332 L .02381 .53792 L s gsave .21582 .57062 -79.0625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (L) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show 80.000 18.250 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (-) show 88.625 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (1) show 95.125 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (R) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show 77.875 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (L) show 71.375 18.250 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.938 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (i) show 77.875 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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 /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000 0.000 0.000 setrgbcolor (subkey) show 113.250 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .21582 .37442 -67.1875 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (\\305) show 71.375 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .84562 .4856 -71.375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (32) show 79.750 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth grestore gsave .15438 .4856 -71.375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate /MISOfy { /newfontname exch def /oldfontname exch def oldfontname findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end newfontname exch definefont pop } def 0 25 translate 1 -1 scale 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 63.000 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor (32) show 79.750 16.188 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000 0.000 0.000 setrgbcolor 0.000 0.000 rmoveto 1.000 setlinewidth 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", TextAlignment->Left, TextJustification->0, ImageSize->{279.188, 172.375}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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\ \>"], ImageRangeCache->{{{0, 417.75}, {257.563, 0}} -> {-6.52573, -5.22505, \ 0.0468634, 0.0550354}}], 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", "\<\ eJztXN9T00AQDm1aWgeUQsHfWhhRccQZHODRIjr6IqOP/njqgAgPjg7y5oyC /4x/lP4vtbfXXNrwJd0jl7TIdqDZ7u3t993u5u6SBrZah3sfP7cO97dbjZcH ra97+9vfGi++HHRUxTHPG/vjed7vhqfkdkfsvrU7P+2/6k1psLypDq+V/RqQ NrXRUzoUu16pu7cFdCtMu8dA9wromgIv8AIv8AIv8AIv8AIv8AIv8AIv8AIv 8P8r/Ix6ryhNSUkXlORrOy+w07rO6wqT66SN01vMgU2nZdqNwm11KKiWBjCa jXjUn07qoshxugKhGdaR1lnAYAroUIwu5cr0OpPpbaCrj2RMH+pymFcHX7Xc YJYDosQdTgHo0CDqgEstkSkqhzyYXktkepNZDsOP6QNdDgvqMK4UaApB5YCg ECXX1KcTmaJyyIMpKoeQ6VVmOQw/pnd1OdBKtqYUl61olvp05KrzQkmpG4Ra RgiUknXVPpflGAhhwv1ZhGlcBPZo5te7hp4EpjhL+EzQahkyQTGxOwvSxWTG ZGdR96U1sKQUiLhVuohZ1UhoqLVENKuURNDQNilEQ6umVditxrakQ0t7TNpt op2RizOhwqy/qUQmLs4ExGQ+kQnagbs4E+xjsqz7okskF0kaZ/pAixK6wnKR Li4ntA9DPNFFm4tkpold0y6tw9qGclOcBz9kh1YRbrqHFVPL1Ke5IEV9SUcX qXMpEp4dK9SKmHLTnG/8EpKL7miVlaRnF40VdECFzb2j1ePU73Pa+a0qucYM J7qzZcU4IRrc24urKcohozuea4ASdyLKiNI6oMRdCs/WfWGBF3iBF3iBF3iB F3iBF3iBF3iBP5vwkb++eqOkVSNpct4+6H/M1H0SF+JCXIgLcSEuxIW4OHsu 6EGAX0ba0+Z0IOtjI7GMQmmQET2A2GVHB3qC5Mg0HcUb/QTmCUahhI10VOgb JxOfH6CBPu1qF7smGJGOpKPenh8og2NPW7GvrQCys9MDFLoKuqAe3zMx3Ykv oIZ6L6u4fEhsfYvRFoxBwlb8jtZR8APde8d2GyMLvwjM3zm2a8bD01MoZE1F 7iupZLJWBc7o69+qUjXd+aso1YZjfovxw0YdC0DnM3WlqM4LH0vttUOXy3lw mWb2fTJCsbo3KH2lPvPAVRm4mkydnnRYM8DueY7jGhhKvx8yfDqtVz2RwG4W 2MdHMzUcCuizfEc3KKZkTU9s0mRUdhU8C7914HczI74DS6y/SivAxYmJQX9i 6dAEx5pszyEXN7NBfhHKnA6aTdBmZIjROeViiKhxaaAh1IDOdtF0zQllrzmC cbKZIYMy6z4v2e4+ixluf0myy4a1e7R8cDeIp2RvGaOVFAFYxqxPPWLE5XwP hyhpVdGcaeoYuweJOHgEdOjKI/5sZxK6Hz+w8AKUvposKAntNEO7FVPhaJzI 31I8/AjdRxQX4kJciIuIC/ow4J/k9sre2D+Ykgda\ \>"], ImageRangeCache->{{{0, 474.313}, {166.5, 0}} -> {10.2655, 48.5001, 0.567566, \ 0.567566}}], 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 ", StyleBox["Mod", FontVariations->{"Underline"->True}], " function (here shown on 4-tuples)." }], "Text", CellChangeTimes->{3.4233958423690715`*^9}], 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 ", StyleBox["FromDigits", FontVariations->{"Underline"->True}], " and ", StyleBox["IntegerDigits", FontVariations->{"Underline"->True}], " functions (here shown on 4-tuples)." }], "Text", CellChangeTimes->{{3.4234558804025354`*^9, 3.423455885121255*^9}, { 3.4234559156679344`*^9, 3.423455927152236*^9}}], Cell[CellGroupData[{ 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"] }, Open ]], 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[CellGroupData[{ 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"] }, Open ]], 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", "\<\ eJztXeuPnUUZf3uu24vFsi1td5fuUi0oitcurfRKu5cK3RZEUeJ1U4mLomJt 1GBjDBpDSFO0GoUFowGlMcYY9aOpH/1g0lhoQEpJSOVTv/U/OO4878wzc97z m3nnec85u2frOWnPmX3muc995pn3nZk9Mffw12dPPHJsdmz6+Oxjc48c+/bY 1DePL4DKK5JkxX8X/t8+lqh0I0nMV2PhX+Nt9aUg+ekH1U9dkR5UqZpKXVKp ikpNc2p9iv4Q/ZSTVBYxSiYArARgr0XiTQHYoF/8JIC9JWM7o36qKqMOkHZx bg3kXuDclSB3J+dW2b3alUcBOhK/JxLvZR9eSUEQl9ScShNs4bOhff0GfI7K wJDL7lpUTSuRlfLfbWif1SVHdaopBNrXYYVjaTtgRKz/yVgq2FeCud5aVnIU OQJ0nAawywCW7R7UZ6yrbGe0ia5JBmUykHcpkDcRyBtNU4eBJ8sAdnck3quR ePsj8UZSNe/1VYcMDLURhHcxEm9vJN5wquY9XEPLnNoHYBcBbC+Aaeulw7g0 /YnUooZr0TSAvRGJN9JVtvern5LKOcSpNwHsZgedGE1z1uVmWNlBv4+c3zCN lVJvANhIcfRqw7RpSr0OYBo97UtrrhdMusHt25v9erMP6bcE/HogEm+zW6yV rNQpQPGfEGoLeMtyrI19tn22fbZ9ttchW+qgaUJHY9LHZSxoykZj07+YxREZ i/uZxT849YCMxaeZ8K+cekjG4vNM+BKnvihjcYw98ByzeFjGYo4Jn+bU12Qs vsGEP+LUt2QsTjDh99ik78pYPM4sHuXUSRmLHzLhlzj1hIzFT5jwk5x6Usbi FBMe4tRpGYsz7MQ9zOIXMha/YsI6t9kRTtU4d17G9tfqe5UC0axspUr9Vsbi BfVdV6AhTv1OxuJF9U2gMhuyllNlzv29jC2h00JggJmVODXAuWdlbP/CPvub jPCPLHsVp/5UwCQivIlTQvV/w4RbuVq+IGPxLLO4g1PPy1j8nAk/xqlfylic ZvUnmcVPZSyeZML7OPWUjMUTTPg5Tv1YxuIkE9re/wcyFt9hwkzXHc/iMSa0 /e5xGYuvMqHtNB+VsfgyEz7DxfsVGYsvMIsXOTUrY/EZJvwzpz4rY/EAq/93 ZvEpGYsZJvwnp47KWEwz4SucEk7wluGMts+2z9bsmiXnzp1LTp48mZiPSi/A aMygydPP5MQBsXSiujC5UJhnz55NLl1Kt+4NzoULF5JTp07dAkhHuYk+DnIH iwsb9qurNwWJg6FONwWbzxOuXr2qOKXTRJo1kQUDrC3BkI5SCUN+Zel0oqQK oKLLx801Bi9kD3Hhbm3Wkjrkd7bDenOOetpSA3MOOxr6f0KuysCo0IZARtnC mGkJCNqYo9caBSnoF6KNMNyFoVMedOw43FyhaPnw/WCFakdanpe0U1VZW7at dUHV4wW8UV8jrrIVEY24gOCIsjA9V4ib6jIW8A4CNqhTLMA6oKjbLyhsW2TN /YJyicKZiNRSyjfQ35BjSoRV46JRn2vXrhkvTEaqFcMr0E/nDEjoVKaz4xoa fWOldmBC0BfVF9UX1Rd1PYrSx/++TjlWqo1CmAwzRMRalfTkJndB4RWfgdmN ObBSaRi1HMZoNNWqpZFT8esIxGqd+qaJ5UdBLg2OAzwVJbwt2pWu1IbxCMdP sFD1F5pOaRsoDCtmlYEmOzdw+UYoT3jDLK7sUBgqo7sWSX8dyNG9ndXNMMiI Xd3cnaMXrVCQ0+gYoZrvtK3stCHml1eQBdcgyMcRFbPOalLmiF9aUykHovzy SjlyMYLcjtY5H/J1EFW2LJN7M1AG2Wi8rBWKrcmCdQyyEXV4qK8+AMSFrNAi 86xw+8OYdQ7qD6e42h0CuQe1T1wJDZJNH7f/MHYFmgwNLTkLIO+44tVxIsOV PZqzRCs+9NqNQ29uoaE3dsIRlh8L6zWhtpQpZcYFXd3or0xF8FaJKCmI0AaO 2nBRoYCwn6xp00G89gRkQlKLCKgyi/Acs1pAQE40q3caiapEpltuON0SkNnx ef5kpPh0vG0JhO3AQVzsGNSlbqEvPgZvBzUaVWPXdEcRql+rFSStad7h586U OJ1/N5qnqC5sZRf1DMxZsyq5sM0AT88Zybr5+XlahbkrMgVTeZsA7dDydQUd YtA49W7HAXNzc2S0ue+l0gqm8jYwBZ3xVJWFhJfamk5+Ta9aXh5eoBuVFeuF KlV6Uw2MN8yM2IUpHIW7jjkMApPNCt2FsZu057rZnq25lFfXw58uJPprN31X qYiVYQrVGFqiVJWNNnkKl5yyRREPAMNR+aOWsbb36gSVY9WtE26ucUGJnFJl t5j/CbcPX51ArkGwd/SeayhekNDeVdA1NzIH5BpUQ6oAtjhNRuQaNDzcog2I bVpXrlyxPW2GF9WpEuhpqVcl96zuPa/s1h6Q9qrvyRZ6ksDBe4nNM3eL84bO 9xKs0jwMJLDOdHQmt5/+Hmia2zR0U3TmNrebhpZpzOrvjd3REU17c86V3wc6 AtRhrF88jREeUhN172h3cxHVpCpJRU4+pLopVMlerkWL0C6tq5ZOKOWgrZwu CbXXhRdbqHdHpktCj3KZpr2nwRGrEd6V61LDWmyhdgNwsYWG927di/TdE2Wt F4pKl3qqm/sAyPXuDoY1FHo2ds6bTn+8IyEd6NAAj/YkW54MEKvdJqDJbRqW tzvSziwKnU+h8qCMQHgbsokutWW2KmrATnt2OuhYHJrT3coUmzpse2pHy06v 0HK0Kq8AGPKGXaWl4bzyCfw2biI3dcU7bXVwsRsW+uEqDX3XjjY7iu6U7NF1 Wfcr9JezHdNTJmdgVILUoazVJe5yNpaGVv23Mof1y6M2oE4ZNR67IWIaitQ1 25jDxh51Ddp0qFOB+tYM67QvpPse2wCvXvVKZnNiXJss7Sf39ap5LZsV41qD vHFxf69ahPc3xjVGzhaJ3VNBU65F7IXS0C5RsEmXTi5jh5TxNlTqgJp2Bmg3 OpZYpWVy5LzY4v8vVu9Lt2UgirxarkJF6/hu6mBh9BsbUHQdN++lE18gnlKo STiiLi3oQvcWoraaiD8FwyFT6ACVepzd2g+Cewi7mLjmM5sEBzYnKJyX4uOR gTVusPQMF9FFg51MW/d5heTm3c60ypWYGVllQp3cWwSh+HgXb7v6pjXvQFvK nVEgukpwpqgt1r0Fbxvs6JCj66wcVWlbM3c5Doy8MRCumfa2Q959WBumSjqh QPsCV58Lb8JOsKszA1gnrjp3oH+NjZbVz0IQX3tetkNArCa9e4WwL6ovqi+q L2rZisoJIELP9QtIDcdfRN5FPs1M8uIfaj6kCoDt0pYKZvK7AZvDLDjvOveA Dyl954gCtTN/tzIC9+wiFKEZ1w4tqsisfZy5xKuUmaG3Z0EH5+rxFtSDda/9 GfoMCwnUs6PsetTeCjw36KlgsxL2LdLpN3q6bwfUiHkC0NPdEd3Z3jV8s/LN HmNm16yXZcxsuOJ0Pgv8KpIpbhfogYYt8VB22NJrHhfdpAtwQ43SywK/xwT5 CbGQvttExDdi7Sp/eQmSNoHJl+WbS0jputqIuAMgUQxAzRdaR30lHbt9EORu 4FxEq8XrB102HStOABg6MH0/YPtSG7QbAd5hv5ppbL2319zgI6Gz5j+A3Ns4 d71cnPYnBWhkouJQeAsK7nDj40IRgSjyDh0PDwMZ+iZL4sJS2moTXtqizGOe m2Whe0PowsUaICs2XqHULHclB8RQT27KNs9TeofSf38wH0ZVgfRd5wgNhWnU 25A2xNKkBTUfKYF4UODRSFBWbEH5LcNRIagzGGRNboz08ZC/YFFLQDWWCrYp 9k4aYYTiO5F0hDfE0tF7OaUFLZJK4yZ6T2Y7Re6/ldoS7tQa9Ch1/Ob2S5/s Lxp2GlvwqK4jGPUYo6RMfhjrM22U/4BEUGwxt8BMj1LUvYHi9UaPlrlmUfW+ QRd8tgHlxYwipyGZsaVNplCLWtWBZh5bn7yaVHyatNP0oyJ6k6QDEb1uxfBe 2EVjS8mOLQXrhDdUl7o3+5RsNOfJLWbEvMbMR4LMRSWHBNlIZPsYiqKu8rXc xIbxSiOXW1pkYoMHCrclD4/CraAN+5pc1jJWbtdci01NvJHGMsdFsZH5rmOG NrkPzzi3ay3cOWVqdLqD4Mwr6xFsZL6L5yVzYLyppYyOkdNo1Kt/xGGfXXaR yXrZFRtx/WH1vRq20FyK2JE61Tk3Cj2wUkRjvfGEuxlAbz3XMIOH1oKI352g 8J+PpEUh12gk9NsRv6lhA72RxiggHOHNAzxkRT0Sr7s7dNcx2yIPaew6Mzpz LecwCz+sgFjYs+GW3X8voX0LeMt+ffhJBelbvnlL2vySoMksqx7a+hc8G8C/ 74/NFt6qvd43+heRLX2jK38BPvTH2+H0g+qnrojpsJSOh9Omlpg6Q6l0+9y8 4TdpLdH8s/bXIvGmAGzQL34SwN6Ssb2HzSxzqgLQdwI8FGlwHuDVAN44wCtx MWiX3wsIqwCGFEGhEbG05yW0NFGKlWY2EV1YYk4Aoh/0jgrorkhapBWyF9Gi gtwRSVsOWj4DKEJrVRe2y0vbuuT3VW/kASQfeWBnQd1bzMfqptE+KrVHaBRS 4nwHeOwM8Kj7jTwCstBxwW6Ap/ePFj4vB3MRLa0eSo4iR4HQaQC7DGCoKx31 25dlqz5ZtuqTZas+Y/l1YzKQdymQNxHIG11SsbFdYOx7+V6NxNsfiafnF2jY 3AdgFwFsL4CBaUuy4n/L0aG0\ \>"], ImageRangeCache->{{{0, 481.813}, {297.125, 0}} -> {-7.2107, -7.06574, \ 0.0405915, 0.0597076}}], 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"] }, Closed]], 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"], " functions ", StyleBox["Log", FontVariations->{"Underline"->True}], " and ", StyleBox["Plot", FontVariations->{"Underline"->True}], ")." }], "Text", CellChangeTimes->{{3.423456060729506*^9, 3.423456063713862*^9}, { 3.4234643155474815`*^9, 3.423464321125714*^9}}], 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[CellGroupData[{ Cell[BoxData[ RowBox[{"Plot", "[", RowBox[{ RowBox[{"Entropy", "[", "x", "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}]}], "]"}]], "Input"], Cell[BoxData[ GraphicsBox[{{}, {}, {Hue[0.67, 0.6, 0.6], LineBox[CompressedData[" 1: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 YLzlnBaFnCCrX/nEdod5jj3aFBaZzzKIITbxf5FM6VKIeycQfIp4zaDJrE+G FDSLTiWyyHl5dWR/cZARWQ/XnhkviXULd17UPkzuP0dbPoz4WOj6zkdmFFQq TltsIw5UnZHuakWhPWudsC85r1IP/pxQOUth4V3xrkPECQKjkkwbCmIimU5y xK8aeVd0HSgcFpaLekniQa/r272Sl8n8CHgubCXxw4WVM1XuScEpSNA+mnhS Py3n8lUKy71UHY8TSy2MlOHeoCAT5XydQ+KRboFjf1YomS+r5S1NJJ4lTC4P MkyhkGtYvcmbxMM1Z6W1BZ5QaBbku6whflk751tuGnk+I7cTHT9Ivn/423xJ FoUtbYk6asSTO1pXDhRQELXqV238TsbrH1gZUEdBO+fl28Zh8rx8H2+tRgof BVtY9sTORy9tGG6mYJMllCFCHKBi9eBoB4UbVt4mG2ka+VVatso9FLI5m2uv DpF8MGdYlPGLwhc1DfPWLzQaC4NuGkxSGA+JjLYivmuv9E/dHwpnCg7l0X0k XlUdE+oQ5sLf8P0l4b/2K5+kxbmw8ZpQkeulMXci+ttiBS4WZa/XlyP5qz5t k3OiEhdmWm7SMVwat83qaWUVLt5151RIEc/JFxnasJaLu2ET6cIU2e/OTp93 b+Zi3UrBxFYWDbHP+syL+0id3fR8nS7Jp9X3qGPjhlyY3FMNS28j8UPPs/2q ERclL9Q/SBLPSspuDTThIkk/s4zVSmPm8cUND09y0SEfwjlD8rVo03D5x4tc mPMHkrVJfhcujslSiOVCT6dLQZJBo0NLbw8nnotUnn2qPqknsl4PUtGJXDxx jq13J/XHsfztkpJPuFA7+XZWWwmN5xkc12k5XEjPTlkdUEjyS6yCJus9F485 w/88ySf763I6I/I7F+IrhGvZT2iEjh0+fmiUi+xNkxm9j0l8c/v9Y/Y4F5JH B9YPPfo7fsMVflNc+Aqelx5NpnHGhg68OIMHhpfR9bGHZL6PbjxoJMvDlYvr 77+6T+O8+pv2Gft4sM8JsNvoT+JPfcuzV4Y8xAeblUr50Zh/YdjnnBEPIjkN FSM3aBQ/UlIuN+Fh5muvluzrZP0X3na5dooHX1bHdGlvGm/GrWeNufGg1x39 PO0imc9i8e3dCTx07OHGfDxJ8o2BZULRKA+nzvAfzFYn9cgaeW2M89DnqxqX o0ajSJzqLJ7gQfW+oJvpBrL+TccXvpvWBYaOeFL0OhIPjpuHls3sglN4OS21 ktRLLkZeH5Z1QU43yKBhKbk+WtuscVcXUl18nG1IPf9jQGZub2QX1AN7VMWa +YiI+/w+9kEX/KfshHaSfmHjwVyfw7FduBfZ6HiJ9BPOOYZ0SWIXfuU1z++s 5mPI41ptzLMu9MZcCg8v56NHpDfEuLQLXYq2297l89Ei+3xG4VAXFJm77cSj SP9yeLdQhF43LO6/2mdryofPHr+Hub3dWJUkcsi7egjyrL1tyX498LJ3FnLZ MATNzb4R0mq9UFvUOXDIZRAWy+rGBZp6Ed9lzP+QNoAfVbd4Ttc/I1TDqlLl ZT+ihE+4HlLsg3ZjUlT1my+Yx85LEmT0Qezp7E2cZ30Q8b5+ZKvzF1i8Oqfe Y/sZ09JOZPEk+/FIweiwhmwvXKKzbkmW9iOMu5phENmNwtUBohIOA6Be6iVI 8nmQ2Ouy5j/xQUQ8mJPzaxsXzLX1TZffDmIJf7vLHzs2suOh2H1iCNdTQ62T tnbgeJaGxNKpISz3l+J0pbTgml/ideZTPhyGBHLjf9Zhtvv0vacz+ID5l50T VXWItrkg2ZvFR0LY4u+acXV4sW9rMp3Lh2VpBM9yRx16JRoYgsV8sJpMpw4E 1GJf/DTRlU188BYf2XVmbg0WvDwZ6jbBR9Lybvbb6VVITi03/TXJh7x2ka5w ayVUo1fL+kyjkaz2doVySiUMvMeyAkRInf5zxuQYKuGlG9YQM4cGX73TstLt A3h1RVKlCjQs3tR7fGivQEbf0hjx/aRu7ohUYvqUwSjtjncl6bOCpFvK+bpl +GYrcsrXmMbpayu7300vw5aBQcVfpjQWMCSyH4WWonToTWbPaRquO5137Xrw Dq3fzEvfkj7KO2FncemOYni8qElxv0Lj+w11l56SIix23XFTjZwbL+n73qdQ hFM/VPan/kfizNPqF8aahegfG2sJJ31Uw2tLp/wVb/Dn970vduRcV/eqfbjL zEdS4YxqJRIHQv+tTNh0MB96V70zKdJHySa+SqZK8hD0x/qiaSaNDTo3+esT cyElqD65o4AGd5HditdHcqAyvXGuNIljkm1x2zf8eoqq9/rfm0ifIuip6CWW n4YLAQUtoSTuBXyZ93mFQypyZiRGC5M+pHKJwbhy4yNoiTkpDnfT0Hm2YLn+ qQQYS4hveU/ymvua2Ve1PX0QJCK4mEl88HTTlV1iPmCM/5gcJh7RyVCXiLsK DR6rTIbkTbeX0t39hd6QeZFx0IFYsF/U9s5vT/COGJ6bT/LseER5b7S9B1yj QiKtSJ62nxIrEBZzRkbItcsexJmPI3097zqh95qrxS3io/3nP7ktcoKZrcXy v3l/bMtWyw/6DtiuuSZzJqkTGlXLDGBph3+YH8ufE/8Y/GwdcMwSqC9OrSDW SRmj5h86DQ/Gi+BO4tR5M/ISdp9C/7MYYxFSp9SuD/+2yswCtd7nWWbEWrp9 2RZphzHd5WTJBWJ3+qB4tr0xdM4eTv7vb924dnVeyYEDyDmwzfZvXbWs7Nad 7p96GNi5fv87Yssn+o7WCjpQ3KywvpX42Mty1SEDDZxYvVBy4O/v/SR6FeNX 4L7srB9/68iN+33//z7xf47HyaU= "]]}}, AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], Axes->True, AxesOrigin->{0, 0}, PlotRange->{{0, 1}, {0., 0.9999999829081538}}, PlotRangeClipping->True, PlotRangePadding->{ Scaled[0.02], Scaled[0.02]}]], "Output", CellChangeTimes->{3.423456055401415*^9}] }, Open ]], 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 ", 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[{ RowBox[{"|", "\[ScriptCapitalK]", "|"}], "=", 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"] }, Closed]], 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[{ 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[{"I", "(", RowBox[{"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[{"H", "(", RowBox[{ SuperscriptBox["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 ", StyleBox["Length", FontVariations->{"Underline"->True}], ", ", StyleBox["Do", FontVariations->{"Underline"->True}], ", ", StyleBox["Table", FontVariations->{"Underline"->True}], ", ", StyleBox["IntegerDigits", FontVariations->{"Underline"->True}], ", and ", StyleBox["Print", FontVariations->{"Underline"->True}], "):" }], "Example", CellChangeTimes->{ 3.4233921444079046`*^9, 3.4233924393160424`*^9, 3.4233937457462783`*^9, 3.423394361578345*^9, {3.423455949917715*^9, 3.4234559508552094`*^9}}], Cell[CellGroupData[{ 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"] }, Open ]], 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"] }, Closed]], 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 ", StyleBox["Length", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.4233943662189994`*^9}, 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[CellGroupData[{ 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"] }, Open ]], 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 ", StyleBox["Which", FontVariations->{"Underline"->True}], ", ", StyleBox["RandomReal", FontVariations->{"Underline"->True}], ", and ", StyleBox["Do", FontVariations->{"Underline"->True}], " (note that <> joins two strings)." }], "Text", CellChangeTimes->{ 3.423392152392331*^9, {3.4233964039195404`*^9, 3.4233964093414507`*^9}, { 3.42339644129478*^9, 3.4233964432791677`*^9}, {3.423456157434325*^9, 3.42345616065324*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"SeedRandom", "[", "12321", "]"}], ";", RowBox[{ RowBox[{"randomchar", "[", "x_", "]"}], ":=", RowBox[{"Which", "[", RowBox[{ RowBox[{"x", "<", "0.3`"}], ",", "\"\\"", ",", RowBox[{"x", "<", "0.5`"}], ",", "\"\\"", ",", RowBox[{"x", "<", "0.7`"}], ",", "\"\\"", ",", RowBox[{"x", "<", "0.8`"}], ",", "\"\\"", ",", RowBox[{"x", "<", "0.9`"}], ",", "\"\\"", ",", RowBox[{"x", "<", "1"}], ",", "\"\\""}], "]"}]}], ";"}], "\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 ", StyleBox["StringReplace", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.423391953047305*^9}, 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 ", StyleBox["StringLength", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423391743999092*^9, 3.423391745827229*^9}}, 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 ", StyleBox["StringReplace", FontVariations->{"Underline"->True}], ", because this function works from left to right, as follows." }], "Text", CellChangeTimes->{3.423391969922413*^9}, FontSlant->"Italic"], Cell[CellGroupData[{ 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"] }, Open ]], 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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 r7IrBfoY/cnKR1VP2vwfuLhlOA==\ \>"], ImageRangeCache->{{{0, 475.625}, {293.188, 0}} -> {-0.623084, -1.85022, \ 0.015601, 0.0189323}}], 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]] }, Closed]], 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", CellChangeTimes->{3.423392210595828*^9}], 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 ", StyleBox["Position", FontVariations->{"Underline"->True}], " 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", CellChangeTimes->{{3.423456259220786*^9, 3.423456262674088*^9}}, 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", CellChangeTimes->{{3.423392214752105*^9, 3.4233922151739826`*^9}}], Cell[BoxData["2"], "Output", CellChangeTimes->{3.4233922190333824`*^9}], Cell[TextData[{ "Now we are ready for the coding process. We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Do", FontVariations->{"Underline"->True}], ", ", StyleBox["If", FontVariations->{"Underline"->True}], ", ", StyleBox["MemberQ", FontVariations->{"Underline"->True}], ", ", StyleBox["Append", FontVariations->{"Underline"->True}], ", and ", StyleBox["Print", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{ 3.4233922277521887`*^9, 3.4233924463785877`*^9, 3.423393005179039*^9, { 3.423456307020108*^9, 3.423456312692274*^9}, {3.423456354616295*^9, 3.4234563587415066`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ 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 ]] }, Closed]], Cell[CellGroupData[{ Cell[BoxData[ StyleBox["Decoding", FontFamily->"Times New Roman"]], "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]] }, Closed]], 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", "\<\ 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 \ \>"], ImageRangeCache->{{{0, 667.813}, {150.688, 0}} -> {-1.19889, -4.12502, \ 0.0548009, 0.0548009}}], 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 Eve 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 the ", StyleBox["Mod", FontVariations->{"Underline"->True}], " function." }], "Example", CellChangeTimes->{{3.4233958609629407`*^9, 3.4233958675098577`*^9}}], 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"] }, Open ]], 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 ", StyleBox["PowerList", FontVariations->{"Underline"->True}], " and ", StyleBox["GF", FontVariations->{"Underline"->True}], " (for which the package", ButtonBox[" ", BaseStyle->"Link", ButtonData->"paclet:FiniteFields/tutorial/FiniteFields"], StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], " 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", CellChangeTimes->{{3.4234548408466883`*^9, 3.423454843581046*^9}, { 3.4234600525014496`*^9, 3.4234600564858503`*^9}, {3.4234602703462296`*^9, 3.423460278455604*^9}}, CellTags->"ExamDiscr 2 primitive"], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "197"}], ";", " ", RowBox[{ RowBox[{"PowerList", "[", RowBox[{"GF", "[", RowBox[{"p", ",", "1"}], "]"}], "]"}], "[", RowBox[{"[", "2", "]"}], "]"}]}]], "Input", CellChangeTimes->{{3.423375341039465*^9, 3.423375344351435*^9}}], Cell[BoxData[ RowBox[{"{", "4", "}"}]], "Output", CellChangeTimes->{{3.42337533719633*^9, 3.4233753419924374`*^9}}], 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 ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], " one can find the different prime factors of 196." }], "Text", CellChangeTimes->{{3.423460319424354*^9, 3.4234603270649796`*^9}}, 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[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["2", RowBox[{"196", "/", "7"}]], ",", "197"}], "]"}], "==", "1"}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["2", RowBox[{"196", "/", "2"}]], ",", "197"}], "]"}], "==", "1"}]}], "Input", CellChangeTimes->{{3.4234604969399796`*^9, 3.4234605305025887`*^9}}], Cell[BoxData["False"], "Output", CellChangeTimes->{3.423460534158862*^9}], Cell[BoxData["False"], "Output", CellChangeTimes->{3.423460534221363*^9}] }, Open ]], 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 ", StyleBox["IntegerDigits", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.4234559605113974`*^9, 3.423455962167637*^9}}, 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 ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " function is a fast way to compute modular exponentiations. " }], "Text", CellChangeTimes->{{3.4234605491589584`*^9, 3.423460551127721*^9}}], 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"] }, Closed]], 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 ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " function." }], "Example", CellChangeTimes->{{3.423460643534562*^9, 3.4234606447376947`*^9}}, CellTags->"ExamDiscr Key Exch"], Cell[CellGroupData[{ 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"] }, Open ]], 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"] }, Closed]] }, Closed]], 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]]], " and we make use of ", StyleBox["RandomInteger", FontVariations->{"Underline"->True}], ").\nAlice sends the pair (", Cell[BoxData[ FormBox[ RowBox[{"R", ",", "S"}], TraditionalForm]]], ") computed by" }], "Text", CellChangeTimes->{{3.423462912828416*^9, 3.4234629254378715`*^9}}, 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"], Cell[BoxData["71"], "Output"], Cell[BoxData["125"], "Output"], Cell[BoxData["81"], "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 ", StyleBox["Mod", FontVariations->{"Underline"->True}], " and ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ". 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", CellChangeTimes->{ 3.4233958891974964`*^9, {3.4234606518002405`*^9, 3.4234606525502453`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ 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"], Cell[BoxData["123"], "Output"] }, Open ]], 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"] }, Closed]], 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]]], ").\nAlice computes with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Solve", FontVariations->{"Underline"->True}] }], "Text", CellChangeTimes->{{3.42346294715676*^9, 3.4234629585630836`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ 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["98"], "Output"], Cell[BoxData["171"], "Output"] }, Open ]], 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"] }, Closed]] }, Closed]], 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]] }, Closed]], 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]]], ". We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PrimeQ", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4233972295498247`*^9, 3.4233972429405355`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "16"}], ";", RowBox[{"PrimeQ", "[", RowBox[{ SuperscriptBox["2", "n"], "+", "1"}], "]"}]}]], "Input"], Cell[BoxData["True"], "Output"] }, Open ]], 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[CellGroupData[{ Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"3", ",", "11", ",", "17"}], "]"}]], "Input"], Cell[BoxData["7"], "Output"] }, Open ]] }, Closed]], 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 ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], " and ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423460340455604*^9, 3.4234603419399796`*^9}, { 3.4234606772066526`*^9, 3.423460677987908*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ 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"] }, Open ]], 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 ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " 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", CellChangeTimes->{{3.4234606830816903`*^9, 3.42346068381607*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ 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"] }, Open ]], 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 ", StyleBox["Table", FontVariations->{"Underline"->True}], " function we make the following three tables:" }], "Text", CellChangeTimes->{3.4233937552775893`*^9}, FontSlant->"Italic"], Cell[CellGroupData[{ 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"] }, Open ]], 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->DirectedInfinity[1]], 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->DirectedInfinity[1]], 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->DirectedInfinity[1]], 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 ", StyleBox["ChineseRemainder", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4214657959193597`*^9, 3.4214657983099847`*^9}, { 3.423463038985473*^9, 3.4234630510168*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"u", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "81", ",", "25"}], "}"}]}], "]"}]}], "\n", RowBox[{"v", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "81", ",", "25"}], "}"}]}], "]"}]}], "\n", RowBox[{"w", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "81", ",", "25"}], "}"}]}], "]"}]}]}], "Input"], Cell[BoxData["2025"], "Output"], Cell[BoxData["6400"], "Output"], Cell[BoxData["7776"], "Output"] }, Open ]], 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[ RowBox[{ SuperscriptBox["m", RowBox[{"(", "3", ")"}]], "=", RowBox[{ RowBox[{"4", "+", SuperscriptBox["2.5", "1"]}], "=", "14"}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "The final solution ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is given by:" }], "Text", FontSlant->"Italic"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{ RowBox[{"u", ".", SuperscriptBox["m", RowBox[{"(", "1", ")"}]]}], "+", RowBox[{"v", ".", SuperscriptBox["m", RowBox[{"(", "2", ")"}]]}], "+", RowBox[{"w", ".", SuperscriptBox["m", RowBox[{"(", "3", ")"}]]}]}], "\[Congruent]"}], TraditionalForm]]]], "DisplayFormula"], Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"2025", "*", "1"}], " ", "+", RowBox[{"6400", "*", "47"}], "+", RowBox[{"7776", "*", "14"}]}], ",", "8100"}], "]"}]], "Input"], Cell[BoxData["6689"], "Output"], Cell["This can easily be checked.", "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"6", ",", "6689", ",", "8101"}], "]"}]], "Input"], Cell[BoxData["7531"], "Output"], Cell[TextData[{ "In ", StyleBox["Mathematica,", FontSlant->"Italic"], " the precalculation of ", Cell[BoxData[ FormBox[ RowBox[{"a", ",", "b"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " is not really necessary, because ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " can be computed directly from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"(", "1", ")"}]], ",", SuperscriptBox["m", RowBox[{"(", "2", ")"}]]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SuperscriptBox["m", RowBox[{"(", "3", ")"}]], TraditionalForm]]], " with the ", StyleBox["ChineseRemainder", FontVariations->{"Underline"->True}], " function:" }], "Text", CellChangeTimes->{{3.4234630708763022`*^9, 3.423463073048191*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "47", ",", "14"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "81", ",", "25"}], "}"}]}], "]"}]], "Input"], Cell[BoxData["6689"], "Output"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " has large prime factors, the dominant term in the workload of the \ Pohlig-Hellman algorithm will be the ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["p", "i"]}], TraditionalForm]]], " exponentiations necessary for the generation of the tables ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", SubscriptBox["\[Omega]", "i"], ",", "\[Ellipsis]", ",", SuperscriptBox[ SubscriptBox["\[Omega]", "i"], RowBox[{ SubscriptBox["p", "i"], "-", "1"}]]}], "}"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", and the number ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["n", "i"]}], TraditionalForm]]], " of exponentiations, necessary to determine the ", Cell[BoxData[ FormBox[ SuperscriptBox["m", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "'s." }], "Text"], Cell[TextData[{ "In the next subsection, we shall explain a method to take logarithms if one \ (or more) of the prime power factors of ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " is too large to store the ", ButtonBox["tables", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Table PH"], " in the Pohlig-Hellman method." }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Baby-Step Giant-Step Method" }], "Subsection", CellTags->"SubSDiscr Baby Step"], Cell[TextData[{ "If one (or more) of the prime power factors of ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " is too large for the ", ButtonBox["Pohlig-Hellman method", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Pohlig Hellman"], ", the method below can be used. It gives the user full freedom to balance \ the length of the table that he wants to store and the remaining workfactor.\n\ We start with an example." }], "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 equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", "m"], "\[Congruent]", RowBox[{"30", " ", RowBox[{"(", RowBox[{"mod", " ", "97"}], ")"}]}]}], TraditionalForm]]], " and assume that we can only store a table with 10 field elements.\nWe make \ a table of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", "i"], " ", "mod", " ", "97"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", "=", "0"}], ",", "1", ",", "\[Ellipsis]", ",", "9"}], TraditionalForm]]], " and we compute ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", RowBox[{"-", "1"}]], " ", "mod", " ", "97"}], TraditionalForm]]], " with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Table", FontVariations->{"Underline"->True}], ",", ButtonBox[" ", BaseStyle->"Link", ButtonData->"paclet:ref/PowerMod"], StyleBox["PowerMod", FontVariations->{"Underline"->True}], ", ", StyleBox["GridBox", FontVariations->{"Underline"->True}], " and ", StyleBox["Transpose", FontVariations->{"Underline"->True}], ". " }], "Example", CellChangeTimes->{ 3.4233937611057515`*^9, {3.423395139880201*^9, 3.4233951517865267`*^9}, { 3.423460693800509*^9, 3.4234606960817738`*^9}, {3.423463146970539*^9, 3.4234631649237795`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"q", "=", "97"}], ";", RowBox[{"a", "=", "29"}], ";", RowBox[{"powers", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"29", ",", "i", ",", "q"}], "]"}], ",", "i"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"i", ",", "0", ",", "9"}], "}"}]}], "]"}]}], ";", RowBox[{ RowBox[{"GridBox", "[", RowBox[{ RowBox[{"Transpose", "[", "powers", "]"}], ",", RowBox[{"RowLines", "->", "True"}], ",", RowBox[{"ColumnLines", "->", "True"}]}], "]"}], " ", "//", " ", "DisplayForm"}]}], "\n", RowBox[{"x", " ", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{"-", "1"}], ",", "q"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[GridBox[{ {"1", "29", "65", "42", "54", "14", "18", "37", "6", "77"}, {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"} }, GridBoxDividers->{ "Columns" -> {False, {True}, False}, "ColumnsIndexed" -> {}, "Rows" -> {False, {True}, False}, "RowsIndexed" -> {}}], DisplayForm]], "Output"], Cell[BoxData["87"], "Output"] }, Open ]], Cell[TextData[{ "We also find that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", RowBox[{"-", "1"}]], " ", "\[Congruent]", " ", RowBox[{"87", " ", RowBox[{"(", RowBox[{"mod", " ", "97"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "Writing ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{"10", "j"}], "+", "i"}]}], TraditionalForm]]], ",", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", "9"}]}], TraditionalForm]]], ", we see that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", "m"], "\[Congruent]", RowBox[{"30", " ", RowBox[{"(", RowBox[{"mod", " ", "97"}], ")"}]}]}], TraditionalForm]]], " can be rewritten as ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", "i"], "\[Congruent]", RowBox[{ SuperscriptBox["30.29", RowBox[{ RowBox[{"-", "10."}], "j"}]], " ", RowBox[{"(", RowBox[{"mod", " ", "97"}], ")"}]}]}], TraditionalForm]]], " or as ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", "i"], "\[Congruent]", RowBox[{ SuperscriptBox["30.87", RowBox[{"10.", "j"}]], " ", RowBox[{"(", RowBox[{"mod", " ", "97"}], ")"}]}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["87", "10"], "\[Congruent]", RowBox[{"49", " ", RowBox[{"(", RowBox[{"mod", " ", "97"}], ")"}]}]}], TraditionalForm]]], ", we have the equivalent problem of solving ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", "i"], "\[Congruent]", RowBox[{ SuperscriptBox["30.49", "j"], " ", RowBox[{"(", RowBox[{"mod", " ", "97"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", "9"}], TraditionalForm]]], ".\nWe do this by trying ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"j", "=", "0"}], ",", "1", ",", "\[Ellipsis]"}], TraditionalForm]]], " and each time checking if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["30.49", "j"], " ", "mod", " ", "97"}], TraditionalForm]]], " occurs in the list of powers ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{"1", ",", "29", ",", SuperscriptBox["29", "2"], ",", "\[Ellipsis]", ",", SuperscriptBox["29", "9"]}], "}"}], " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "97"}], ")"}], "."}]}], TraditionalForm]]], " Note that ", Cell[BoxData[ FormBox[ RowBox[{"m", "<", "97"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"j", "\[LessEqual]", RowBox[{"\[LeftFloor]", RowBox[{"97", "/", "10"}], "\[RightFloor]"}]}], "=", "9"}], TraditionalForm]]], ".\nTo facilitate the table lookup, we sort the elements in the table of \ powers with the function ", StyleBox["Sort", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4233952773810806`*^9, 3.4233952805998516`*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"sortedpowers", "=", RowBox[{"Sort", "[", "powers", "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"GridBox", "[", RowBox[{ RowBox[{"Transpose", "[", "sortedpowers", "]"}], ",", RowBox[{"RowLines", "->", "True"}], ",", RowBox[{"ColumnLines", "->", "True"}]}], "]"}], " ", "//", " ", "DisplayForm"}]}], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[GridBox[{ {"1", "6", "14", "18", "29", "37", "42", "54", "65", "77"}, {"0", "8", "5", "6", "1", "7", "3", "4", "2", "9"} }, GridBoxDividers->{ "Columns" -> {False, {True}, False}, "ColumnsIndexed" -> {}, "Rows" -> {False, {True}, False}, "RowsIndexed" -> {}}], DisplayForm]], "Output"], Cell[TextData[{ "Next, we try ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["30.49", "j"], " ", "mod", " ", "97"}], TraditionalForm]]], " until we see the answer appear in the table above. We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["While", FontVariations->{"Underline"->True}], ", ", StyleBox["MemberQ", FontVariations->{"Underline"->True}], ", and ", StyleBox["Mod", FontVariations->{"Underline"->True}], ". We also print the corresponding column of the table of sorted powers (", Cell[BoxData[ FormBox["j", TraditionalForm]]], " has to be decreased by 1, because we started the numbering of ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " with 0)." }], "Text", CellChangeTimes->{ 3.4233959212133265`*^9, {3.423454467644562*^9, 3.423454469394562*^9}, { 3.423456387289843*^9, 3.423456389196191*^9}, 3.423463201502138*^9}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"j", "=", "0"}], ";"}], "\n", RowBox[{ RowBox[{"While", "[", RowBox[{ RowBox[{ RowBox[{"MemberQ", "[", RowBox[{"sortedpowers", ",", RowBox[{"{", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"30", "*", SuperscriptBox["49", "j"]}], ",", "97"}], "]"}], ",", "_"}], "}"}]}], "]"}], "==", "False"}], ",", RowBox[{"j", "=", RowBox[{"j", "+", "1"}]}]}], "]"}], ";"}], "\n", "j", "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"30", "*", SuperscriptBox["49", "j"]}], ",", "97"}], "]"}]}], "Input"], Cell[BoxData["4"], "Output"], Cell[BoxData["14"], "Output"] }, Open ]], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"j", "=", "4"}], TraditionalForm]]], " and that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["30.49", "j"], " ", "mod", " ", "97"}], TraditionalForm]]], " occurs in table as 14, which is ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", "5"], " ", "mod", " ", "97"}], TraditionalForm]]], " (hence ", Cell[BoxData[ FormBox[ RowBox[{"i", "=", "5"}], TraditionalForm]]], "). Indeed" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"30", "*", SuperscriptBox["49", "4"]}], ",", "97"}], "]"}], "==", RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["29", "5"], ",", "97"}], "]"}]}]], "Input"], Cell[BoxData["True"], "Output"], Cell[TextData[{ "It follows that ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{ RowBox[{"10", "j"}], "+", "i"}], "=", RowBox[{ RowBox[{"10.4", "+", "5"}], "=", "45"}]}]}], TraditionalForm]]], ". Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["29", "45"], "\[Congruent]", RowBox[{"30", " ", "mod", " ", "97"}]}], TraditionalForm]]], ", as can be easily checked with:" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"29", ",", "45", ",", "97"}], "]"}]], "Input"], Cell[BoxData["30"], "Output"], Cell["The above method will now be stated in full generality. ", "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox[" \t\tBaby-Step Giant-Step Method", FontWeight->"Bold"], "\nLet \[Alpha] be a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be a divisor of ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " (not necessarily prime) and define ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]]}], TraditionalForm]]], ". So, \[Omega] is a primitive ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-th root of unity. \nLet ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " be any ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-th root of unity. Then, for every (trade-off value) ", Cell[BoxData[ FormBox["t", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "t", "\[LessEqual]", "1"}], TraditionalForm]]], ", one can find the exponent ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"0", "\[LessEqual]", "m", "\[LessEqual]", RowBox[{"p", "-", "1"}]}], ","}], TraditionalForm]]], " satisfying\n\t\t", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"c", "=", SuperscriptBox["\[Beta]", "m"]}], BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], TraditionalForm]]], "\nwith an algorithm that uses\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["p", RowBox[{"1", "-", "t"}]], "(", RowBox[{"1", "+", RowBox[{ SubscriptBox["log", "2"], SuperscriptBox["p", "t"]}]}], ")"}], TraditionalForm]]], " \toperations,\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["p", "t"], ".", SubscriptBox["log", "2"]}], "q"}], TraditionalForm]]], " \t\tbits of memory space,\nand an initial calculation involving\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["p", "t"], ".", RowBox[{"(", RowBox[{"1", "+", RowBox[{ SubscriptBox["log", "2"], SuperscriptBox["p", "t"]}]}], ")"}]}], TraditionalForm]]], "\toperations." }], "Theorem", GeneratedCell->True, CellTags->"AlgDiscr Baby Giant"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"\[LeftCeiling]", SuperscriptBox["p", "t"], "\[RightCeiling]"}]}], TraditionalForm]]], ". We make a table of the successive powers ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Omega]", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"u", "-", "1"}]}], TraditionalForm]]], ". This requires ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[TildeTilde]", SuperscriptBox["p", "t"]}], TraditionalForm]]], " multiplications. \nNext, we sort this table in ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["p", "t"], SubscriptBox["log", "2"], SuperscriptBox["p", "t"]}], TraditionalForm]]], " operations, see ", ButtonBox["[Knut73]", BaseStyle->"Hyperlink", ButtonData:>"RefKnut73"], ", pp.184. Together this explains the number of operations in the \ precalculation.\nEach of the ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[TildeTilde]", SuperscriptBox["p", "t"]}], TraditionalForm]]], " field elements in the table needs ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], "q"}], TraditionalForm]]], " bits of memory space. This explains the memory requirement above." }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Define ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " by" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{"j", ".", "u"}], "+", "i"}]}], TraditionalForm]]], ", \t\t", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", "u", "\[TildeTilde]", SuperscriptBox["p", "t"]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["Observe that", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "j", "\[LessEqual]", FractionBox["m", "u"], "\[LessEqual]", FractionBox["p", "u"], "\[TildeTilde]", SuperscriptBox["p", RowBox[{"1", "-", "t"}]]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Of course solving ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", SuperscriptBox["\[Omega]", "m"]}], TraditionalForm]]], " is equivalent to finding ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["j", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", "u"}], TraditionalForm]]], ", satisfying " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "i"], "=", RowBox[{"c", ".", SuperscriptBox["\[Omega]", RowBox[{"-", RowBox[{"j", ".", "u"}]}]]}]}], TraditionalForm]]], ". " }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "To solve this equation, we simply compute ", Cell[BoxData[ FormBox[ RowBox[{"c", ".", SuperscriptBox["\[Omega]", RowBox[{"-", RowBox[{"l", ".", "u"}]}]]}], TraditionalForm]]], ", for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"l", "=", "0"}], ",", "1", ",", "\[Ellipsis]"}], TraditionalForm]]], " and check if the outcome appears in the table. This will happen when ", Cell[BoxData[ FormBox[ RowBox[{"l", "=", "j"}], TraditionalForm]]], ", so before ", Cell[BoxData[ FormBox[ RowBox[{"l", "=", RowBox[{"\[LeftCeiling]", SuperscriptBox["p", RowBox[{"1", "-", "t"}]]}]}], TraditionalForm]]], "\[RightCeiling] .\nFor each value of ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " we have to perform 1 multiplication and a table look-up, which costs \ another ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], SuperscriptBox["p", "t"]}], TraditionalForm]]], " operations. " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "For ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", RowBox[{"1", "/", "2"}]}], TraditionalForm]]], " this algorithm reduces to the ", Cell[BoxData[ FormBox[ SqrtBox["q"], TraditionalForm]]], " (both for memory and time complexity) ", ButtonBox["algorithm", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr Knuth q^1/2"], " that was mentioned at the end of Subsection 8.1.1." }], "Text"], Cell[TextData[{ "The two extreme cases of the algorithm are:\n", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "0"}], TraditionalForm]]], ":\tno table at all; all powers ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Beta]", ",", SuperscriptBox["\[Beta]", "2"], ",", "\[Ellipsis]"}], TraditionalForm]]], " need to be tried.\n", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "1"}], TraditionalForm]]], ";\tcomplete table of ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Beta]", ",", SuperscriptBox["\[Beta]", "2"], ",", "\[Ellipsis]", ",", SuperscriptBox["\[Beta]", RowBox[{"q", "-", "1"}]]}], TraditionalForm]]], "is present; only a single table look-up is needed." }], "Text"], Cell["\<\ Note that the product of computing time and bits of memory space in the above \ algorithm is more or less constant.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Pollard-\[Rho] Method" }], "Subsection", CellTags->"SubSDiscr Pollard"], Cell[TextData[{ "The time complexity of the Pollard-\[Rho] Method ", ButtonBox["[Poll78]", BaseStyle->"Hyperlink", ButtonData:>"RefPoll78"], " is the same as that of the ", ButtonBox["Baby-Step Giant-Step method", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Baby Step"], " explained in the previous section. The advantage lies in the minimal \ memory requirements. " }], "Text", GeneratedCell->True], Cell[TextData[{ "We shall explain the Pollard-\[Rho] Method for the special case of a \ multiplicative subgroup ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " of prime order. So, we want to solve ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "m", "<", "p"}], TraditionalForm]]], ", from the equation ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", SuperscriptBox["\[Alpha]", "m"]}], TraditionalForm]]], " (see ", ButtonBox["(8.1)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], "), where ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], " has order ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime, and where ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], " is some given ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-th ", ButtonBox["root of unity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], ". Note that ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " by ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ".." }], "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[" (Part 1)", FontWeight->"Bold", FontSlant->"Plain"], "\nTo avoid calculations in a finite field, we take for ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " the prime number 4679. Note that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", RowBox[{"2", "\[Times]", "2339"}]}], TraditionalForm]]], ". Further we observe that 11 is a primitive element of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "4679", ")"}], TraditionalForm]]], " and thus that ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{ SuperscriptBox["11", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2339"}]], "=", RowBox[{ SuperscriptBox["11", "2"], "=", "121"}]}]}], TraditionalForm]]], " is the generator of a multiplicative subgroup of order 2339. All these \ calculations can be easily checked with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["PrimeQ", FontVariations->{"Underline"->True}], ", ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], ", ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ButtonBox[",", BaseStyle->"Link", ButtonData->"paclet:ref/PowerMod"], " and ", StyleBox["MultiplicativeOrder", FontVariations->{"Underline"->True}], ". " }], "Example", CellChangeTimes->{{3.423206105453796*^9, 3.4232061209381714`*^9}, { 3.4232063027843037`*^9, 3.423206318722416*^9}, {3.4233972552062387`*^9, 3.423397262003157*^9}, {3.4234603472524796`*^9, 3.423460348111854*^9}, { 3.423460702378689*^9, 3.4234607031443186`*^9}, {3.423463223861656*^9, 3.42346324320553*^9}}, CellTags->"ExamDiscr Pollard"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"q", "=", "4679"}], ";", RowBox[{"PrimeQ", "[", "q", "]"}]}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"q", "-", "1"}], "]"}], "\n", RowBox[{"MultiplicativeOrder", "[", RowBox[{"11", ",", "q"}], "]"}], "\n", RowBox[{"PowerMod", "[", RowBox[{"11", ",", "2", ",", "q"}], "]"}], "\n", RowBox[{"MultiplicativeOrder", "[", RowBox[{"121", ",", "q"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2339", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData["4678"], "Output"], Cell[BoxData["121"], "Output"], Cell[BoxData["2339"], "Output"] }, Open ]], Cell["\<\ Further on, we shall continue with this example, when we want to solve the \ equation\ \>", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["121", "m"], "\[Congruent]", RowBox[{"3435", " ", RowBox[{"(", RowBox[{"mod", " ", "4679"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "Note that this equation must have a solution, since 3435 is indeed a \ 2339-th ", ButtonBox["root of unity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "4679", ")"}], TraditionalForm]]], ". Indeed, all 2339-th roots of unity are a zero of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2339"], "-", "1"}], TraditionalForm]]], " and by ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], " there are no other zeros of this polynomial." }], "Text", GeneratedCell->True, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"3435", ",", "2339", ",", "4679"}], "]"}]], "Input"], Cell[BoxData["1"], "Output"], Cell[TextData[{ "In order to solve ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", SuperscriptBox["\[Alpha]", "m"]}], TraditionalForm]]], ", we partition the multiplicative subgroup ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " of order ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", in three subsets ", Cell[BoxData[ FormBox[ SubscriptBox["G", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", "=", "0"}], ",", "1", ",", "2"}], TraditionalForm]]], ", as follows:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"x", "\[Element]", SubscriptBox["G", "i"]}], TraditionalForm]]], "\t\t\[DoubleLongLeftRightArrow]\t\t", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{"i", " ", RowBox[{"(", RowBox[{"mod", " ", "3"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "We define a sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " recursively by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "0"], "=", "1"}], TraditionalForm]]], " and " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", RowBox[{"i", "+", "1"}]], "=", RowBox[{ RowBox[{"f", "(", SubscriptBox["x", "i"], ")"}], "="}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{ SubsuperscriptBox["x", "i", "2"], " ", "mod", " ", "q"}], ")"}], ","}]}, {GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"c", ".", SubscriptBox["x", "i"]}], " ", "mod", " ", "q"}], ")"}], ","}]}, { RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"\[Alpha]", ".", SubscriptBox["x", "i"]}], " ", "mod", " ", "q"}], ")"}], ","}]} }]} }]}], TraditionalForm]]], " \t\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "0"]}], ","}]}, {GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "1"]}], ","}]}, { RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "2."]}]} }]} }], TraditionalForm]]] }], "NumberedEquation"], Cell[TextData[{ "With the sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " we associate two other sequences ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["b", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " in such a way that for all ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], " " }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "=", RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", "i"]], RowBox[{ SuperscriptBox["c", SubscriptBox["b", "i"]], "."}]}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "To this end, take ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "0"], "=", RowBox[{ SubscriptBox["b", "0"], "=", "0"}]}], TraditionalForm]]], " and use the recursions" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", RowBox[{"i", "+", "1"}]], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{"2", SubscriptBox["a", "i"], " ", "mod", " ", "p"}], ")"}], ","}]}, {GridBox[{ { RowBox[{ SubscriptBox["a", "i"], ","}]}, { RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["a", "i"], "+", RowBox[{"1", " ", "mod", " ", "p"}]}], ","}]}]} }]} }]}], TraditionalForm]]], " \t\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "0"]}], ","}]}, {GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "1"]}], ","}]}, { RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "2."]}]} }]} }], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", RowBox[{"i", "+", "1"}]], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{"2", SubscriptBox["b", "i"], " ", "mod", " ", "p"}], ")"}], ","}]}, {GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["b", "i"], "+", RowBox[{"1", " ", "mod", " ", "p"}]}], ")"}], ","}]}, { RowBox[{ SubscriptBox["b", "i"], ","}]} }]} }]}], TraditionalForm]]], " \t\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "0"]}], ","}]}, {GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "1"]}], ","}]}, { RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "i"]}], "\[Element]", SubscriptBox["G", "2."]}]} }]} }], TraditionalForm]]] }], "DisplayFormula"], Cell["Note that by induction ", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["x", RowBox[{"i", "+", "1"}]], "=", RowBox[{ SubsuperscriptBox["x", "i", "2"], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", "i"]], SuperscriptBox["c", SubscriptBox["b", "i"]]}], ")"}], "2"], "=", RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"2", SubscriptBox["a", "i"]}]], SuperscriptBox["c", RowBox[{"2", SubscriptBox["b", "i"]}]]}], "=", RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", RowBox[{"i", "+", "1"}]]], SuperscriptBox["c", SubscriptBox["b", RowBox[{"i", "+", "1"}]]]}]}]}]}]}], ","}], TraditionalForm]]], " if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "\[Element]", SubscriptBox["G", "0"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", RowBox[{"i", "+", "1"}]], "=", RowBox[{ RowBox[{"c", ".", SubscriptBox["x", "i"]}], "=", RowBox[{ RowBox[{ RowBox[{"c", ".", SuperscriptBox["\[Alpha]", SubscriptBox["a", "i"]]}], SuperscriptBox["c", SubscriptBox["b", "i"]]}], "=", RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ SubscriptBox["a", "i"], "+", "1"}]], SuperscriptBox["c", SubscriptBox["b", "i"]]}], "=", RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", RowBox[{"i", "+", "1"}]]], SuperscriptBox["c", SubscriptBox["b", RowBox[{"i", "+", "1"}]]]}]}]}]}]}], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "\[Element]", SubscriptBox["G", "1"]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", RowBox[{"i", "+", "1"}]], "=", RowBox[{ RowBox[{"\[Alpha]", ".", SubscriptBox["x", "i"]}], "=", RowBox[{ RowBox[{ RowBox[{"\[Alpha]", ".", SuperscriptBox["\[Alpha]", SubscriptBox["a", "i"]]}], SuperscriptBox["c", SubscriptBox["b", "i"]]}], "=", RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", "i"]], SuperscriptBox["c", RowBox[{ SubscriptBox["b", "i"], "+", "1"}]]}], "=", RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", RowBox[{"i", "+", "1"}]]], SuperscriptBox["c", SubscriptBox["b", RowBox[{"i", "+", "1"}]]]}]}]}]}]}], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "\[Element]", SubscriptBox["G", "2"]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "As soon as we have two distinct indices ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "=", SubscriptBox["x", "j"]}], TraditionalForm]]], " we are done, because this would imply that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", "i"]], SuperscriptBox["c", SubscriptBox["b", "i"]]}], "=", RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", "j"]], SuperscriptBox["c", SubscriptBox["b", "j"]]}]}], TraditionalForm]]], " and thus that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ SubscriptBox["a", "i"], "-", SubscriptBox["a", "j"]}]], "=", SuperscriptBox["c", RowBox[{ SubscriptBox["b", "j"], "-", SubscriptBox["b", "i"]}]]}], TraditionalForm]]], ". Provided that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", "i"], "\[NotEqual]", SubscriptBox["b", "j"]}], TraditionalForm]]], ", we have found the solution ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["a", "j"], "-", SubscriptBox["a", "i"]}], ")"}], "/", RowBox[{"(", RowBox[{ SubscriptBox["b", "i"], "-", SubscriptBox["b", "j"]}], ")"}]}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ".\nIf ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", "i"], "=", SubscriptBox["b", "j"]}], TraditionalForm]]], ", which happens with negligible probability, we put ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "'"}], "=", RowBox[{"c", ".", "\[Alpha]"}]}], TraditionalForm]]], " and solve ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "'"}], "=", SuperscriptBox["\[Alpha]", RowBox[{"m", "'"}]]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "'"}], "=", RowBox[{"m", "+", "1"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "To find indices ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "=", SubscriptBox["x", "j"]}], TraditionalForm]]], ", we follow ", StyleBox["Floyd's cycle-finding algorithm", FontSlant->"Italic"], ": find an index ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "=", SubscriptBox["x", RowBox[{"2", "i"}]]}], TraditionalForm]]], " (so, take ", Cell[BoxData[ FormBox[ RowBox[{"j", "=", RowBox[{"2", "i"}]}], TraditionalForm]]], "). \nTo this end, we start with the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["x", "2"]}], ")"}], TraditionalForm]]], ", calculate ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["x", "2"], ",", SubscriptBox["x", "4"]}], ")"}], TraditionalForm]]], ", then ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["x", "3"], ",", SubscriptBox["x", "6"]}], ")"}], TraditionalForm]]], ", and so on, each time calculating ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["x", RowBox[{"i", "+", "1"}]], ",", SubscriptBox["x", RowBox[{ RowBox[{"2", "i"}], "+", "2"}]]}], ")"}], TraditionalForm]]], " from the previously calculated ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["x", "i"], ",", SubscriptBox["x", RowBox[{"2", "i"}]]}], ")"}], TraditionalForm]]], " by the defining rules ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", RowBox[{"i", "+", "1"}]], "=", RowBox[{"f", "(", SubscriptBox["x", "i"], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", RowBox[{ RowBox[{"2", "i"}], "+", "2"}]], "=", RowBox[{ SuperscriptBox["f", "2"], "(", SubscriptBox["x", RowBox[{"2", "i"}]], ")"}]}], TraditionalForm]]], " In this way, huge storage requirements can be avoided. " }], "Text", CellTags->"DefDiscr Floyd"], Cell[TextData[{ StyleBox["Example 8.9 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nWe continue with ", ButtonBox["Example 8.9", BaseStyle->"Hyperlink", ButtonData:>"ExamDiscr Pollard"], ". Hence, we have ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "4679"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", "121"}], TraditionalForm]]], ", an element of (prime) order ", Cell[BoxData[ FormBox[ RowBox[{"p", "="}], TraditionalForm]]], "2339, and ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "3435"}], TraditionalForm]]], ". I.e. we have the equation:" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["121", "m"], "\[Congruent]", RowBox[{"3435", " ", RowBox[{"(", RowBox[{"mod", " ", "4679"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "The recurrence relation for the ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " sequence can be evaluated by means of the ", StyleBox["Which", FontVariations->{"Underline"->True}], " and ", StyleBox["Mod", FontVariations->{"Underline"->True}], " functions." }], "Text", CellChangeTimes->{ 3.4233959308227625`*^9, {3.423456176044653*^9, 3.423456177200962*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"RecX", "[", RowBox[{"x_", ",", "alp_", ",", "c_", ",", "q_"}], "]"}], ":=", " ", RowBox[{"Which", "[", " ", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{"x", ",", "3"}], "]"}], "==", "0"}], ",", RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["x", "2"], ",", "q"}], "]"}], ",", " ", RowBox[{ RowBox[{"Mod", "[", RowBox[{"x", ",", " ", "3"}], "]"}], "==", "1"}], ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"c", "*", "x"}], ",", "q"}], "]"}], ",", RowBox[{ RowBox[{"Mod", "[", RowBox[{"x", ",", "3"}], "]"}], "==", "2"}], ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"alp", "*", "x"}], ",", "q"}], "]"}]}], " ", "]"}]}]], "Input"], Cell[TextData[{ "The smallest index ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "1"}], TraditionalForm]]], ", satisfying ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "=", SubscriptBox["x", RowBox[{"2", "i"}]]}], TraditionalForm]]], " can quite easily be found with the help of the ", StyleBox["While", FontVariations->{"Underline"->True}], " function." }], "Text", CellChangeTimes->{{3.4234544778789372`*^9, 3.4234544794101872`*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"alp", "=", "121"}], ";", RowBox[{"c", "=", "3435"}], ";", RowBox[{"q", "=", "4679"}], ";"}], "\n", RowBox[{ RowBox[{"x1", "=", RowBox[{"RecX", "[", RowBox[{"1", ",", "alp", ",", "c", ",", "q"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"x2", "=", RowBox[{"RecX", "[", RowBox[{"x1", ",", "alp", ",", "c", ",", "q"}], "]"}]}], ";", RowBox[{"i", "=", "1"}], ";"}], "\n", RowBox[{ RowBox[{"While", "[", RowBox[{ RowBox[{"x1", "!=", "x2"}], ",", RowBox[{ RowBox[{"x1", "=", RowBox[{"RecX", "[", RowBox[{"x1", ",", "alp", ",", "c", ",", "q"}], "]"}]}], ";", RowBox[{"x2", "=", RowBox[{"RecX", "[", RowBox[{ RowBox[{"RecX", "[", RowBox[{"x2", ",", "alp", ",", "c", ",", "q"}], "]"}], ",", "alp", ",", "c", ",", "q"}], "]"}]}], ";", RowBox[{"i", "=", RowBox[{"i", "+", "1"}]}]}]}], "]"}], ";"}], "\n", "i"}], "Input", GeneratedCell->True], Cell[BoxData["76"], "Output"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "76"], "=", SubscriptBox["x", "152"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["a", "152"], "-", SubscriptBox["a", "76"]}], ")"}], "/", RowBox[{"(", RowBox[{ SubscriptBox["b", "76"], "-", SubscriptBox["b", "152"]}], ")"}]}], " ", RowBox[{"(", RowBox[{"mod", " ", "2339"}], ")"}]}]}], TraditionalForm]]], ". However, above we did not update the values of the sequences ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], ". We will do that now." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"RecurrDef", "[", RowBox[{"{", RowBox[{"x_", ",", "a_", ",", "b_"}], "}"}], "]"}], ":=", RowBox[{"Which", "[", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{"x", ",", "3"}], "]"}], "==", "0"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["x", "2"], ",", "q"}], "]"}], ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"2", "a"}], ",", "p"}], "]"}], ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"2", "b"}], ",", "p"}], "]"}]}], "}"}], ",", "\t\t", RowBox[{ RowBox[{"Mod", "[", RowBox[{"x", ",", "3"}], "]"}], "==", "1"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"c", "*", "x"}], ",", "q"}], "]"}], " ", ",", "a", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"b", "+", "1"}], ",", "p"}], "]"}]}], "}"}], ",", "\t\t", RowBox[{ RowBox[{"Mod", "[", RowBox[{"x", ",", "3"}], "]"}], "==", "2"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"alp", "*", "x"}], ",", "q"}], "]"}], ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", "+", "1"}], ",", "p"}], "]"}], ",", "b"}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.423395940213448*^9, 3.4233959408697023`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"alp", "=", "121"}], ";", RowBox[{"c", "=", "3435"}], ";", RowBox[{"q", "=", "4679"}], ";", RowBox[{"p", "=", "2339"}], ";"}], "\n", RowBox[{ RowBox[{"x1", "=", "1"}], ";", RowBox[{"a1", "=", "0"}], ";", RowBox[{"b1", "=", "0"}], ";"}], "\n", RowBox[{ RowBox[{"x2", "=", "1"}], ";", RowBox[{"a2", "=", "0"}], ";", RowBox[{"b2", "=", "0"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x1", ",", "a1", ",", "b1"}], "}"}], "=", RowBox[{"RecurrDef", "[", RowBox[{"{", RowBox[{"x1", ",", "a1", ",", "b1"}], "}"}], "]"}]}], ";", RowBox[{"i", "=", "1"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x2", ",", "a2", ",", "b2"}], "}"}], "=", RowBox[{"RecurrDef", "[", RowBox[{"RecurrDef", "[", RowBox[{"{", RowBox[{"x2", ",", "a2", ",", "b2"}], "}"}], "]"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"While", "[", RowBox[{ RowBox[{"x1", "!=", "x2"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x1", ",", "a1", ",", "b1"}], "}"}], "=", RowBox[{"RecurrDef", "[", RowBox[{"{", RowBox[{"x1", ",", "a1", ",", "b1"}], "}"}], "]"}]}], ";", "\t\t", RowBox[{ RowBox[{"{", RowBox[{"x2", ",", "a2", ",", "b2"}], "}"}], "=", RowBox[{"RecurrDef", "[", RowBox[{"RecurrDef", "[", RowBox[{"{", RowBox[{"x2", ",", "a2", ",", "b2"}], "}"}], "]"}], "]"}]}], ";", RowBox[{"i", "=", RowBox[{"i", "+", "1"}]}]}]}], "]"}], ";"}], "\n", RowBox[{"Print", "[", RowBox[{"\"\\"", ",", "i"}], "]"}], "\n", RowBox[{ RowBox[{"Print", "[", RowBox[{ "\"\<\!\(\*SubscriptBox[\(x\), \(i\)]\)\>\"", ",", "x1", ",", "\"\<, \!\(\*SubscriptBox[\(a\), \(i\)]\)=\>\"", ",", "a1", ",", "\"\<, \!\(\*SubscriptBox[\(b\), \(i\)]\)=\>\"", ",", "b1"}], "]"}], ";"}], "\n", RowBox[{ RowBox[{"Print", "[", RowBox[{ "\"\<\!\(\*SubscriptBox[\(x\), \(2. i\)]\)=\>\"", ",", "x2", ",", "\"\<, \!\(\*SubscriptBox[\(a\), \(2. i\)]\)=\>\"", ",", "a2", ",", "\"\<, \!\(\*SubscriptBox[\(b\), \(2. i\)]\)=\>\"", ",", "b2"}], "]"}], ";"}]}], "Input"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"i=\"\>", "\[InvisibleSpace]", "76"}], SequenceForm["i=", 76], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"\\!\\(x\\_i\\)\"\>", "\[InvisibleSpace]", "492", "\[InvisibleSpace]", "\<\", \\!\\(a\\_i\\)=\"\>", "\[InvisibleSpace]", "84", "\[InvisibleSpace]", "\<\", \\!\\(b\\_i\\)=\"\>", "\[InvisibleSpace]", "2191"}], SequenceForm["\!\(x\_i\)", 492, ", \!\(a\_i\)=", 84, ", \!\(b\_i\)=", 2191], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"\\!\\(x\\_\\(2. i\\)\\)=\"\>", "\[InvisibleSpace]", "492", "\[InvisibleSpace]", "\<\", \\!\\(a\\_\\(2. i\\)\\)=\"\>", "\[InvisibleSpace]", "286", "\[InvisibleSpace]", "\<\", \\!\\(b\\_\\(2. i\\)\\)=\"\>", "\[InvisibleSpace]", "915"}], SequenceForm[ "\!\(x\_\(2. i\)\)=", 492, ", \!\(a\_\(2. i\)\)=", 286, ", \!\(b\_\(2. i\)\)=", 915], Editable->False]], "Print"] }, Open ]], Cell[TextData[{ "Indeed, the relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", "i"]], SuperscriptBox["c", SubscriptBox["b", "i"]]}], TraditionalForm]]], " gives the same value for", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"i", "=", "76"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"i", "=", RowBox[{"2", "\[Times]", "76"}]}], TraditionalForm]]], ": " }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"alp", ",", "a1", ",", "q"}], "]"}], "*", RowBox[{"PowerMod", "[", RowBox[{"c", ",", "b1", ",", "q"}], "]"}]}], ",", "q"}], "]"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"alp", ",", "a2", ",", "q"}], "]"}], "*", RowBox[{"PowerMod", "[", RowBox[{"c", ",", "b2", ",", "q"}], "]"}]}], ",", "q"}], "]"}]}], "Input"], Cell[BoxData["492"], "Output"], Cell[BoxData["492"], "Output"] }, Open ]], Cell[TextData[{ "The solution ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["121", "m"], "\[Congruent]", RowBox[{"3435", " ", RowBox[{"(", RowBox[{"mod", " ", "4679"}], ")"}]}]}], TraditionalForm]]], " can now be determined from ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"286", "-", "84"}], ")"}], "/", RowBox[{"(", RowBox[{"2191", "-", "915"}], ")"}]}], " ", RowBox[{"(", RowBox[{"mod", " ", "2339"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"m", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"a2", "-", "a1"}], ")"}], "*", " ", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"b1", "-", "b2"}], ",", RowBox[{"-", "1"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}]}]], "Input"], Cell[BoxData["1111"], "Output"], Cell[TextData[{ "That ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "1111"}], TraditionalForm]]], " is indeed the solution can be checked with" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"alp", ",", "1111", ",", "q"}], "]"}], "==", "c"}]], "Input"], Cell[BoxData["True"], "Output"], Cell[TextData[{ "The \[Rho] in the name of this algorithm reflects the shape of the ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "-sequence: after a while it starts cycling around. The memory requirements \ of Floyd's cycle finding algorithm are indeed minimal. The expected running \ time is ", Cell[BoxData[ FormBox[ SqrtBox["p"], TraditionalForm]]], ". For further details, the reader is referred to ", ButtonBox["[Poll78]", BaseStyle->"Hyperlink", ButtonData:>"RefPoll78"], "." }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Index-Calculus Method" }], "Subsection", CellTags->"SubSDiscr Index Calc"], Cell[CellGroupData[{ Cell["General Discussion", "Subsubsection", CellTags->"SubsubsDiscr Index general"], Cell[TextData[{ "To describe the index-calculus method in general we consider a ", ButtonBox["cyclic group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of order N generated by an element ", Cell[BoxData[ FormBox["g", TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"G", "=", RowBox[{"{", RowBox[{"e", ",", "g", ",", SuperscriptBox["g", "2"], ",", "\[Ellipsis]", ",", SuperscriptBox["g", RowBox[{"N", "-", "1"}]]}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", "N"], "=", "e"}], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "In this setting we want to solve ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", "m"], "=", "h"}], TraditionalForm]]], " (see ", ButtonBox["(8.1)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], ") for a given ", Cell[BoxData[ FormBox[ RowBox[{"h", "\[Element]", "G"}], TraditionalForm]]], ". " }], "Text"], Cell["\<\ The basic idea of the index-calculus method consists of the following steps:\ \>", "Text"], Cell[TextData[{ StyleBox["1)", FontWeight->"Bold"], " Select an appropriate subset ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " with the property that a large proportion of the elements of", Cell[BoxData[ FormBox[ RowBox[{" ", "G"}], TraditionalForm]]], " can be expressed as a product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " in an efficient way. This set ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is called the ", StyleBox["factor base", FontSlant->"Italic"], ". An element ", Cell[BoxData[ FormBox[ RowBox[{"g", "\[Element]", "G"}], TraditionalForm]]], " that can be expressed as a product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is called ", StyleBox["smooth", FontSlant->"Italic"], " with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " be the size of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". In the next two steps each element in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " will be written as a power of ", Cell[BoxData[ FormBox["g", TraditionalForm]]], ". " }], "Text", CellTags->"DefDiscr factor base"], Cell[TextData[{ StyleBox["2)", FontWeight->"Bold"], " Find a sufficiently large collection ", Cell[BoxData[ FormBox["I", TraditionalForm]]], " of exponents ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " with the property that each ", Cell[BoxData[ FormBox[ SuperscriptBox["g", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[Element]", "I"}], TraditionalForm]]], ", can be expressed efficiently as a product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", say ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", "i"], "=", RowBox[{ SubscriptBox[ SubsuperscriptBox["s", "1", "u"], RowBox[{"i", ",", "1"}]], SubscriptBox[ SubsuperscriptBox["s", "2", "u"], RowBox[{"i", ",", "2"}]], " ", "\[Ellipsis]", " ", SubscriptBox[ SubsuperscriptBox["s", "k", "u"], RowBox[{"i", ",", "k"}]]}]}], TraditionalForm]]], ". Taking the ", Cell[BoxData[ FormBox[ SubscriptBox["log", "g"], TraditionalForm]]], " of both hands, we get a set of ", ButtonBox["linear congruence relations", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Congr Rel"] }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"i", "\[Congruent]", RowBox[{ RowBox[{ SubscriptBox["u", RowBox[{"i", ",", "1"}]], SubscriptBox["log", "g"], SubscriptBox["s", "1"]}], "+", RowBox[{ SubscriptBox["u", RowBox[{"i", ",", "2"}]], SubscriptBox["log", "g"], SubscriptBox["s", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["u", RowBox[{"i", ",", "k"}]], SubscriptBox["log", "g"], SubscriptBox["s", "k"], " ", RowBox[{"(", RowBox[{"mod", " ", "N"}], ")"}]}]}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"i", "\[Element]", "I"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ StyleBox["3)", FontWeight->"Bold"], " Treating the numbers ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "g"], SubscriptBox["s", "j"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", "k"}], TraditionalForm]]], ", as unknowns, solve the above system of linear congruence relations (for \ this, the system of linear congruence relations has to have rank ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " and the set ", Cell[BoxData[ FormBox["I", TraditionalForm]]], " will have to be sufficiently large)." }], "Text"], Cell[TextData[{ StyleBox["4)", FontWeight->"Bold"], " Pick a random exponent ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " and try to express ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", "r"], "h"}], TraditionalForm]]], " as a product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". As soon as this has happened, say ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["g", "r"], ".", "h"}], "=", RowBox[{ SubscriptBox[ SubsuperscriptBox["s", "1", "v"], "1"], SubscriptBox[ SubsuperscriptBox["s", "2", "v"], "2"], SubscriptBox[ SubsuperscriptBox["\[Ellipsis]s", "k", "v"], "k"]}]}], TraditionalForm]]], ", we again take the ", Cell[BoxData[ FormBox[ SubscriptBox["log", "g"], TraditionalForm]]], " of both hands and get " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"r", "+", "m"}], "\[Congruent]", RowBox[{ RowBox[{ SubscriptBox["v", "1"], SubscriptBox["log", "g"], SubscriptBox["s", "1"]}], "+", RowBox[{ SubscriptBox["v", "2"], SubscriptBox["log", "g"], SubscriptBox["s", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["v", "k"], SubscriptBox["log", "g"], SubscriptBox["s", "k"]}]}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"mod", " ", "N"}], ")"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Since the values of each ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "g"], SubscriptBox["s", "i"]}], TraditionalForm]]], " has already been determined in Step 3 and ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " was chosen, ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " can be determined from this congruence relation." }], "Text"], Cell["\<\ Note that Steps 2 and 3 aim to solve the logarithm problem for all the \ elements in the factor base. Step 4 tries to reduce the current logarithm \ problem to the factor base elements.\ \>", "Text"], Cell[TextData[{ "It may be clear that the optimal size of the factor base ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is a compromise between manageable storage requirements and the \ probability that a random element in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " (namely ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", "r"], "h"}], TraditionalForm]]], ") can be expressed as a product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". " }], "Text"], Cell["\<\ In general, there are two (related) unresolved problems in the above \ approach.\ \>", "Text"], Cell[TextData[{ "\[FilledSmallCircle] How can one determine a good factor base?\n\ \[FilledSmallCircle] How does one express an element in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " as product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "?" }], "Text"], Cell["\<\ In the next subsubsections we demonstrate the above method for two special \ cases where more can be said about the above two questions.\ \>", "Text"], Cell[TextData[StyleBox["Complexity", FontVariations->{"Underline"->True}]], "Text"], Cell[TextData[{ "There are many variations of the index-calculus method. Typically, their \ complexity grows subexponential in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], "N"}], TraditionalForm]]], ", while the methods described in Subsections 8.3.1, 8.3.2, and 8.3.3 are \ all exponential in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], "N"}], TraditionalForm]]], "." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ " ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "*"], TraditionalForm]]], ", i.e. the Multiplicative Group of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]] }], "Subsubsection", CellTags->"SubsubsDiscr Index Mod p"], Cell[TextData[{ "In this case, ", Cell[BoxData[ FormBox[ RowBox[{"G", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", RowBox[{"p", "-", "1"}]}], "}"}]}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " be a generator of this group. " }], "Text"], Cell[TextData[{ StyleBox["Choice of the factor base", FontVariations->{"Underline"->True}], " ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ": the first ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " prime numbers, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "k"]}], TraditionalForm]]], ".\nIf ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is sufficiently big, a large proportion of the elements in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " can be expressed as product of powers of these ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " primes, i.e. they will be ", ButtonBox["smooth", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Technique", FontVariations->{"Underline"->True}], " to express an element in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " as product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ": divide the element by the ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], "'s." }], "Text"], Cell[TextData[StyleBox["Complexity", FontVariations->{"Underline"->True}]], "Text"], Cell[TextData[{ "Adleman in ", ButtonBox["[Adle79]", BaseStyle->"Hyperlink", ButtonData:>"RefAdle79"], " analyzes this technique in detail and arrives at a complexity of" }], "Text", GeneratedCell->True], Cell[TextData[Cell[BoxData[ FormBox[ SuperscriptBox["exp", RowBox[{"C", SqrtBox[ RowBox[{"ln", " ", "p", " ", "lnln", " ", "p"}]]}]], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "for some constant ", Cell[BoxData[ FormBox["C", 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 ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "541", "*"], TraditionalForm]]], " with primitive element ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", "2"}], TraditionalForm]]], ". That 541 is prime and that 2 is a primitive element can be checked with \ the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["PrimeQ", FontVariations->{"Underline"->True}], ", ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], ", and ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ". Indeed, the order of 2 divides ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "541", "*"], "|"}], "=", "540"}], TraditionalForm]]], " by ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ", therefore, we only have to check that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "d"}]], "\[NotCongruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "541"}], ")"}]}]}], TraditionalForm]]], " for the divisors of ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "541"}], TraditionalForm]]], "." }], "Example", CellChangeTimes->{ 3.423397292550228*^9, {3.4234603524712296`*^9, 3.4234603532524796`*^9}, { 3.4234607112224956`*^9, 3.4234607120037503`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "541"}], ";", RowBox[{"PrimeQ", "[", "p", "]"}]}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"p", "-", "1"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}]}], "}"}]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"PowerMod", "[", RowBox[{"2", ",", RowBox[{ RowBox[{"(", RowBox[{"541", "-", "1"}], ")"}], "/", "2"}], ",", "p"}], "]"}], "\n", RowBox[{"PowerMod", "[", RowBox[{"2", ",", RowBox[{ RowBox[{"(", RowBox[{"541", "-", "1"}], ")"}], "/", "3"}], ",", "p"}], "]"}], "\n", RowBox[{"PowerMod", "[", RowBox[{"2", ",", RowBox[{ RowBox[{"(", RowBox[{"541", "-", "1"}], ")"}], "/", "5"}], ",", "p"}], "]"}]}], "Input"], Cell[BoxData["540"], "Output"], Cell[BoxData["129"], "Output"], Cell[BoxData["48"], "Output"] }, Open ]], Cell[TextData[{ "As ", ButtonBox["factor base", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " we take the set of the first five prime numbers, which can be generated \ with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Prime", FontVariations->{"Underline"->True}], " and ", StyleBox["Table", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{ 3.4233937664964113`*^9, {3.4233973640506854`*^9, 3.42339736712883*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"Table", "[", RowBox[{ RowBox[{"Prime", "[", "i", "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "5"}], "}"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"2", ",", "3", ",", "5", ",", "7", ",", "11"}], "}"}]], "Output"], Cell[TextData[{ "We want to write each of the elements in this factor base as a power of ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", "2"}], TraditionalForm]]], ", i.e. we want to solve the logarithm problem for the elements in the \ factor base. To this end, we try to find powers of ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", "2"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SuperscriptBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "541"], "*"], TraditionalForm]]], " that can be expressed as product of elements in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"2", ",", "3", ",", "5", ",", "7", ",", "11"}], "}"}], TraditionalForm]]], ". For this, we can use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], " and ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ". When trying " }], "Text", CellChangeTimes->{{3.4234603575337296`*^9, 3.4234603588774796`*^9}, { 3.4234607170350327`*^9, 3.4234607177850375`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "541"}], ";", RowBox[{"try", "=", RowBox[{"PowerMod", "[", RowBox[{"2", ",", "102", ",", "p"}], "]"}]}]}], "\n", RowBox[{"FactorInteger", "[", "try", "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["136"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"17", ",", "1"}], "}"}]}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ "we see that we have no complete factorization in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"2", ",", "3", ",", "5", ",", "7", ",", "11"}], "}"}], TraditionalForm]]], ". \nAfter some trial and error we did find the elements ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "14"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "81"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "207"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "214"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "300"], TraditionalForm]]], " achieving our goal." }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "541"}], ";", RowBox[{"FactorInteger", "[", RowBox[{"PowerMod", "[", RowBox[{"2", ",", "14", ",", "p"}], "]"}], "]"}]}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"PowerMod", "[", RowBox[{"2", ",", "81", ",", "p"}], "]"}], "]"}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"PowerMod", "[", RowBox[{"2", ",", "207", ",", "p"}], "]"}], "]"}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"PowerMod", "[", RowBox[{"2", ",", "214", ",", "p"}], "]"}], "]"}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"PowerMod", "[", RowBox[{"2", ",", "300", ",", "p"}], "]"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"11", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "2"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"5", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"11", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "5"}], "}"}], ",", RowBox[{"{", RowBox[{"11", ",", "1"}], "}"}]}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ "Writing ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "=", RowBox[{ SubscriptBox["log", "2"], "2"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "=", RowBox[{ SubscriptBox["log", "2"], "3"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "3"], "=", RowBox[{ SubscriptBox["log", "2"], "5"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "4"], "=", RowBox[{ SubscriptBox["log", "2"], "7"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "5"], "=", RowBox[{ SubscriptBox["log", "2"], "11"}]}], TraditionalForm]]], " and taking the logarithms on both sides gives five linear congruence \ relations in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], ",", SubscriptBox["m", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["m", "5"]}], TraditionalForm]]], ". \nFor example, ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ SuperscriptBox["2", "207"], "\[Congruent]"}], TraditionalForm], SuperscriptBox["5", "2"], SuperscriptBox[".11", "1"], " ", "mod", " ", "541"}], TraditionalForm]]], " can be rewritten as " }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "207"], "\[Congruent]", RowBox[{ SuperscriptBox["2", RowBox[{"2.", SubscriptBox["log", "2"], "5"}]], SuperscriptBox["2", RowBox[{"1.", SubscriptBox["log", "2"], "11"}]]}], "\[Congruent]", RowBox[{ SuperscriptBox["2", RowBox[{"2", SubscriptBox["m", "3"]}]], SuperscriptBox["2", SubscriptBox["m", "5"]], " ", "mod", " ", "541"}]}], TraditionalForm]]], ". " }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "Taking ", Cell[BoxData[ FormBox[ SubscriptBox["log", "2"], TraditionalForm]]], " on both sides gives the congruence relation " }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"207", "\[Congruent]", RowBox[{ RowBox[{"2", SubscriptBox["m", "3"]}], "+", RowBox[{ SubscriptBox["m", "5"], " ", "mod", " ", "540"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell["So, we have:", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"14", "\[Congruent]", RowBox[{ SubscriptBox["m", "1"], "+", SubscriptBox["m", "4"], "+", RowBox[{ SubscriptBox["m", "5"], " ", RowBox[{"(", RowBox[{"mod", " ", "540"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"81", "\[Congruent]", RowBox[{ SubscriptBox["m", "1"], "+", SubscriptBox["m", "2"], "+", RowBox[{"2", SubscriptBox["m", "4"], " ", RowBox[{"(", RowBox[{"mod", " ", "540"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"207", "\[Congruent]", RowBox[{ RowBox[{"2", SubscriptBox["m", "3"]}], "+", RowBox[{ SubscriptBox["m", "5"], " ", RowBox[{"(", RowBox[{"mod", " ", "540"}], ")"}]}]}]}], TraditionalForm]]], ",\n2", Cell[BoxData[ FormBox[ RowBox[{"14", "\[Congruent]", RowBox[{ SubscriptBox["m", "3"], "+", RowBox[{ SubscriptBox["m", "4"], " ", RowBox[{"(", RowBox[{"mod", " ", "540"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"300", "\[Congruent]", RowBox[{ RowBox[{"5", SubscriptBox["m", "1"]}], "+", RowBox[{ SubscriptBox["m", "5"], " ", RowBox[{"(", RowBox[{"mod", " ", "540"}], ")"}]}]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "The above system of linear congruence relations can be solved with the ", StyleBox["Solve", FontVariations->{"Underline"->True}], " function:" }], "Text", CellChangeTimes->{{3.42339549989813*^9, 3.423395502570022*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"m1", "=."}], ";", RowBox[{"m2", "=."}], ";", RowBox[{"m3", "=."}], ";", RowBox[{"m4", "=."}], ";", RowBox[{"m5", "=."}], ";"}], "\n", RowBox[{"Solve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"m1", "+", "m4", "+", "m5"}], "==", "14"}], " ", ",", RowBox[{ RowBox[{"m1", "+", "m2", "+", RowBox[{"2", "*", "m4"}]}], "==", "81"}], ",", RowBox[{ RowBox[{ RowBox[{"2", "*", "m3"}], "+", "m5"}], "==", "207"}], ",", RowBox[{ RowBox[{"m3", "+", "m4"}], "==", "214"}], ",", RowBox[{ RowBox[{ RowBox[{"5", "m1"}], "+", "m5"}], "==", "300"}], ",", RowBox[{"Modulus", "==", "540"}]}], "}"}], ",", RowBox[{"{", RowBox[{"m1", ",", "m2", ",", "m3", ",", "m4", ",", "m5"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "540"}], ",", RowBox[{"m2", "\[Rule]", "104"}], ",", RowBox[{"m3", "\[Rule]", "496"}], ",", RowBox[{"m1", "\[Rule]", "1"}], ",", RowBox[{"m4", "\[Rule]", "258"}], ",", RowBox[{"m5", "\[Rule]", "295"}]}], "}"}], "}"}]], "Output"], Cell["So, we know that ", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "=", RowBox[{ RowBox[{ SubscriptBox["log", "2"], "2"}], "=", "1"}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "=", RowBox[{ RowBox[{ SubscriptBox["log", "2"], "3"}], "=", "104"}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "3"], "=", RowBox[{ RowBox[{ SubscriptBox["log", "2"], "5"}], "=", "496"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "4"], "=", RowBox[{ RowBox[{ SubscriptBox["log", "2"], "7"}], "=", "258"}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "5"], "=", RowBox[{ RowBox[{ SubscriptBox["log", "2"], "11"}], "=", "295"}]}], TraditionalForm]]] }], "DisplayFormula", FontSlant->"Italic"], Cell["or, equivalently", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "1"], "\[Congruent]", RowBox[{"2", " ", "mod", " ", "541"}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "104"], "\[Congruent]", RowBox[{"3", " ", "mod", " ", "541"}]}], TraditionalForm]]], ", \t ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "496"], "\[Congruent]", RowBox[{"5", " ", "mod", " ", "541"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "258"], "\[Congruent]", RowBox[{"7", " ", "mod", " ", "541"}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "295"], "\[Congruent]", RowBox[{"11", " ", "mod", " ", "541"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "If the above linear congruence relations are not linearly independent one \ has to replace some equations by others until they are linearly \ independent.", "\n", "Let us now find a solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "m"], "\[Congruent]", RowBox[{"345", " ", RowBox[{"(", RowBox[{"mod", " ", "541"}], ")"}]}]}], TraditionalForm]]], ".\nFrom " }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"FactorInteger", "[", "345", "]"}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["2", "2"], "345"}], ",", "541"}], "]"}], "]"}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["2", "100"], "345"}], ",", "541"}], "]"}], "]"}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["2", "13"], "345"}], ",", "541"}], "]"}], "]"}]}], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"23", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"149", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"41", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "1"}], "}"}]}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ "we see that 345 can not be expressed as product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", nor can ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "2"], "\[Times]", "345"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "100"], "\[Times]", "345"}], TraditionalForm]]], ", but ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["2", "13"], "\[Cross]", "345"}], "=", RowBox[{ SuperscriptBox["2", "3"], SuperscriptBox["7", "1"]}]}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "541", ")"}], TraditionalForm]]], ".\nWe conclude that " }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"13", "+", "m"}], "\[Congruent]", RowBox[{ RowBox[{"3.", SubscriptBox["m", "1"]}], "+", RowBox[{"1.", SubscriptBox["m", "4"]}]}], "\[Congruent]", RowBox[{ RowBox[{"3", "\[Times]", "1"}], "+", "258"}], "\[Congruent]", RowBox[{"261", " ", RowBox[{"(", RowBox[{"mod", " ", "540"}], ")"}]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "therefore, the solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "m"], "\[Congruent]", RowBox[{"345", " ", RowBox[{"(", RowBox[{"mod", " ", "541"}], ")"}]}]}], TraditionalForm]]], " is given by" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{"248", " ", RowBox[{"(", RowBox[{"mod", " ", "540"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell["This can easily be checked with", "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"2", ",", "248", ",", "541"}], "]"}]], "Input"], Cell[BoxData["345"], "Output"], Cell[TextData[{ "Because of the small parameters, we can find out explicitly how many \ elements in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "540"}], "}"}], TraditionalForm]]], " can be expressed as product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Select", FontVariations->{"Underline"->True}], ", ", StyleBox["Flatten", FontVariations->{"Underline"->True}], ", ", StyleBox["Table", FontVariations->{"Underline"->True}], ", ", StyleBox["Sort", FontVariations->{"Underline"->True}], ", ", StyleBox["Log", FontVariations->{"Underline"->True}], " and ", StyleBox["Length", FontVariations->{"Underline"->True}], " and make use of the fact that the exponent of 2 is at most ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[LeftFloor]", RowBox[{ SubscriptBox["log", "2"], "541"}], "\[RightFloor]"}], "=", "9"}], TraditionalForm]]], ", the exponent of 3 is at most ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[LeftFloor]", RowBox[{ SubscriptBox["log", "3"], "541"}], "\[RightFloor]"}], "=", "5"}], TraditionalForm]]], ", etc., in any number less than 541." }], "Text", CellChangeTimes->{ 3.4233937719964466`*^9, 3.4233943804847155`*^9, 3.4233952999749756`*^9, { 3.4234633331133904`*^9, 3.4234633618957453`*^9}, {3.423463805175776*^9, 3.423463808613364*^9}, {3.423464353798216*^9, 3.4234643592358203`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"BaseProd", " ", "=", " ", RowBox[{ RowBox[{"Select", "[", " ", RowBox[{ RowBox[{"Flatten", "[", " ", RowBox[{"Table", "[", " ", RowBox[{ RowBox[{ SuperscriptBox["2", "i1"], SuperscriptBox["3", "i2"], SuperscriptBox["5", "i3"], SuperscriptBox["7", "i4"], SuperscriptBox["11", "i5"]}], ",", "\[IndentingNewLine]", "\t", RowBox[{"{", RowBox[{"i1", ",", " ", "0", ",", " ", RowBox[{"Log", "[", RowBox[{"2", ",", " ", "541"}], "]"}]}], "}"}], ",", "\[IndentingNewLine]", "\t", RowBox[{"{", RowBox[{"i2", ",", " ", "0", ",", " ", RowBox[{"Log", "[", RowBox[{"3", ",", " ", "541"}], "]"}]}], "}"}], ",", "\[IndentingNewLine]", "\t", RowBox[{"{", RowBox[{"i3", ",", " ", "0", ",", " ", RowBox[{"Log", "[", RowBox[{"5", ",", " ", "541"}], "]"}]}], "}"}], ",", " ", "\[IndentingNewLine]", "\t", RowBox[{"{", RowBox[{"i4", ",", " ", "0", ",", " ", RowBox[{"Log", "[", RowBox[{"7", ",", " ", "541"}], "]"}]}], "}"}], ",", "\[IndentingNewLine]", "\t", RowBox[{"{", RowBox[{"i5", ",", " ", "0", ",", " ", RowBox[{"Log", "[", RowBox[{"11", ",", " ", "541"}], "]"}]}], "}"}]}], "]"}], " ", "]"}], " ", ",", " ", RowBox[{ RowBox[{"#", "<", "541"}], "&"}]}], "]"}], " ", "//", " ", "Sort"}]}], "\n", RowBox[{"Length", "[", "BaseProd", "]"}]}], "Input", CellChangeTimes->{{3.42339377721523*^9, 3.423393785949661*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6", ",", "7", ",", "8", ",", "9", ",", "10", ",", "11", ",", "12", ",", "14", ",", "15", ",", "16", ",", "18", ",", "20", ",", "21", ",", "22", ",", "24", ",", "25", ",", "27", ",", "28", ",", "30", ",", "32", ",", "33", ",", "35", ",", "36", ",", "40", ",", "42", ",", "44", ",", "45", ",", "48", ",", "49", ",", "50", ",", "54", ",", "55", ",", "56", ",", "60", ",", "63", ",", "64", ",", "66", ",", "70", ",", "72", ",", "75", ",", "77", ",", "80", ",", "81", ",", "84", ",", "88", ",", "90", ",", "96", ",", "98", ",", "99", ",", "100", ",", "105", ",", "108", ",", "110", ",", "112", ",", "120", ",", "121", ",", "125", ",", "126", ",", "128", ",", "132", ",", "135", ",", "140", ",", "144", ",", "147", ",", "150", ",", "154", ",", "160", ",", "162", ",", "165", ",", "168", ",", "175", ",", "176", ",", "180", ",", "189", ",", "192", ",", "196", ",", "198", ",", "200", ",", "210", ",", "216", ",", "220", ",", "224", ",", "225", ",", "231", ",", "240", ",", "242", ",", "243", ",", "245", ",", "250", ",", "252", ",", "256", ",", "264", ",", "270", ",", "275", ",", "280", ",", "288", ",", "294", ",", "297", ",", "300", ",", "308", ",", "315", ",", "320", ",", "324", ",", "330", ",", "336", ",", "343", ",", "350", ",", "352", ",", "360", ",", "363", ",", "375", ",", "378", ",", "384", ",", "385", ",", "392", ",", "396", ",", "400", ",", "405", ",", "420", ",", "432", ",", "440", ",", "441", ",", "448", ",", "450", ",", "462", ",", "480", ",", "484", ",", "486", ",", "490", ",", "495", ",", "500", ",", "504", ",", "512", ",", "525", ",", "528", ",", "539", ",", "540"}], "}"}]], "Output"], Cell[BoxData["142"], "Output"] }, Open ]], Cell[TextData[{ "Therefore, about a quarter of all elements in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " can be expressed as product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". That means that on the average it takes four trials (choices of ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ") before ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", "r"], "h"}], TraditionalForm]]], " can expressed as a product of elements of ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"2", ",", "3", ",", "5", ",", "7", ",", "11"}], "}"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]]], "Subsubsection", CellTags->"SubsubsDiscr Index 2^n"], Cell[TextData[{ "All elements in ", Cell[BoxData[ FormBox[ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], " can be represented by means of binary polynomials of degree", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " modulo an irreducible polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.16", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field Iff Irred"], "). One writes ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}]}], TraditionalForm]]], ".\nLet the polynomial ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"\[Alpha]", "(", "x", ")"}]}], TraditionalForm]]], " denote a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], " can also be represented by binary polynomials of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], " modulo the ", ButtonBox["minimal polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], " ", Cell[BoxData[ FormBox[ RowBox[{"p", "(", "x", ")"}], TraditionalForm]]], " of ", Cell[BoxData[ FormBox["\[Alpha]", TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox["\[Alpha]", TraditionalForm]]], " is a primitive element in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "\[Alpha]", "]"}], "/", RowBox[{"(", RowBox[{"p", "(", "\[Alpha]", ")"}], ")"}]}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is a primitive element in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"p", "(", "x", ")"}], ")"}]}], TraditionalForm]]], ".\nSee ", ButtonBox["Example B.6", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB 16 min pol"], ", where ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "2"], "+", "x", "+", "1"}]}], TraditionalForm]]], " defines ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}], TraditionalForm]]], " and where ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Alpha]", "(", "x", ")"}], "=", RowBox[{"1", "+", "x"}]}], TraditionalForm]]], " is a primitive element of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "2"], "+", "x", "+", "1"}], ")"}]}]}], TraditionalForm]]], ". This element \[Alpha] is a zero of the primitive polynomial ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", "1"}]}], TraditionalForm]]], ". In ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", "1"}], ")"}]}], TraditionalForm]]], " the element ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is a primitive element" }], "Text", GeneratedCell->True], Cell[TextData[{ "Equation ", ButtonBox["(8.1)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], ", that we want so solve, can be reformulated as: " }], "Text"], Cell[TextData[{ "for every polynomial ", Cell[BoxData[ FormBox[ RowBox[{"c", "(", "x", ")"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], ", find the exponent ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "m", "\[LessEqual]", RowBox[{ SuperscriptBox["2", "n"], "-", "2"}]}], TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "m"], "\[Congruent]", RowBox[{ RowBox[{"c", "(", "x", ")"}], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"p", "(", "x", ")"}]}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "As choice of the ", ButtonBox["factor base", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " we take all binary, irreducible polynomials of degree \ \[LessEqual]\[Sigma], say ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "1"], "(", "x", ")"}], ",", RowBox[{ SubscriptBox["p", "2"], "(", "x", ")"}], ",", "\[Ellipsis]", ",", RowBox[{ SubscriptBox["p", "k"], "(", "x", ")"}]}], TraditionalForm]]], ". (The number of such polynomials is given by ", ButtonBox["Theorem B.17", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Ip(m)="], ")." }], "Text", GeneratedCell->True], Cell[TextData[{ "As a ", StyleBox["technique", FontVariations->{"Underline"->True}], " to express an element in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], " as a product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", we simply divide the element by the polynomials ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "i"], "(", "x", ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "A polynomial ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " that can be expressed as a product of elements of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is called ", ButtonBox["smooth", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "Text"], Cell[TextData[StyleBox["Complexity", FontVariations->{"Underline"->True}]], "Text"], Cell[TextData[{ "Coppersmith ", ButtonBox["[Copp84]", BaseStyle->"Hyperlink", ButtonData:>"RefCopp84"], " analyzes this algorithm and finds as asymptotic running time" }], "Text", GeneratedCell->True], Cell[TextData[Cell[BoxData[ FormBox[ SuperscriptBox["exp", RowBox[{"C", RadicalBox[ RowBox[{ RowBox[{"(", RowBox[{"ln", " ", "n"}], ")"}], SuperscriptBox[ RowBox[{"(", RowBox[{"ln", " ", "ln", " ", "n"}], ")"}], "2"]}], "3"]}]], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "Later, further improvements have been found with names like ", StyleBox["number field sieve", FontSlant->"Italic"], " and ", StyleBox["function field sieve", FontSlant->"Italic"], " (see ", ButtonBox["[AdDM93]", BaseStyle->"Hyperlink", ButtonData:>"RefAdlD93"], ", ", ButtonBox["[Adle94]", BaseStyle->"Hyperlink", ButtonData:>"RefAdle94"], ", and ", ButtonBox["[HelR83]", BaseStyle->"Hyperlink", ButtonData:>"RefHelR83"], ")." }], "Text", GeneratedCell->True], Cell[TextData[{ "For an excellent survey on the discrete logarithm problem we refer the \ reader to ", ButtonBox["[Odly85]", BaseStyle->"Hyperlink", ButtonData:>"RefOdly85"], "." }], "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"], "\nWe want to take a logarithm in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "10"], ")"}], TraditionalForm]]], ". To represent ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "10"], ")"}], TraditionalForm]]], " properly and to find a primitive element in it, we look for a ", ButtonBox["primitive polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim Pol"], " of degree 10. We do this with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["FieldIrreducible", FontVariations->{"Underline"->True}], " for which the package ", StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], " has to be read first. " }], "Example", CellChangeTimes->{{3.423454859034072*^9, 3.423454868846509*^9}, { 3.423455135688551*^9, 3.423455137454165*^9}}, CellTags->"ExamDiscr Index Calc2"], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input"], Cell[BoxData[{ RowBox[{ RowBox[{"fld", "=", RowBox[{"GF", "[", RowBox[{"2", ",", "10"}], "]"}]}], ";"}], "\n", RowBox[{"FieldIrreducible", "[", RowBox[{"fld", ",", "x"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["x", "7"], "+", SuperscriptBox["x", "10"]}]], "Output", CellChangeTimes->{3.4233701128187556`*^9, 3.4233754174178677`*^9}], Cell[TextData[{ "So, we take ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", SuperscriptBox["2", "10"], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ")"}]}]}], TraditionalForm]]], " which has ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " as primitive element. Equation ", ButtonBox["(8.1)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], " now reads like: " }], "Text", FontSlant->"Italic"], Cell[TextData[{ "\tfind ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "m"], "\[Congruent]", RowBox[{ RowBox[{"c", "(", "x", ")"}], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "10"]}], "+", SuperscriptBox["x", "7"], "+", "1"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "As ", ButtonBox["factor base", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " we shall take the set of all irreducible polynomials of degree \ \[LessEqual]4.\nThe reader may remember that all binary, irreducible \ polynomials of degree ", StyleBox["d", FontSlant->"Italic"], " appear in the factorization of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", SuperscriptBox["2", "d"]], "-", "x"}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.35", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Factor x^p^m-x"], "). We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Factor", FontVariations->{"Underline"->True}], ". " }], "Text", CellChangeTimes->{{3.423463879240172*^9, 3.4234638865684843`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "x", "]"}], ";", RowBox[{"Factor", "[", RowBox[{ RowBox[{ SuperscriptBox["x", SuperscriptBox["2", "3"]], "-", "x"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{ SuperscriptBox["x", SuperscriptBox["2", "4"]], "-", "x"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"x", " ", RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}], ")"}]}]], "Output"], Cell[BoxData[ RowBox[{"x", " ", RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}]}]], "Output"] }, Open ]], Cell[TextData[{ "Hence, as factor base ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " we have:" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "1"], "(", "x", ")"}], "=", "x"}], TraditionalForm]]], ", \t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "2"], "(", "x", ")"}], "=", RowBox[{"1", "+", "x"}]}], TraditionalForm]]], ", \t\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "3"], "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}]}], TraditionalForm]]], ", \t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "4"], "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "5"], "(", "x", ")"}], "=", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}]}], TraditionalForm]]], ", \t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "6"], "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]}], TraditionalForm]]], ", \n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "7"], "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}]}], TraditionalForm]]], ", \t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "8"], "(", "x", ")"}], "=", RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "We want to write each of the elements in this factor base as a power of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], ", i.e. we want to solve the logarithm problem for the elements in the \ factor base. To this end, we try to find powers of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ")"}]}], TraditionalForm]]], " that can be expressed as a product of the polynomials ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "j"], "(", "x", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", "8"}], TraditionalForm]]], " (and use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], "). " }], "Text", CellChangeTimes->{ 3.4233946114393187`*^9, {3.4234546642226872`*^9, 3.4234546656914372`*^9}, { 3.423463877130743*^9, 3.4234639113972454`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"attempt", "=", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "85"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}]}], "\n", RowBox[{"Factor", "[", RowBox[{"attempt", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "9"]}]], "Output"], Cell[BoxData[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "2"], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}], ")"}]}]], "Output"] }, Open ]], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "85"], TraditionalForm]]], " is not ", ButtonBox["smooth", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " with respect to our factor base ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". After some trial and error we find the following list of smooth powers of \ ", Cell[BoxData[ FormBox["x", TraditionalForm]]], ":" }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{"x", ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "86"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "140"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "211"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "319"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "457"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "605"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "787"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input"], Cell[BoxData["x"], "Output"], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}], ")"}]}]], "Output"], Cell[BoxData[ RowBox[{ SuperscriptBox["x", "2"], " ", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}], "2"]}]], "Output"], Cell[BoxData[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "5"], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}]}]], "Output"], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}]}]], "Output"], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}], ")"}]}]], "Output"], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}], ")"}]}]], "Output"], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}], " ", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}], ")"}], "2"]}]], "Output"] }, Open ]], Cell[TextData[{ "Writing ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "i"], "(", "x", ")"}], "\[Congruent]", RowBox[{ SuperscriptBox["x", SubscriptBox["m", "i"]], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "10"]}], "+", SuperscriptBox["x", "7"], "+", "1"}], ")"}]}]}], TraditionalForm]]], ", these relations give rise to eight linear congruence relations. For \ instance, the last equation gives" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "787"], "\[Congruent]", RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}], SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}], ")"}], "2"]}], "\[Congruent]", RowBox[{ RowBox[{"(", SuperscriptBox["x", SubscriptBox["m", "4"]], ")"}], SuperscriptBox[ RowBox[{"(", SuperscriptBox["x", SubscriptBox["m", "5"]], ")"}], "2"]}], "\[Congruent]", RowBox[{ SuperscriptBox["x", RowBox[{ SubscriptBox["m", "4"], "+", RowBox[{"2", SubscriptBox["m", "5"]}]}]], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "10"]}], "+", SuperscriptBox["x", "7"], "+", "1"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell["\<\ Taking the logarithm on both sides gives the linear congruence relations \ \>", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"787", "\[Congruent]", RowBox[{ SubscriptBox["m", "4"], "+", RowBox[{"2", SubscriptBox["m", "5"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}]}], TraditionalForm]]], ", " }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "since 1023 is the multiplicative order of the primitive element ", Cell[BoxData[ FormBox[ StyleBox["x", FontWeight->"Plain"], TraditionalForm]]], ". In this way, the eight relations above can be rewritten as " }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"1", "\[Congruent]", RowBox[{ SubscriptBox["m", "1"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"86", "\[Congruent]", RowBox[{ SubscriptBox["m", "4"], "+", RowBox[{ SubscriptBox["m", "5"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"140", "\[Congruent]", RowBox[{ RowBox[{"2", SubscriptBox["m", "1"]}], "+", RowBox[{"2", SubscriptBox["m", "3"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"211", "\[Congruent]", RowBox[{ RowBox[{"5", SubscriptBox["m", "2"]}], "+", RowBox[{ SubscriptBox["m", "6"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"319", "\[Congruent]", RowBox[{ SubscriptBox["m", "2"], " ", "+", SubscriptBox["m", "6"], "+", RowBox[{ SubscriptBox["m", "8"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"457", "\[Congruent]", RowBox[{ SubscriptBox["m", "3"], "+", SubscriptBox["m", "4"], "+", RowBox[{ SubscriptBox["m", "7"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"605", "\[Congruent]", RowBox[{ SubscriptBox["m", "2"], "+", SubscriptBox["m", "5"], "+", RowBox[{ SubscriptBox["m", "7"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"787", "\[Congruent]", RowBox[{ SubscriptBox["m", "4"], "+", RowBox[{"2", SubscriptBox["m", "5"], " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "This forms a system of congruence relations that can be solved with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Solve", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{ 3.4233955223670235`*^9, {3.423395697852522*^9, 3.4233956991181545`*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", RowBox[{ "m1", ",", "m2", ",", "m3", ",", "m4", ",", "m5", ",", "m6", ",", "m7", ",", "m8"}], "]"}], ";", RowBox[{"Solve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"m1", "==", "1"}], " ", ",", RowBox[{ RowBox[{"m4", "+", "m5"}], "==", "86"}], ",", RowBox[{ RowBox[{ RowBox[{"2", "m1"}], "+", RowBox[{"2", "m3"}]}], "==", "140"}], ",", RowBox[{ RowBox[{ RowBox[{"5", "m2"}], "+", "m6"}], "==", "211"}], ",", RowBox[{ RowBox[{"m2", "+", "m6", "+", "m8"}], "==", "319"}], ",", RowBox[{ RowBox[{"m3", "+", "m4", "+", "m7"}], "==", "457"}], ",", RowBox[{ RowBox[{"m2", "+", "m5", "+", "m7"}], "==", "605"}], ",", RowBox[{ RowBox[{"m4", "+", RowBox[{"2", "m5"}]}], "==", "787"}], ",", RowBox[{"Modulus", "==", "1023"}]}], "}"}], ",", RowBox[{"{", RowBox[{ "m1", ",", "m2", ",", "m3", ",", "m4", ",", "m5", ",", "m6", ",", "m7", ",", "m8"}], "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "1023"}], ",", RowBox[{"m8", "\[Rule]", "827"}], ",", RowBox[{"m1", "\[Rule]", "1"}], ",", RowBox[{"m3", "\[Rule]", "69"}], ",", RowBox[{"m6", "\[Rule]", "591"}], ",", RowBox[{"m7", "\[Rule]", "1003"}], ",", RowBox[{"m2", "\[Rule]", "947"}], ",", RowBox[{"m4", "\[Rule]", "408"}], ",", RowBox[{"m5", "\[Rule]", "701"}]}], "}"}], "}"}]], "Output"], Cell[TextData[{ "So, we know that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "=", "947"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "3"], "=", "69"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "4"], "=", "408"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "5"], "=", "701"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "6"], "=", "591"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "7"], "=", "1003"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "8"], "=", "827"}], TraditionalForm]]], ". " }], "Text", FontSlant->"Italic"], Cell["\<\ If the linear congruence relations are not linearly independent one has to \ replace some equations by others until they are linearly independent.\ \>", "Text", FontSlant->"Italic"], Cell[TextData[{ "Let us now find a solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "m"], "\[Congruent]", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "6"], "+", RowBox[{ SuperscriptBox["x", "9"], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "10"]}], "+", SuperscriptBox["x", "7"], "+", "1"}], ")"}]}]}]}], TraditionalForm]]], ".\nFrom " }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "9"]}], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ SuperscriptBox["x", "50"], RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "9"]}], ")"}]}], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input"], Cell[BoxData[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "2"], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "7"]}], ")"}]}]], "Output"], Cell[BoxData[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}], "2"], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}], ")"}]}]], "Output"] }, Open ]], Cell[TextData[{ "we see that ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "9"]}], TraditionalForm]]], "can not be written as product of polynomials in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", but ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "50"], "(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "9"]}], ")"}], " "}], TraditionalForm]]], " can.\nWe conclude that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"50", "+", "m"}], "\[Congruent]", RowBox[{ RowBox[{"2", SubscriptBox["m", "3"]}], "+", SubscriptBox["m", "7"]}], "\[Congruent]"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"2", "\[Times]", "69"}], "+", "1003"}], "\[Congruent]", RowBox[{"118", " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}], TraditionalForm]]], ", so the solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "m"], "\[Congruent]", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "6"], "+", RowBox[{ SuperscriptBox["x", "9"], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "10"]}], "+", SuperscriptBox["x", "7"], "+", "1"}], ")"}]}]}]}], TraditionalForm]]], " is given by" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{"68", " ", RowBox[{"(", RowBox[{"mod", " ", "1023"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell["This can be checked by", "Text", PageBreakBelow->False, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "68"], ",", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "7"], "+", "1"}], ",", "2"}], "}"}]}], "]"}]], "Input", PageBreakBelow->False], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "9"]}]], "Output"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\t", "Problems" }], "Section", PageBreakAbove->False, CellTags->"SectDiscr Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ StyleBox[ SuperscriptBox["", "M"], FontWeight->"Bold"], TraditionalForm]]], "\nUsers ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["B", TraditionalForm]]], " want to use the ", ButtonBox["Diffie-Hellman system", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], " to fix a common key over a public channel. They use ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "541"}], TraditionalForm]]], " and primitive element \[Alpha]=2. \nUser ", Cell[BoxData[ FormBox["B", TraditionalForm]]], " makes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "B"], "=", "123"}], TraditionalForm]]], " public. If ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "A"], "=", "432"}], TraditionalForm]]], ", what will be the common key ", Cell[BoxData[ FormBox[ SubscriptBox["k", RowBox[{"A", ",", "B"}]], TraditionalForm]]], " that ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["B", TraditionalForm]]], " use for their communication?" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nUsers ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["B", TraditionalForm]]], " want to use the ", ButtonBox["Diffie-Hellman system", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], " to fix a common key over a public channel. They use ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "2"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "3"], "+", "1"}], ")"}]}], TraditionalForm]]], " as representation of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "10"], ")"}], TraditionalForm]]], ". User ", Cell[BoxData[ FormBox["B", TraditionalForm]]], " makes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "B"], "="}], TraditionalForm]]], "0100010100 public, which stands for the field element ", Cell[BoxData[ FormBox[ RowBox[{"x", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "7"]}], TraditionalForm]]], ". If ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "A"], "=", "2"}], TraditionalForm]]], ", what will be the common key that ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["B", TraditionalForm]]], " use for their communication?" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nDemonstrate the ", ButtonBox["Special Case", BaseStyle->"Hyperlink", ButtonData:>"CaseDiscr q-1 is 2power"], " version of the Pohlig-Helmann algorithm, that computes logarithms in \ finite fields of size ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", RowBox[{ SuperscriptBox["2", "n"], "+", "1"}]}], TraditionalForm]]], ", by evaluating ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "3"], "(", "142", ")"}], TraditionalForm]]], " in GF(257)." }], "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]]], "\nCheck that 953 is a prime number and that 3 is a generator of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "953", "*"], TraditionalForm]]], ". Find the three least significant bits of the solution ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " of the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["3", "m"], "\[Congruent]", RowBox[{"726", " ", "mod", " ", "953"}]}], TraditionalForm]]], ".\n(See the ", ButtonBox["remark", BaseStyle->"Hyperlink", ButtonData:>"RemDiscr Pohlig"], " in the discussion of the special case ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", SuperscriptBox["2", "n"]}], TraditionalForm]]], " in Subsection 8.3.1.) " }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nCompute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "3"], "(", "135", ")"}], TraditionalForm]]], " in GF(353) with the ", ButtonBox["Pohlig-Hellman algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Pohlig Hellman"], "." }], "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]]], "\nFind a solution of ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "44"], "55"}], TraditionalForm]]], " in GF(197) by means of the ", ButtonBox["Baby-Step Giant-Step", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Baby Giant"], " method, when only 15 field elements can be stored." }], "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]]], "\nCheck that ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", "662"}], TraditionalForm]]], " is a primitive 2003-th root of unity in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "4007", ")"}], TraditionalForm]]], " (note that 4007 is a prime number). Let ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " be the multiplicative subgroup ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of order 2003 in GF(4007) generated by \[Alpha]. Check that 2124 is an \ element of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ".\nDetermine ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "662"], "2124"}], TraditionalForm]]], " by the ", ButtonBox["Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SectDiscr Pollard"], ButtonBox["\[Rho]", BaseStyle->"Hyperlink", ButtonData:>"SectDiscr Pollard"], " method. " }], "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]]], "\nCheck that ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", "996"}], TraditionalForm]]], " is a generator of the multiplicative group ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "4007", "*"], TraditionalForm]]], ". Set up the ", ButtonBox["index-calculus", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Index Calc"], " method with a factor base of size 6 and determine ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "996"], "1111"}], TraditionalForm]]], "." }], "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]]], "\nSolve the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "m"], "\[Congruent]", RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", RowBox[{ SuperscriptBox["x", "9"], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "10"]}], "+", SuperscriptBox["x", "3"], "+", "1"}], ")"}]}]}]}], TraditionalForm]]], " in the setting of ", ButtonBox["Example 8.11", BaseStyle->"Hyperlink", ButtonData:>"ExamDiscr Index Calc2"], "." }], "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]]], "\nWhat is the probability that a random element ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "m"], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "10"]}], "+", SuperscriptBox["x", "3"], "+", "1"}], ")"}]}], TraditionalForm]]], " is smooth with respect to the set of irreducible, binary polynomials of \ degree ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", "10"}], TraditionalForm]]], " (see ", ButtonBox["Example 8.11", BaseStyle->"Hyperlink", ButtonData:>"ExamDiscr Index Calc2"], "). " }], "Problem"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tRSA Based Systems" }], "Chapter", CellTags->"Chap RSA"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe RSA System" }], "Section", CellTags->"SectRSA RSA"], Cell[TextData[{ "In 1978 R.L. Rivest, A. Shamir and L. Adleman ", ButtonBox["[RivSA78]", BaseStyle->"Hyperlink", ButtonData:>"RefRivSA78"], " proposed a public key cryptosystem that has become known as the RSA \ system. It makes use of the following three facts:" }], "Text", GeneratedCell->True], Cell[TextData[{ "1) Exponentiation modulo a composite number ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", i.e. computing ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", "e"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " for given ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["e", TraditionalForm]]], ", is a relatively simple operation (see ", ButtonBox["Subsection 8.1.1", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Log Problem"], ")." }], "Text"], Cell[TextData[{ "2) The opposite problem of taking roots modulo a large, composite number ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", i.e. computing ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", "e"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " (which can be written as ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{ RadicalBox["c", "e"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ") for given ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["e", TraditionalForm]]], ", is, in general, believed to be intractable." }], "Text"], Cell[TextData[{ "3) If the prime factorization of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is known, the problem of taking roots modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is feasible." }], "Text"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tSome Mathematics" }], "Subsection", CellTags->"SubsRSA RSA math"], Cell[TextData[{ "From Appendix A we quote ", ButtonBox["Theorem A.14", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler"], " and the definition of ", ButtonBox["Euler's Totient function", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], " (Def. A.6):" }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], StyleBox[" \t", FontWeight->"Bold"], StyleBox["Euler", FontWeight->"Bold", FontSlant->"Italic"], StyleBox["\n", FontSlant->"Italic"], "Let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be integers. Then" }], "Theorem"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "n"}], ")"}], "=", "1"}], TraditionalForm]]], "\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{"\[CurlyPhi]", "(", "n", ")"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormRSA Euler Thm"], Cell[TextData[{ "where Euler's Totient Function ", Cell[BoxData[ FormBox[ RowBox[{"\[CurlyPhi]", "(", "n", ")"}], TraditionalForm]]], " counts the number of integers in between 1 and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " that are coprime with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". The function", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"\[CurlyPhi]", "(", "n", ")"}]}], TraditionalForm]]], " can be computed from the relation:" }], "Theorem", CounterIncrements->"None"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CurlyPhi]", "(", "n", ")"}], "=", " ", RowBox[{"n", RowBox[{ SubscriptBox["\[Product]", RowBox[{ RowBox[{"p", "|", "n"}], ",", " ", RowBox[{"p", " ", "prime"}]}]], RowBox[{"(", RowBox[{"1", "-", FractionBox["1", "p"]}], ")"}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormRSA EulerPhi"], Cell[TextData[{ "The reader can check the above in any example with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["GCD", FontVariations->{"Underline"->True}], " and ", StyleBox["EulerPhi", FontVariations->{"Underline"->True}], ". " }], "Text", CellChangeTimes->{{3.42339683900045*^9, 3.423396841625467*^9}, { 3.423455322468606*^9, 3.4234553238279724`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "1999"}], ";", RowBox[{"a", "=", "1234"}], ";"}], "\n", RowBox[{"GCD", "[", RowBox[{"a", ",", "n"}], "]"}], "\n", RowBox[{"ph", "=", RowBox[{"EulerPhi", "[", "n", "]"}]}], "\n", RowBox[{"PowerMod", "[", RowBox[{"a", ",", "ph", ",", "n"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output"], Cell[BoxData["1998"], "Output"], Cell[BoxData["1"], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tSetting Up the System" }], "Subsection", CellTags->"SubsRSA RSA setting up"], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Step 1", FontVariations->{"Underline"->True}], " Computing the Modulus ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]] }], "Subsubsection", CellTags->"SubsubsRSA compute n"], Cell[TextData[{ "Each user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " of the system chooses two different large prime numbers, say ", Cell[BoxData[ FormBox[ SubscriptBox["p", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["q", "U"], TraditionalForm]]], ". In the original proposal the suggested length was about 100 digits. \nLet \ ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "U"], "=", RowBox[{ SubscriptBox["p", "U"], SubscriptBox["q", "U"]}]}], TraditionalForm]]], ". It follows from ", ButtonBox["(9.2)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA EulerPhi"], " that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "U"], ")"}], "=", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["n", "U"], "(", RowBox[{"1", "-", FractionBox["1", SubscriptBox["p", "U"]]}], ")"}], RowBox[{"(", RowBox[{"1", "-", FractionBox["1", SubscriptBox["q", "U"]]}], ")"}]}], "=", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["p", "U"], "-", "1"}], ")"}], RowBox[{"(", RowBox[{ SubscriptBox["q", "U"], "-", "1"}], ")"}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA EulerPhi for RSA"], Cell[TextData[{ "This can also be seen directly. The ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " integers in between 1 and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "U"], "=", RowBox[{ SubscriptBox["p", "U"], SubscriptBox["q", "U"]}]}], TraditionalForm]]], " are all coprime with ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], " except for the ", Cell[BoxData[ FormBox[ SubscriptBox["q", "U"], TraditionalForm]]], " multiples of ", Cell[BoxData[ FormBox[ SubscriptBox["p", "U"], TraditionalForm]]], " (namely ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "U"], ",", RowBox[{"2.", SubscriptBox["p", "U"]}], ",", RowBox[{"3.", SubscriptBox["p", "U"]}], ",", "\[Ellipsis]", ",", RowBox[{ SubscriptBox["q", "U"], ".", SubscriptBox["p", "U"]}]}], TraditionalForm]]], ") and the ", Cell[BoxData[ FormBox[ SubscriptBox["p", "U"], TraditionalForm]]], " multiples of ", Cell[BoxData[ FormBox[ SubscriptBox["q", "U"], TraditionalForm]]], " (namely ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "U"], ",", RowBox[{"2.", SubscriptBox["q", "U"]}], ",", RowBox[{"3", SubscriptBox["q", "U"]}], ",", "\[Ellipsis]", ",", RowBox[{ SubscriptBox["p", "U"], ".", SubscriptBox["q", "U"]}]}], TraditionalForm]]], ") In this counting, one should realize that the number ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "U"], SubscriptBox["q", "U"]}], TraditionalForm]]], " has been subtracted once too often. " }], "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"], "\nTo keep this example manageable participant Bob will keep his primes \ reasonably small. He makes use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Prime", FontVariations->{"Underline"->True}], " and ", StyleBox["EulerPhi", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.42339738661333*^9, 3.4233973892227216`*^9}, { 3.4234553270935764`*^9, 3.423455328265444*^9}}, CellTags->"ExamRSA RSA"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"pB", "=", RowBox[{"Prime", "[", "1200", "]"}]}], "\n", RowBox[{"qB", "=", RowBox[{"Prime", "[", "1250", "]"}]}], "\n", RowBox[{"nB", "=", RowBox[{"pB", "*", "qB"}]}], "\n", RowBox[{"phiB", "=", RowBox[{"EulerPhi", "[", "nB", "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["9733"], "Output"], Cell[BoxData["10177"], "Output"], Cell[BoxData["99052741"], "Output"], Cell[BoxData["99032832"], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Step 2", FontVariations->{"Underline"->True}], " Computing the Exponents ", Cell[BoxData[ FormBox[ SubscriptBox["e", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["d", "U"], TraditionalForm]]] }], "Subsubsection", CellTags->"SubsubsRSA compute e and d"], Cell[TextData[{ "User ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " chooses an integer ", Cell[BoxData[ FormBox[ SubscriptBox["e", "U"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "<", SubscriptBox["e", "U"], "<", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "U"], ")"}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["e", "U"], ",", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "U"], ")"}]}], ")"}], "=", "1"}], TraditionalForm]]], ". User ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " computes the unique integer ", Cell[BoxData[ FormBox[ SubscriptBox["d", "U"], TraditionalForm]]], ", satisfying" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["e", "U"], SubscriptBox["d", "U"]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "U"], ")"}]}], ")"}]}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"1", "<", SubscriptBox["d", "U"], "<", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "U"], ")"}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA e.d=1"], Cell[TextData[{ "For instance, ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " can use ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], " (see Section A.2) to find ", Cell[BoxData[ FormBox[ SubscriptBox["d", "U"], TraditionalForm]]], " in less than ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "f"], RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "U"], ")"}]}], TraditionalForm]]], " operations (", ButtonBox["Theorem A.9", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Compl Eucl"], ") with ", Cell[BoxData[ FormBox[ RowBox[{"f", "=", RowBox[{ RowBox[{"(", RowBox[{"1", "+", SqrtBox["5"]}], ")"}], "/", "2"}]}], TraditionalForm]]], ". " }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Example 9.1 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nThe random choice of ", Cell[BoxData[ FormBox[ SubscriptBox["e", "B"], TraditionalForm]]], " and the computation of ", Cell[BoxData[ FormBox[ SubscriptBox["d", "B"], TraditionalForm]]], " can be made with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["RandomInteger", FontVariations->{"Underline"->True}], ", ", StyleBox["While", FontVariations->{"Underline"->True}], ", and ", StyleBox["ExtendedGCD", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4233965280922103`*^9, 3.4233965329359913`*^9}, { 3.4234544925976872`*^9, 3.423454494738312*^9}, {3.423463973555086*^9, 3.423463983242834*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"eB", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{"1", ",", "nB"}], "}"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"While", "[", RowBox[{ RowBox[{ RowBox[{"GCD", "[", RowBox[{"eB", ",", "phiB"}], "]"}], "\[NotEqual]", "1"}], ",", RowBox[{"eB", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{"1", ",", "nB"}], "}"}], "]"}]}]}], "]"}], ";"}], "\n", "eB", "\n", RowBox[{"ExtendedGCD", "[", RowBox[{"eB", ",", "phiB"}], "]"}]}], "Input", GeneratedCell->True, CellTags->"Random"], Cell[BoxData["13994321"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{"-", "8054863"}], ",", "1138232"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "So, Bob has ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "B"], "=", "81119923"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["d", "B"], "=", "17089915"}], TraditionalForm]]], ". This can be checked by the ", StyleBox["Mod", FontVariations->{"Underline"->True}], " calculation:" }], "Text", CellChangeTimes->{3.4233959819168396`*^9}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"dB", "=", "17089915"}], ";"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"eB", "*", "dB"}], ",", "phiB"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["41946347"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Step 3", FontVariations->{"Underline"->True}], " Making Public: ", Cell[BoxData[ FormBox[ SubscriptBox["e", "U"], TraditionalForm]], CellTags->"SubsubsRSA make public"], " and ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]] }], "Subsubsection", CellTags->"SubsubsRSA making public"], Cell[TextData[{ "Each user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " makes ", Cell[BoxData[ FormBox[ SubscriptBox["e", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], " public, but keeps ", Cell[BoxData[ FormBox[ SubscriptBox["d", "U"], TraditionalForm]]], " secret. The primes numbers ", Cell[BoxData[ FormBox[ SubscriptBox["p", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["q", "U"], TraditionalForm]]], " no longer play a role. User ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " may use them to reduce the complexity of his calculations as we shall see \ later on. They may not be made public by ", Cell[BoxData[ FormBox["U", TraditionalForm]]], ". " }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tRSA for Privacy" }], "Subsection", CellTags->"SubsRSA RSA secr"], Cell[TextData[{ "If user ", Cell[BoxData[ FormBox["A", TraditionalForm]]], ", say Alice, wants to send a secret message to Bob (user ", Cell[BoxData[ FormBox["B", TraditionalForm]]], ") she represents her message in any standardized way by a number ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "<", "m", "<", SubscriptBox["n", "B"]}], TraditionalForm]]], ". Next, Alice looks up the public exponent ", Cell[BoxData[ FormBox[ SubscriptBox["e", "B"], TraditionalForm]]], " of Bob. She will send the ciphertext ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " computed from" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", SubscriptBox["e", RowBox[{"B", " "}]]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Bob can recover ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " by raising it to the power ", Cell[BoxData[ FormBox[ SubscriptBox["d", "B"], TraditionalForm]]], " which he only knows. Indeed, for some integer ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " one has " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", SubscriptBox["d", RowBox[{"B", " "}]]], "\[Congruent]", SuperscriptBox[ RowBox[{"(", SuperscriptBox["m", SubscriptBox["e", "B"]], ")"}], SubscriptBox["d", "B"]], "\[Congruent]", SuperscriptBox["m", RowBox[{ SubscriptBox["e", "B"], SubscriptBox["d", "B"]}]], OverscriptBox["\[Congruent]", ButtonBox[ RowBox[{"(", "9.4", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA e.d=1"]], SuperscriptBox["m", RowBox[{"1", "+", RowBox[{"l", ".", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "B"], ")"}]}]}]], "\[Congruent]", RowBox[{"m", ".", SuperscriptBox[ RowBox[{"(", SuperscriptBox["m", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "B"], ")"}]], ")"}], "l"]}], OverscriptBox["\[Congruent]", ButtonBox[ RowBox[{"(", "9.1", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA Euler Thm"]], RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA check RSA secr"], Cell[TextData[{ "when ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", SubscriptBox["n", "B"]}], ")"}], "=", "1"}], TraditionalForm]]], ". In ", ButtonBox["Problem 9.2", BaseStyle->"Hyperlink", ButtonData:>"ProbRSA RSA when gcd>1"], " the reader is invited to verify that the system also works when ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", SubscriptBox["n", "B"]}], ")"}], "\[NotEqual]", "1"}], TraditionalForm]]], ".\nWe summarize the RSA secrecy system in the next table." }], "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"public", RowBox[{ SubscriptBox["e", "U"], " ", "and", " ", SubscriptBox["n", "U"], " ", "of", " ", "all", " ", "users", " ", "U"}]}, {"secret", RowBox[{ SubscriptBox["d", "U"], " ", "of", " ", "user", " ", "U"}]}, {" ", " "}, {"property", RowBox[{ RowBox[{ SubscriptBox["e", "U"], SubscriptBox["d", "U"]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "\[CurlyPhi]", RowBox[{"(", SubscriptBox["n", "U"], ")"}]}], ")"}]}]}]}, {" ", " "}, { RowBox[{"message", " ", "to", " ", "Bob"}], RowBox[{"0", "<", "m", "<", SubscriptBox["n", "B"]}]}, {" ", " "}, { RowBox[{"encryption", " ", "by", " ", "A"}], RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", SubscriptBox["e", "B"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}]}, { RowBox[{"decryption", " ", "by", " ", "B"}], RowBox[{ SuperscriptBox["c", SubscriptBox["d", "B"]], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}]} }]]], "\n\nThe RSA System for Privacy" }], "NumberedTable", CellTags->"TableRSA RSA Privacy"], Cell[TextData[{ "The public and secret exponents in the RSA system are traditionally called \ ", Cell[BoxData[ FormBox[ SubscriptBox["e", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["d", "U"], TraditionalForm]]], " to denote the encryption resp. decryption functions that they have in this \ subsection." }], "Text"], Cell[TextData[{ StyleBox["Example 9.1 (Part 3)", FontWeight->"Bold", FontSlant->"Plain"], "\nWe continue with the parameters of ", ButtonBox["Example 9.1", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA RSA"], ", so ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], StyleBox["=99052741", FontSlant->"Italic"], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "B"], "=", "81119923"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["d", "B"], "=", "17089915"}], TraditionalForm]]], ". The encryption ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", SubscriptBox["e", RowBox[{"B", " "}]]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], " of message ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "12345678"}], TraditionalForm]]], " leads with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " to " }], "Text", CellChangeTimes->{{3.4234607263788424`*^9, 3.423460727128847*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"nB", "=", "99052741"}], ";", RowBox[{"eB", "=", "81119923"}], ";", RowBox[{"dB", "=", "17089915"}], ";"}], "\n", RowBox[{ RowBox[{"m", "=", "12345678"}], ";"}], "\n", RowBox[{"c", "=", RowBox[{"PowerMod", "[", RowBox[{"m", ",", "eB", ",", "nB"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["38447790"], "Output"], Cell[TextData[{ "Bob decrypts this by computing ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", SubscriptBox["d", RowBox[{"B", " "}]]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}], TraditionalForm]]], ", which gives ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"c", ",", "dB", ",", "nB"}], "]"}]], "Input"], Cell[BoxData["12345678"], "Output"], Cell[TextData[{ "It is possible to reduce the work factor of the decryption process by means \ of the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19). Indeed, since Bob knows the factorization of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " into ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Times]", "q"}], TraditionalForm]]], ", he can do the following." }], "Text", GeneratedCell->True], Cell[TextData[{ "Bob precomputes integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " mod ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", satisfying " }], "Text"], Cell[TextData[{ Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{"a", "\[Congruent]", "1"}], RowBox[{"(", "mod"}], RowBox[{"p", ")"}]}, { RowBox[{"a", "\[Congruent]", "0"}], RowBox[{"(", "mod"}], RowBox[{"q", ")"}]} }]}]], TextJustification->1], "\n\n", Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{"b", "\[Congruent]", "0"}], RowBox[{"(", "mod"}], RowBox[{"p", ")"}]}, { RowBox[{"b", "\[Congruent]", "1"}], RowBox[{"(", "mod"}], RowBox[{"q", ")"}]} }]}]], TextJustification->1] }], "DisplayFormula"], Cell[TextData[{ "Next, Bob computes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "\[Congruent]", RowBox[{ SubsuperscriptBox["c", "1", "d"], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "\[Congruent]", RowBox[{ SubsuperscriptBox["c", "2", "d"], " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", RowBox[{"(", RowBox[{"c", " ", "mod", " ", "p"}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "=", RowBox[{"(", RowBox[{"c", " ", "mod", " ", "q"}], ")"}]}], TraditionalForm]]], ". Note that all these calculations take place modulo the integers ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " that are typically half the length of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". By the Chinese Remainder Theorem, ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{"(", RowBox[{ SuperscriptBox["c", "d"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], " is now given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["m", "1"], ".", "a"}], "+", RowBox[{ RowBox[{ SubscriptBox["m", "2"], ".", "b"}], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "There is even an extra bonus in this approach. The exponent ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " in the calculations of ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " can be reduced modulo ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], ", by ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " (Thm. A.15). Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "\[Congruent]", SuperscriptBox["c", "d"], " ", "\[Congruent]", RowBox[{ SuperscriptBox["c", SubscriptBox["d", "1"]], "mod", " ", "p"}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["d", "1"], "=", RowBox[{"(", RowBox[{"d", " ", "mod", " ", "p"}], ")"}]}], TraditionalForm]]], " and a similar statement is true for the mod ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " calculations.\nAltogether, this way of computing ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", "d"], " ", "mod", " ", "n"}], TraditionalForm]]], " reduces the workload by a factor of about 4. " }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Example 9.1 (Part 4)", FontWeight->"Bold", FontSlant->"Plain"], "\nWe continue with the parameters of ", ButtonBox["Example 9.1", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA RSA"], ", so ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "B"], "=", "9733"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "B"], "=", "10177"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], StyleBox["=99052741", FontSlant->"Italic"], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "B"], "=", "81119923"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["d", "B"], "=", "17089915"}], TraditionalForm]]], ". To compute the solutions to" }], "Text", FontSlant->"Italic", CellTags->"ExamRSA Decryp Part 4"], Cell[TextData[{ Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{"a", "\[Congruent]", "1"}], RowBox[{"(", "mod"}], RowBox[{"9733", ")"}]}, { RowBox[{"a", "\[Congruent]", "0"}], RowBox[{"(", "mod"}], RowBox[{"10177", ")"}]} }]}]], TextJustification->1], "\n\n", Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{"b", "\[Congruent]", "0"}], RowBox[{"(", "mod"}], RowBox[{"9733", ")"}]}, { RowBox[{"b", "\[Congruent]", "1"}], RowBox[{"(", "mod"}], RowBox[{"10177", ")"}]} }]}]], TextJustification->1] }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "we can find ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " with the function ", StyleBox["ChineseRemainder", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4214658364037347`*^9, 3.4214658493256097`*^9}, { 3.423463081016992*^9, 3.4234630821732492`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"a", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"9733", ",", "10177"}], "}"}]}], "]"}]}], "\n", RowBox[{"b", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"9733", ",", "10177"}], "}"}]}], "]"}]}]}], "Input"], Cell[BoxData["45287650"], "Output"], Cell[BoxData["53765092"], "Output"] }, Open ]], Cell[TextData[{ "Next, we calculate ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "\[Congruent]", RowBox[{ SuperscriptBox["c", SubscriptBox["d", "1"]], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "\[Congruent]", SuperscriptBox["c", "d"], " ", "\[Congruent]", RowBox[{ SuperscriptBox["c", SubscriptBox["d", "2"]], " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], ". We get" }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "9733"}], ";", RowBox[{"q", "=", "10177"}], ";", RowBox[{"d", "=", "17089915"}], ";", RowBox[{"c", "=", "38447790"}], ";", RowBox[{"c1", "=", RowBox[{"Mod", "[", RowBox[{"c", ",", "p"}], "]"}]}]}], "\n", RowBox[{"c2", "=", RowBox[{"Mod", "[", RowBox[{"c", ",", "q"}], "]"}]}], "\n", RowBox[{"d1", "=", RowBox[{"Mod", "[", RowBox[{"d", ",", RowBox[{"p", "-", "1"}]}], "]"}]}], "\n", RowBox[{"d2", "=", RowBox[{"Mod", "[", RowBox[{"d", ",", RowBox[{"q", "-", "1"}]}], "]"}]}], "\n", RowBox[{"m1", "=", RowBox[{"PowerMod", "[", RowBox[{"c1", ",", "d1", ",", "p"}], "]"}]}], "\n", RowBox[{"m2", "=", RowBox[{"PowerMod", "[", RowBox[{"c2", ",", "d2", ",", "q"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["2440"], "Output"], Cell[BoxData["9261"], "Output"], Cell[BoxData["523"], "Output"], Cell[BoxData["4411"], "Output"], Cell[BoxData["4234"], "Output"], Cell[BoxData["977"], "Output"] }, Open ]], Cell[TextData[{ "The result of the decryption process is now given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["m", "1"], ".", "a"}], "+", RowBox[{ RowBox[{ SubscriptBox["m", "2"], ".", "b"}], " ", "mod", " ", "n"}]}], TraditionalForm]]], " and coincides with our earlier decryption process." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "99052741"}], ";", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"m1", "*", "a"}], "+", RowBox[{"m2", "*", "b"}]}], ",", "n"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData["12345678"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tRSA for Signatures" }], "Subsection", CellTags->"SubsRSA RSA sign"], Cell[TextData[{ "The RSA system can equally be used to sign messages. To sign a message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "<", "m", "<", SubscriptBox["n", "B"]}], TraditionalForm]]], ", Bob will compute ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{"(", RowBox[{ SuperscriptBox["m", SubscriptBox["d", "B"]], " ", "mod", " ", SubscriptBox["n", "B"]}], ")"}]}], TraditionalForm]]], ".\nThe receiver of ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ", say Alice, can easily retrieve the original message from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", SubscriptBox["e", "B"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}], TraditionalForm]]], ", because Bob's parameters ", Cell[BoxData[ FormBox[ SubscriptBox["e", "B"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], " are public. To check this we repeat ", ButtonBox["(9.5)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA check RSA secr"], " (with a minor variation):" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", SubscriptBox["e", RowBox[{"B", " "}]]], "\[Congruent]", SuperscriptBox[ RowBox[{"(", SuperscriptBox["m", SubscriptBox["d", "B"]], ")"}], SubscriptBox["e", "B"]], "\[Congruent]", SuperscriptBox["m", RowBox[{ SubscriptBox["e", "B"], SubscriptBox["d", "B"]}]], OverscriptBox["\[Congruent]", ButtonBox[ RowBox[{"(", "9.4", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA e.d=1"]], SuperscriptBox["m", RowBox[{"1", "+", RowBox[{"l", ".", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "B"], ")"}]}]}]], "\[Congruent]", RowBox[{"m", ".", SuperscriptBox[ RowBox[{"(", SuperscriptBox["m", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "B"], ")"}]], ")"}], "l"]}], OverscriptBox["\[Congruent]", ButtonBox[ RowBox[{"(", "9.1", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA Euler Thm"]], RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA check RSA sign"], Cell[TextData[{ "for all ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", SubscriptBox["n", "B"]}], ")"}], "=", "1"}], TraditionalForm]]], ". The relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", SubscriptBox["e", "B"]], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], " also holds when ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", SubscriptBox["n", "B"]}], ")"}], "\[NotEqual]", "1"}], TraditionalForm]]], ". In ", ButtonBox["Problem 9.2", BaseStyle->"Hyperlink", ButtonData:>"ProbRSA RSA when gcd>1"], " the reader is asked to prove this." }], "Text"], Cell[TextData[{ "Alice", " should keep ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " as Bob's signature on ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". Only Bob can have made ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " out of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", because he is the only one knowing ", Cell[BoxData[ FormBox[ SubscriptBox["d", "B"], TraditionalForm]]], ". The reader is advised to reread the ", ButtonBox["discussion", BaseStyle->"Hyperlink", ButtonData:>"DiscPubl Discussion Signature"], " above Table 7.2." }], "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"public", RowBox[{ SubscriptBox["e", "U"], " ", "and", " ", SubscriptBox["n", "U"], " ", "of", " ", "all", " ", "users", " ", "U"}]}, {"secret", RowBox[{ SubscriptBox["d", "U"], " ", "of", " ", "user", " ", "U"}]}, {" ", " "}, {"property", RowBox[{ RowBox[{ SubscriptBox["e", "U"], SubscriptBox["d", "U"]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "\[CurlyPhi]", RowBox[{"(", SubscriptBox["n", "U"], ")"}]}], ")"}]}]}]}, {" ", " "}, { RowBox[{"message", " ", "of", " ", "Bob"}], RowBox[{"0", "<", "m", "<", SubscriptBox["n", "B"]}]}, {" ", " "}, { RowBox[{"signing", " ", "by", " ", "B"}], RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", SubscriptBox["d", "B"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}]}, { RowBox[{"verification", " ", "by", " ", "A"}], RowBox[{ SuperscriptBox["c", SubscriptBox["e", "B"]], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}]}, {" ", " "}, {"signature", RowBox[{"the", " ", "pair", " ", RowBox[{"(", RowBox[{"m", ",", "c"}], ")"}]}]} }]]], "\n\nThe RSA System for Signing" }], "NumberedTable", CellTags->"TableRSA RSA Signature"], Cell[TextData[{ StyleBox["Example 9.1 (Part 5)", FontWeight->"Bold", FontSlant->"Plain"], "\nBob signs message ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "11111111"}], TraditionalForm]]], " by computing ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", SubscriptBox["d", RowBox[{"B", " "}]]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "11111111"}], ";", RowBox[{"c", "=", RowBox[{"PowerMod", "[", RowBox[{"m", ",", "dB", ",", "nB"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData["74138899"], "Output"], Cell[TextData[{ "Alice", " verifies this by computing ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", SubscriptBox["e", RowBox[{"B", " "}]]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}], TraditionalForm]]], ", which gives ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tRSA for Privacy and Signing" }], "Subsection", CellTags->"SubsRSA RSA secr + sign"], Cell[TextData[{ "Suppose that Alice wants to sign a confidential message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " to Bob. The solution described in ", ButtonBox["Subsection 7.1.4", BaseStyle->"Hyperlink", ButtonData:>"SubsPubl Secr+Sign"], " , namely Alice first signs ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " with her secret key and then encrypts the result with Bob's public key, \ can not always be applied directly in the RSA-case." }], "Text"], Cell["To see this, we observe that Alice would like to send", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["m", SubscriptBox["d", "A"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "A"]}], ")"}]}], ")"}], SubscriptBox["e", "B"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA RSA secr+sign"], Cell[TextData[{ "However, this mapping is not one-to-one if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "A"], ">", SubscriptBox["n", "B"]}], TraditionalForm]]], ". For instance, the messages ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", SubscriptBox["n", "B"]}], ")"}], SubscriptBox["e", "A"]]}], TraditionalForm]]], " will both be mapped to ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "1"}], TraditionalForm]]], ".\nSince ", "Alice", " and Bob do not want to share their prime numbers, we must have ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "A"], "<", SubscriptBox["n", "B"]}], TraditionalForm]]], ". In this case, Bob can recover ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " as follows:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["c", SubscriptBox["d", "B"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}], ")"}], SubscriptBox["e", "A"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "A"]}], ")"}]}], "=", "m"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "To verify this, combine ", ButtonBox["(9.5)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA check RSA secr"], " with ", ButtonBox["(9.6)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA check RSA sign"], ". " }], "Text"], Cell[TextData[{ "Of course, there now is the problem of what to do when Bob wants to sign a \ confidential message to Alice. A simple solution is to have every user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " make two sets of parameters, one with its modulus smaller than some \ threshold ", Cell[BoxData[ FormBox["T", TraditionalForm]]], " and the other with its modulus larger than ", Cell[BoxData[ FormBox["T", TraditionalForm]]], ". In this setting, the sender uses his own smaller modulus for the \ signature and the ", "receive", "rs larger modulus for the encryption. " }], "Text"], Cell[TextData[Cell[BoxData[GridBox[{ {"public", RowBox[{ RowBox[{ RowBox[{ StyleBox[ SubscriptBox["e", "Ui"], FontSlant->"Italic"], " ", "and", " ", StyleBox[ SubscriptBox["n", "Ui"], FontSlant->"Italic"], " ", "of", " ", "all", " ", "users", " ", StyleBox["U", FontSlant->"Italic"]}], ",", " ", RowBox[{ StyleBox["i", FontSlant->"Italic"], "=", "1"}], ",", "2"}], "\[IndentingNewLine]"}]}, {"secret", RowBox[{ RowBox[{ StyleBox[ SubscriptBox["d", "Ui"], FontSlant->"Italic"], " ", "of", " ", "user", " ", StyleBox["U", FontSlant->"Italic"]}], ",", RowBox[{ StyleBox["i", FontSlant->"Italic"], "=", "1"}], ",", "2"}]}, {" ", " "}, {"properties", RowBox[{ StyleBox[ RowBox[{ SubscriptBox["e", "Ui"], SubscriptBox["d", "Ui"]}], FontSlant->"Italic"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "\[CurlyPhi]", RowBox[{"(", StyleBox[ SubscriptBox["n", "Ui"], FontSlant->"Italic"], ")"}]}], ")"}]}]}]}, {" ", RowBox[{" ", RowBox[{ StyleBox[ SubscriptBox["n", "U1"], FontSlant->"Italic"], "<", StyleBox["T", FontSlant->"Italic"], "<", StyleBox[ SubscriptBox["n", "U2"], FontSlant->"Italic"]}]}]}, {" ", " "}, { RowBox[{ RowBox[{"message", " ", "from"}], "\n", "\t", RowBox[{"Alice", " ", "to", " ", "Bob"}]}], RowBox[{"0", "<", StyleBox["m", FontSlant->"Italic"], "<", StyleBox[ SubscriptBox["n", "A1"], FontSlant->"Italic"]}]}, {" ", " "}, { RowBox[{"Alice", " ", "sends"}], RowBox[{ RowBox[{ StyleBox["c", FontSlant->"Italic"], "\[Congruent]", RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ StyleBox[ SuperscriptBox["m", SubscriptBox["d", "A1"]], FontSlant->"Italic"], " ", "mod", " ", StyleBox[ SubscriptBox["n", "A1"], FontSlant->"Italic"]}], ")"}], StyleBox[ SubscriptBox["e", "B2"], FontSlant->"Italic"]], " ", "mod", " ", StyleBox[ SubscriptBox["n", "B2"], FontSlant->"Italic"]}], ")"}]}], " ", "\[IndentingNewLine]"}]}, { RowBox[{"Bob", " ", "computes"}], RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ StyleBox[ SuperscriptBox["c", SubscriptBox["d", "B2"]], FontSlant->"Italic"], " ", "mod", " ", StyleBox[ SubscriptBox["n", "B2"], FontSlant->"Italic"]}], ")"}], StyleBox[ SubscriptBox["e", "A1"], FontSlant->"Italic"]], "mod", " ", StyleBox[ SubscriptBox["n", "A1"], FontSlant->"Italic"]}], ")"}], " ", "=", StyleBox[" ", FontSlant->"Italic"], StyleBox["m", FontSlant->"Italic"]}]}, {" ", " "}, { RowBox[{ RowBox[{"Bob", " ", "keeps", " ", "as"}], "\n", "\t", "signature"}], RowBox[{ RowBox[{ StyleBox["m", FontSlant->"Italic"], " ", "and", " ", RowBox[{"(", RowBox[{ StyleBox[ SuperscriptBox["c", SubscriptBox["d", "B2"]], FontSlant->"Italic"], "mod", " ", StyleBox[ SubscriptBox["n", "B2"], FontSlant->"Italic"]}], ")"}]}], "\n", "\t", RowBox[{"which", " ", "is", " ", "equal", " ", "to"}], "\n", "\t", RowBox[{"(", RowBox[{ StyleBox[ SuperscriptBox["m", SubscriptBox["d", "A1"]], FontSlant->"Italic"], " ", "mod", " ", StyleBox[ SubscriptBox["n", "A1"], FontSlant->"Italic"]}], ")"}]}]}, {" ", " "} }]]]], "DisplayFormula", CellMargins->{{Inherited, 3}, {Inherited, Inherited}}, CellTags->"TableRSA RSA Secr+Sign"], Cell["RSA for privacy and signing", "NumberedTable", PageBreakAbove->False], Cell[TextData[{ "If there is an argument between Alice and Bob, they will go to an \ arbitrator. This arbitrator is given the pair ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"(", RowBox[{ SuperscriptBox["c", SubscriptBox["d", StyleBox["B2", FontSlant->"Italic"]]], " ", "mod", " ", SubscriptBox["n", StyleBox["B2", FontSlant->"Italic"]]}], ")"}]}], TraditionalForm]]], " by Bob. As an integer, the latter is equal to ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["m", SubscriptBox["d", StyleBox["A1", FontSlant->"Italic"]]], " ", "mod", " ", SubscriptBox["n", StyleBox["A1", FontSlant->"Italic"]]}], ")"}], TraditionalForm]]], ", since" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["c", SubscriptBox["d", StyleBox["B2", FontSlant->"Italic"]]], " ", "mod", " ", SubscriptBox["n", StyleBox["B2", FontSlant->"Italic"]]}], ")"}], OverscriptBox["=", ButtonBox[ RowBox[{"(", "9.7", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA RSA secr+sign"]], RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["m", SubscriptBox["d", StyleBox["A1", FontSlant->"Italic"]]], " ", "mod", " ", SubscriptBox["n", StyleBox["A1", FontSlant->"Italic"]]}], ")"}], SubscriptBox["e", StyleBox["B2", FontSlant->"Italic"]]], " ", "mod", " ", SubscriptBox["n", StyleBox["B2", FontSlant->"Italic"]]}], ")"}], SubscriptBox["d", StyleBox["B2", FontSlant->"Italic"]]], " ", "mod", " ", SubscriptBox["n", StyleBox["B2", FontSlant->"Italic"]]}], ")"}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["=", ButtonBox[ RowBox[{"(", "9.5", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA check RSA secr"]], RowBox[{"(", RowBox[{ SuperscriptBox["m", SubscriptBox["d", StyleBox["A1", FontSlant->"Italic"]]], " ", "mod", " ", SubscriptBox["n", StyleBox["A1", FontSlant->"Italic"]]}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Just like in ", ButtonBox["Subsection 9.1.4", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA sign"], ", the arbitrator now checks if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", SubscriptBox["e", StyleBox["A1", FontSlant->"Italic"]]], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", StyleBox["A1", FontSlant->"Italic"]]}], ")"}]}]}], TraditionalForm]]], ".\nIf this is the case, the message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " came indeed from Alice, if not, ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " will not be considered as Alice's signature on ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ".\nNote that the arbitrator does not need to know the secret exponents of \ Alice or Bob to make his decision. Therefore, Alice and Bob can continue to \ use their original set of parameters." }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Security of RSA: Some Factorization Algorithms" }], "Section", CellTags->"SectRSA Security"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tWhat the Cryptanalist Can Do" }], "Subsection", CellTags->"SubsRSA cryptanalist"], Cell[TextData[{ "Suppose that an eavesdropper, say Eve, gets hold of a secret message ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{ SuperscriptBox["m", SubscriptBox["e", "B"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], " for Bob. Once Eve knows the secret exponent ", Cell[BoxData[ FormBox[ SubscriptBox["d", "B"], TraditionalForm]]], " of Bob, she can compute ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from the ciphertext ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " in exactly the same way as Bob can, namely by computing ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", SubscriptBox["d", "B"]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}], TraditionalForm]]], " (see ", ButtonBox["(9.5)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA check RSA secr"], ").\nTo determine ", Cell[BoxData[ FormBox[ SubscriptBox["d", "B"], TraditionalForm]]], " from the public exponent ", Cell[BoxData[ FormBox[ SubscriptBox["e", "B"], TraditionalForm]]], " and the relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["e", "B"], ".", SubscriptBox["d", "B"]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "B"], ")"}]}], ")"}]}]}], TraditionalForm]]], " (see ", ButtonBox["(9.4)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA e.d=1"], ") is easy for Eve as soon as she knows ", Cell[BoxData[ FormBox[ RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "B"], ")"}], TraditionalForm]]], ": just like Bob did when he set up the system, she will use Euclid's \ Algorithm.\nTo find ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "B"], ")"}], "=", RowBox[{ SubscriptBox["p", "B"], ".", SubscriptBox["q", "B"]}]}], TraditionalForm]]], " (see ", ButtonBox["(9.3)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA EulerPhi for RSA"], ") from the publicly known modulus ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], ", Eve will have to find the factorization of ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "At the time of the introduction of RSA, Schroeppel (not published) had a \ modification of a factorization algorithm by Morrison and Brillhart ", ButtonBox["[MorB75]", BaseStyle->"Hyperlink", ButtonData:>"RefMorB75"], ". It involved " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ SuperscriptBox["e", SqrtBox[ RowBox[{"ln", " ", "n", " ", "lnln", " ", "n"}]]], TraditionalForm]]], "\toperations" }], "DisplayFormula"], Cell[TextData[{ "In the next table we have made use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["TableForm", FontVariations->{"Underline"->True}], ", ", StyleBox["Table", FontVariations->{"Underline"->True}], ", ", StyleBox["Exp", FontVariations->{"Underline"->True}], ", ", StyleBox["Sqrt", FontVariations->{"Underline"->True}], ", ", StyleBox["Log", FontVariations->{"Underline"->True}], ", and ", StyleBox["N", FontVariations->{"Underline"->True}], " to give an impression of the growth of the above expression. " }], "Text", CellChangeTimes->{ 3.423393795668473*^9, {3.4234641025740137`*^9, 3.423464107261634*^9}, { 3.4234641645130997`*^9, 3.423464166138141*^9}, {3.42346423160837*^9, 3.423464232952146*^9}, {3.423464412799349*^9, 3.4234644392998576`*^9}}], Cell[BoxData[ RowBox[{"TableForm", "[", RowBox[{ RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"{", RowBox[{"k", ",", " ", RowBox[{"N", "[", RowBox[{ RowBox[{"Exp", "[", " ", RowBox[{"Sqrt", "[", RowBox[{ RowBox[{"Log", "[", RowBox[{"10", "^", "k"}], "]"}], " ", RowBox[{"Log", "[", RowBox[{"Log", "[", RowBox[{"10", "^", "k"}], "]"}], "]"}]}], "]"}], "]"}], ",", " ", "3"}], "]"}]}], "}"}], ",", RowBox[{"{", RowBox[{"k", ",", " ", "25", ",", " ", "250", ",", " ", "25"}], "}"}]}], "]"}], " ", ",", "\t ", RowBox[{"TableHeadings", "->", " ", RowBox[{"{", RowBox[{ RowBox[{"{", "}"}], ",", " ", RowBox[{"{", RowBox[{"\"\\"", ",", " ", "\"\\""}], "}"}]}], "}"}]}], ",", "\t ", RowBox[{"TableAlignments", "->", RowBox[{"{", "Center", "}"}]}]}], "]"}]], "Input", CellChangeTimes->{{3.423393805418535*^9, 3.423393809027933*^9}}], Cell[BoxData[ TagBox[GridBox[{ {"\<\"\"\>", "\<\"length in digits\"\>", "\<\"complexity\"\>"}, {"\<\"\"\>", "25", "4.300737913440851`*^6"}, {"\<\"\"\>", "50", "1.4184430055226408`*^10"}, {"\<\"\"\>", "75", "8.986709684366875`*^12"}, {"\<\"\"\>", "100", "2.341538249060713`*^15"}, {"\<\"\"\>", "125", "3.408485877580624`*^17"}, {"\<\"\"\>", "150", "3.256228585198576`*^19"}, {"\<\"\"\>", "175", "2.250449619602972`*^21"}, {"\<\"\"\>", "200", "1.2000317200316793`*^23"}, {"\<\"\"\>", "225", "5.165902782909027`*^24"}, {"\<\"\"\>", "250", "1.856059844156285`*^26"} }, GridBoxAlignment->{ "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[2.0999999999999996`]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], Function[BoxForm`e$, TableForm[ BoxForm`e$, TableHeadings -> {{}, {"length in digits", "complexity"}}, TableAlignments -> {Center}]]]], "Output"], Cell[TextData[{ "As one can see, if ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is about 200 digits long, the above cryptanalysis is clearly not \ tractable. On the other hand, much larger numbers have been factored than was \ thought to be possible at the time that the original RSA scheme was proposed \ (at the time of the printing the record stood at 512 bits numbers). For this \ reason, one now sees proposals for implementations of RSA with a much larger \ modulus." }], "Text"], Cell[TextData[{ "An example of a fast modern factorization algorithm can be found in ", ButtonBox["[LensH86]", BaseStyle->"Hyperlink", ButtonData:>"RefLens86"], ". Other methods will be discussed in ", ButtonBox["Section 9.2.3", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Factorization General"], ". There does exist special factorization algorithms that run faster if ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is of a special form. We shall discuss one of these methods in the next \ subsection." }], "Text"], Cell[TextData[{ "Up to now, there seems to be no way of breaking the RSA system other than \ by factoring the modulus ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". There is no formal proof however that these two problems are equivalent. \ In ", ButtonBox["Section 9.5", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Rabin"], " we shall discuss a variant of the RSA system for which it can be shown \ that breaking it is equivalent to factoring its modulus." }], "Text", CellTags->"DiscRSA fact=break"], Cell[TextData[{ "A drawback of having to choose large moduli is that the execution of a \ single exponentiation takes more time than one may like, especially when one \ wants to encrypt a long file. Quite often in such a situation one shall use a \ hybrid system: a symmetric system with secret key ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is used for encryption of the data and the RSA scheme is used to send this \ key securely to the receiver (using the public parameters of the receiver)." }], "Text"], Cell[TextData[{ "When generating ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " it is a bad idea to first generate ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and then try out ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "+", "2"}], ",", RowBox[{"p", "+", "4"}], ",", " ", "\[Ellipsis]"}], TraditionalForm]]], " for primality. One really wants ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "q"}], TraditionalForm]]], " to be large. Indeed, if a cryptanalist can guess ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "q"}], TraditionalForm]]], ", for instance by checking all likely values, it follows from " }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"4", "n"}], "=", RowBox[{ RowBox[{"4", RowBox[{"p", ".", "q"}]}], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"p", "+", "q"}], ")"}], "2"], "-", SuperscriptBox[ RowBox[{"(", RowBox[{"p", "-", "q"}], ")"}], "2"]}]}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ " that ", Cell[BoxData[ FormBox[ RowBox[{"p", "+", "q"}], TraditionalForm]]], " also can be determined. From these two linear relations ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " can be found, which implies that the system has been broken." }], "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"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "5007958289"}], TraditionalForm]]], ". Guessing that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "p"}], "=", "200"}], TraditionalForm]]], ", we get ", Cell[BoxData[ FormBox[ RowBox[{"p", "+", "q"}], TraditionalForm]]], " from" }], "Example", CellTags->"ExamRSA p-q small"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "5007958289"}], ";", SqrtBox[ RowBox[{ RowBox[{"4", "n"}], "+", SuperscriptBox["200", "2"]}]]}]], "Input", GeneratedCell->True], Cell[BoxData["141534"], "Output"], Cell[TextData[{ "From ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "+", "q"}], "=", SqrtBox[ RowBox[{ RowBox[{"4", "n"}], "+", SuperscriptBox["200", "2"]}]]}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "p"}], "=", "200"}], TraditionalForm]]], ", we get that ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", RowBox[{ RowBox[{"(", RowBox[{ SqrtBox[ RowBox[{ RowBox[{"4", "n"}], "+", SuperscriptBox["200", "2"]}]], "+", "200"}], ")"}], "/", "2"}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"q", "=", RowBox[{ RowBox[{"(", RowBox[{ SqrtBox[ RowBox[{ RowBox[{"4", "n"}], "+", SuperscriptBox["200", "2"]}]], "+", "200"}], ")"}], "/", "2"}]}], "\n", RowBox[{"p", "=", RowBox[{"q", "-", "200"}]}]}], "Input"], Cell[BoxData["70867"], "Output"], Cell[BoxData["70667"], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"p", "*", "q"}], "==", "n"}]], "Input"], Cell[BoxData["True"], "Output"] }, Open ]], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"|", RowBox[{"p", "-", "q"}], "|"}], TraditionalForm]]], " has to be large. A way to do this is to take ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " more than ", Cell[BoxData[ FormBox[ RowBox[{"p", "+", SqrtBox["p"]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "In the literature one can also find a few attacks on the RSA system, that \ have a probability of success which is not significantly more than the \ probability that a randomly chosen integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " smaller than ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " has a non-trivial factor in common with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". This factor would then be ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " or ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". The probability that the latter happens can be evaluated with the ", ButtonBox["Euler Totient function", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], " ", Cell[BoxData[ FormBox[ RowBox[{"\[CurlyPhi]", "(", "n", ")"}], TraditionalForm]]], " and is given by" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{"n", "-", RowBox[{"\[CurlyPhi]", "(", "n", ")"}]}], "n"], OverscriptBox["=", RowBox[{"(", "9.3", ")"}]], RowBox[{ FractionBox[ RowBox[{ RowBox[{"p", ".", "q"}], "-", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], RowBox[{"p", ".", "q"}]], "=", RowBox[{ FractionBox[ RowBox[{"p", "+", "q", "-", "1"}], RowBox[{"p", ".", "q"}]], "\[TildeTilde]", FractionBox["1", "p"]}]}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "assuming that ", Cell[BoxData[ FormBox[ RowBox[{"p", "<", "q"}], TraditionalForm]]], ". That one should not take ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " too small will follow from the factorization algorithm that we shall \ discuss in the next subsection." }], "Text"], Cell["\<\ Because the \"attacks\" mentioned above have such a small probability of \ success, we choose not to discuss them here. Some of the problems at the end \ of this chapter are based on them.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tA Factorization Algorithm for a Special Class of Integers" }], "Subsection", CellTags->"SubsRSA factorization"], Cell[TextData[{ "We shall now briefly discuss a factorization algorithm that runs faster \ than the general factorization algorithms that we shall address later under \ the assumption that at least one of the prime factors of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", say ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", has the property that ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " only contains small prime factors." }], "Text"], Cell[CellGroupData[{ Cell[TextData[{ "Pollard's ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " Method" }], "Subsubsection", CellTags->"SubsubsRSA Pollard p-1"], Cell[TextData[{ "In ", ButtonBox["[Poll75]", BaseStyle->"Hyperlink", ButtonData:>"RefPoll75"], ", Pollard describes a way to factor ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SqrtBox["p"], TraditionalForm]]], " steps, where ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is the smallest prime divisor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". This explains why we have to take ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " both large." }], "Text", GeneratedCell->True], Cell[TextData[{ "The assumption in Pollard's ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " method is that in the factorization of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " at least one of the two factors, say ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", has the property that ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " has only small prime factors. To be more precise, an integer is said to be \ ", StyleBox["smooth", FontSlant->"Italic"], " (see also ", ButtonBox["Subsection 8.3.4", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], ") with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " if all its prime factors are less than or equal to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". We shall assume that ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " is smooth with respect to some integer ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "Text", CellTags->"DefRSA Smooth"], 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 prime number ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "70877"}], TraditionalForm]]], " has the property that ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " is smooth with respect to ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", "50"}], TraditionalForm]]], ", as one can check with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], " and ", StyleBox["PrimeQ", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{ 3.423397296440878*^9, {3.423460367111854*^9, 3.423460367861854*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "70877"}], ";", RowBox[{"PrimeQ", "[", "p", "]"}]}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"p", "-", "1"}], "]"}]}], "Input"], Cell[BoxData["True"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"13", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"29", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"47", ",", "1"}], "}"}]}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ "For each prime number ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"r", "\[LessEqual]", "S"}], TraditionalForm]]], ", the largest power of ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " that is still less than or equal to ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " can be determined from" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["r", "i"], "\[LessEqual]", "n"}], TraditionalForm]]], "\t, or, equivalently,\t", Cell[BoxData[ FormBox[ RowBox[{"i", "\[LessEqual]", RowBox[{ SubscriptBox["log", "r"], "n"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Define ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " by" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"R", "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{ RowBox[{"p", "\[LessEqual]", "S"}], ",", " ", RowBox[{"p", " ", "prime"}]}]], SuperscriptBox["p", RowBox[{"\[LeftFloor]", RowBox[{ SubscriptBox["log", "r"], "n"}], "\[RightFloor]"}]]}]}], TraditionalForm]]]], "NumberedEquation", CellTags->"FormRSA prod prime smooth"], 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"], "\nConsider the number ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "6700892281"}], TraditionalForm]]], " and assume that at least on of its factors, say ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", is smooth with respect to ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", "50"}], TraditionalForm]]], ". It follows with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Prime", FontVariations->{"Underline"->True}], Cell[BoxData[ FormBox[ RowBox[{"[", "n", "]"}], TraditionalForm]]], ", which gives the number of primes less than or equal to ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", and from " }], "Example", CellChangeTimes->{{3.423464490707095*^9, 3.423464553927058*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"Prime", "[", "15", "]"}], "\n", RowBox[{"Prime", "[", "16", "]"}]}], "Input"], Cell[BoxData["47"], "Output"], Cell[BoxData["53"], "Output"] }, Open ]], Cell[TextData[{ "that there are 15 primes less than or equal to ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", "50"}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " can be calculated from ", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"(", "9.8", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA prod prime smooth"], TraditionalForm]]], " with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Prime", FontVariations->{"Underline"->True}], ", ", StyleBox["Log", FontVariations->{"Underline"->True}], ", and ", StyleBox["Floor", FontVariations->{"Underline"->True}], " as follows" }], "Text", CellChangeTimes->{ 3.4233974104416075`*^9, {3.4234642590307713`*^9, 3.4234642598120365`*^9}, { 3.4234645677241983`*^9, 3.423464571052387*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "6700892281"}], ";", RowBox[{"R", "=", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "15"], SuperscriptBox[ RowBox[{"(", RowBox[{"Prime", "[", "i", "]"}], ")"}], RowBox[{"Floor", "[", " ", RowBox[{"Log", "[", RowBox[{ RowBox[{"Prime", "[", "i", "]"}], ",", "n"}], "]"}], "]"}]]}]}]}]], "Input", GeneratedCell->True], Cell[BoxData[\ "40495671803608715715481098873511450516871546389351490245060727076702214282424\ 81373494650191940316796203975457787003008948633600000000000000"], "Output"], Cell["\<\ To see the exponents of the primes up to 50 (out of curiosity), we give\ \>", "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"FactorInteger", "[", "R", "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "32"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "20"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "14"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "11"}], "}"}], ",", RowBox[{"{", RowBox[{"11", ",", "9"}], "}"}], ",", RowBox[{"{", RowBox[{"13", ",", "8"}], "}"}], ",", RowBox[{"{", RowBox[{"17", ",", "7"}], "}"}], ",", RowBox[{"{", RowBox[{"19", ",", "7"}], "}"}], ",", RowBox[{"{", RowBox[{"23", ",", "7"}], "}"}], ",", RowBox[{"{", RowBox[{"29", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"31", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"37", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"41", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"43", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"47", ",", "5"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " is smooth with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", each prime power ", Cell[BoxData[ FormBox[ SuperscriptBox["r", "i"], TraditionalForm]]], " that divides ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], ", will also be a factor of ", Cell[BoxData[ FormBox["R", TraditionalForm]]], ", since ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " will be at most ", Cell[BoxData[ FormBox[ RowBox[{"\[LeftFloor]", RowBox[{ SubscriptBox["log", "r"], " ", "n"}], "\[RightFloor]"}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["R", TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "We know from ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " (Thm. A.15) that any integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "\[LessEqual]", "a", "<", "p"}], ","}], TraditionalForm]]], " will satisfy ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{"p", "-", "1"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "|", "R"}], TraditionalForm]]], ", also ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "R"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "Now take a random integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "a", "<", "n"}], TraditionalForm]]], ", and check if ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "n"}], ")"}], "=", "1"}], TraditionalForm]]], ". If this gcd is not 1, we have found a factor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and we are done.\nIf ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "n"}], ")"}], "=", "1"}], TraditionalForm]]], " it follows from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "R"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " that ", Cell[BoxData[ FormBox[ RowBox[{"p", "|", RowBox[{"(", RowBox[{ SuperscriptBox["a", "R"], "-", "1"}], ")"}]}], TraditionalForm]]], ". Since it is very unlikely that also ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "R"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], ", we shall almost certainly find a factor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " (namely ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ") from ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["a", "R"], "-", "1"}], ",", "n"}], ")"}], TraditionalForm]]], ". Note that ", Cell[BoxData[ FormBox[ SuperscriptBox["a", "R"], TraditionalForm]]], " does not have to be evaluated for this calculation, the value of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "R"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}], TraditionalForm]]], " suffices." }], "Text"], Cell[TextData[{ StyleBox["Example 9.4 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nTo find a factor of ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "6709248019"}], TraditionalForm]]], " we pick a random ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " in between 2 and ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], " and compute the gcd of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "R"], "-", "1"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " by means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["RandomInteger", FontVariations->{"Underline"->True}], ", ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ", and ", StyleBox["GCD", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423396556373641*^9, 3.4233965612174225`*^9}, 3.4233968565943127`*^9, {3.423460732832009*^9, 3.4234607335820136`*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"a", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{"2", ",", "n"}], "}"}], "]"}]}], "\n", RowBox[{"GCD", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"a", ",", "R", ",", "n"}], "]"}], "-", "1"}], ",", "n"}], "]"}]}], "Input"], Cell[BoxData["5974056639"], "Output"], Cell[BoxData["81919"], "Output"], Cell[TextData[{ "It follows that ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "81919"}], TraditionalForm]]], " is a factor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". The other factor follows from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "/", "p"}], "=", "81799"}], TraditionalForm]]], ". Note that if ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is also smooth with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", we would have found ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " as outcome of the gcd calculation." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "We summarize Pollard's ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " method in the following table. " }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{ StyleBox["input", FontWeight->"Bold"], ":", " ", RowBox[{"integer", " ", RowBox[{ FormBox["n", TraditionalForm], ".", "\n", StyleBox["select", FontWeight->"Bold"]}], " ", StyleBox["a", FontSlant->"Plain"], " ", "smoothness", " ", "parameter", " ", RowBox[{ StyleBox["S", FontSlant->"Italic"], StyleBox[".", FontSlant->"Italic"], "\t\t\t", "\n", StyleBox["calculate", FontWeight->"Bold"]}], StyleBox[" ", FontWeight->"Bold"], StyleBox["R", FontSlant->"Italic"], " ", "from", " ", RowBox[{ ButtonBox[ RowBox[{"(", "9.8", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA prod prime smooth"], ".", "\t", "\n", StyleBox["select", FontWeight->"Bold"]}], " ", StyleBox["a", FontSlant->"Plain"], " ", "random", " ", StyleBox["a", FontSlant->"Italic"]}]}], ",", " ", RowBox[{ RowBox[{ StyleBox["2", FontSlant->"Italic"], StyleBox["\[LessEqual]", FontSlant->"Italic"], StyleBox["a", FontSlant->"Italic"], StyleBox["<", FontSlant->"Italic"], RowBox[{ RowBox[{ StyleBox["n", FontSlant->"Italic"], StyleBox[".", FontSlant->"Italic"], "\n", StyleBox["compute", FontWeight->"Bold"]}], " ", StyleBox["d", FontSlant->"Italic"]}]}], StyleBox["=", FontSlant->"Italic"], RowBox[{ RowBox[{ StyleBox["gcd", FontSlant->"Italic"], RowBox[{ StyleBox[ RowBox[{"(", RowBox[{ RowBox[{ SuperscriptBox["a", "R"], "-", "1"}], ",", "n"}], ")"}], FontSlant->"Italic"], StyleBox[".", FontSlant->"Italic"], "\t\t", "\n", StyleBox["if", FontWeight->"Bold"]}], " ", "1"}], "<", StyleBox["d", FontSlant->"Italic"], StyleBox["<", FontSlant->"Italic"], RowBox[{ StyleBox["n", FontSlant->"Italic"], " ", StyleBox["then", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], StyleBox["d", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "is", " ", StyleBox["a", FontSlant->"Plain"], " ", "factor", " ", "of", " ", StyleBox["n", FontSlant->"Italic"]}]}]}]}], "\n", "\t\t"}], "\n", RowBox[{" \t\t ", RowBox[{ StyleBox["else", FontWeight->"Bold"], " ", "STOP", " ", "or", " ", "select", " ", StyleBox["a", FontSlant->"Plain"], " ", "new", " ", "random", " ", StyleBox["a", FontSlant->"Italic"]}]}]}], "DisplayFormula", CellMargins->{{54.625, 2.25}, {Inherited, Inherited}}, TextAlignment->Left, TextJustification->0], Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ RowBox[{"Pollard", "'"}], "s", " ", FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm], " ", "Method", " ", "to", " ", "Factor"}], TextForm], " ", StyleBox["n", FontSlant->"Italic"]}], TextForm]], "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "To make Pollard's ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], "method infeasible, one often chooses so-called ", StyleBox["safe primes", FontSlant->"Italic"], " when setting up the RSA system. These strong primes are primes ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " of the form ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", RowBox[{ RowBox[{"2", RowBox[{"p", "'"}]}], "+", "1"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{"p", "'"}], TraditionalForm]]], " is a (large) prime. In this case, ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " has just one small factor." }], "Text", CellTags->"DefRSA Strong prime"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tGeneral Factorization Algorithms" }], "Subsection", CellTags->"SubsRSA Factorization General"], Cell[CellGroupData[{ Cell["The Pollard-\[CurlyRho] Method", "Subsubsection", CellTags->"SubsubsRSA Pollard rho"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be an unknown prime factor of the integer ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " that we want to factor. Now look at the sequence ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]"}], TraditionalForm]]], ", defined recursively by " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "0"], "=", "1"}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", RowBox[{"i", "+", "1"}]], "\[Congruent]", RowBox[{ SubsuperscriptBox["a", "i", "2"], "+", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Suppose that we have found indices ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"v", ">", "u"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "u"], "\[Congruent]", RowBox[{ SubscriptBox["a", "v"], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". Then clearly ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SubscriptBox["a", "v"], "-", SubscriptBox["a", "u"]}], ",", "n"}], ")"}], TraditionalForm]]], " is divisible by ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and very likely this gcd is equal to ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ".\nOf course, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is not known, so we replace the above recursion relation by" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "0"], "=", "1"}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", RowBox[{"i", "+", "1"}]], "\[Congruent]", RowBox[{ SubsuperscriptBox["a", "i", "2"], "+", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "Since ", Cell[BoxData[ FormBox[ RowBox[{"p", "|", "n"}], TraditionalForm]]], " we will find the factor ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SubscriptBox["a", "v"], "-", SubscriptBox["a", "u"]}], ",", "n"}], ")"}], TraditionalForm]]], " for the same values of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " (the probability that other large factors of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " divide this gcd is negligible)." }], "Text"], Cell[TextData[{ "Instead of having to store all previously computed values of ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], ", we use ", ButtonBox["Floyd's cycle-finding algorithm", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Floyd"], " to find an index ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", RowBox[{"2", "k"}]], "=", SubscriptBox["a", "k"]}], TraditionalForm]]], " and then we take ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "k"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", RowBox[{"2", "k"}]}], TraditionalForm]]], ". The idea is simply that one starts with ", Cell[BoxData[ FormBox[ SubscriptBox["a", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["a", "2"], TraditionalForm]]], " and recursively determines the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["a", RowBox[{"2", "i"}]]}], ")"}], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", RowBox[{"i", "-", "1"}]], ",", SubscriptBox["a", RowBox[{"2", RowBox[{"(", RowBox[{"i", "-", "1"}], ")"}]}]]}], ")"}], TraditionalForm]]], "." }], "Text"], Cell["The above is summarized in the following figure.", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{ StyleBox["input", FontWeight->"Bold"], ":", " ", RowBox[{"integer", " ", RowBox[{"n", ".", "\n", StyleBox["put", FontWeight->"Bold"]}], " ", FormBox[ RowBox[{"a", "=", "1"}], TraditionalForm]}]}], ",", " ", RowBox[{ RowBox[{ FormBox[ RowBox[{"b", "=", "2"}], TraditionalForm], ".", "\n", StyleBox["do", FontWeight->"Bold"]}], " ", FormBox[ RowBox[{"a", "\[LeftArrow]", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["a", "2"], "+", "1"}], ")"}], " ", "mod", " ", "n"}]}], TraditionalForm]}], " ", ",", " ", "\n", " ", RowBox[{"b", "\[LeftArrow]", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["b", "2"], "+", "1"}], ")"}], " ", "mod", " ", "n"}], ")"}], "2"], "+", "1"}], ")"}], " ", "mod", " ", "n"}]}]}], "\n", RowBox[{ RowBox[{ StyleBox["until", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], StyleBox["d", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{ RowBox[{"gcd", RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}]}], ">", "1"}], FontSlant->"Italic"]}], "\n", RowBox[{ RowBox[{ StyleBox["if", FontWeight->"Bold"], " ", StyleBox["d", FontSlant->"Italic"]}], StyleBox["<", FontSlant->"Italic"], RowBox[{ StyleBox["n", FontSlant->"Italic"], " ", StyleBox["then", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], StyleBox["d", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "is", " ", "a", " ", "factor", " ", "of", " ", StyleBox["n", FontSlant->"Italic"]}]}], "\n", RowBox[{" ", RowBox[{ StyleBox["else", FontWeight->"Bold"], " ", "STOP"}]}]}], "DisplayFormula"], Cell[TextData[{ "Pollard's ", Cell[BoxData[ FormBox["\[CurlyRho]", TraditionalForm]]], " Method to Factor ", Cell[BoxData[ FormBox["n", TraditionalForm]]] }], "NumberedFigure", TextAlignment->Center, TextJustification->0], 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"], "To find a factor of", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"n", "=", "9032411471"}], TraditionalForm]]], " with the above method we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["While", FontVariations->{"Underline"->True}], ", ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", and ", StyleBox["GCD", FontVariations->{"Underline"->True}], " functions." }], "Example", CellChangeTimes->{ 3.423396038245325*^9, 3.4233968607505894`*^9, {3.4234545016601872`*^9, 3.4234545032226872`*^9}}, CellTags->"ExamRSA Pollard rho"], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "168149075693"}], ";"}], "\n", RowBox[{ RowBox[{"a", "=", "1"}], ";", RowBox[{"b", "=", "2"}], ";", RowBox[{"d", "=", RowBox[{"GCD", "[", RowBox[{ RowBox[{"b", "-", "a"}], ",", "n"}], "]"}]}], ";"}], "\n", RowBox[{"While", "[", RowBox[{ RowBox[{"d", "==", "1"}], ",", RowBox[{ RowBox[{"a", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["a", "2"], "+", "1"}], ",", "n"}], "]"}]}], ";", RowBox[{"b", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["b", "2"], "+", "1"}], ",", "n"}], "]"}], ")"}], "2"], "+", "1"}], ",", "n"}], "]"}]}], ";", RowBox[{"d", "=", RowBox[{"GCD", "[", RowBox[{ RowBox[{"b", "-", "a"}], ",", "n"}], "]"}]}]}]}], "]"}], "\n", "d"}], "Input", CellChangeTimes->{3.4233960442297387`*^9}], Cell[BoxData["350377"], "Output"], Cell[TextData[{ "So, 350377 is a factor of ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "168149075693"}], TraditionalForm]]], ". The quotient ", Cell[BoxData[ FormBox[ RowBox[{"n", "/", "p"}], TraditionalForm]]], " is 479909, which happens to be a prime too, as can easily be checked with \ the function ", StyleBox["PrimeQ", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.423397302940919*^9}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"a", "=", RowBox[{"n", "/", "350377"}]}], "\n", RowBox[{"PrimeQ", "[", "a", "]"}]}], "Input"], Cell[BoxData["479909"], "Output"], Cell[BoxData["True"], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Random Square Factoring Methods", "Subsubsection", CellTags->"SubsubsRSA Random Square"], Cell[TextData[{ "This method and the next one are related to the ", ButtonBox["Index-Calculus Method", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Index Calc"], " discussed in Subsection 8.3.4. The reader may want to read the \ introduction there first, but that will not necessary for the understanding \ of the discussion here. We assume that ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is a composite odd integer." }], "Text"], Cell["The method consists of the following four steps.", "Text"], Cell[TextData[{ StyleBox["Step", FontVariations->{"Underline"->True}], " 1:\nConstruct the set ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", RowBox[{"{", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "k"]}], "}"}]}], TraditionalForm]]], " consisting of the first ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " prime numbers, so ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "=", "2"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "2"], "=", "3"}], TraditionalForm]]], ", etc. The set ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " will be called the ", ButtonBox["factor base", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], "." }], "Text"], Cell[TextData[{ StyleBox["Step", FontVariations->{"Underline"->True}], " 2:\nFind sufficiently many pairs ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["b", "i"]}], ")"}], TraditionalForm]]], " such that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["a", "i", "2"], "\[Congruent]", RowBox[{ SubscriptBox["b", "i"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " " }], "NumberedEquation", CellTags->"FormRSA a^2=b"], Cell[TextData[{ "and such that ", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], " is ", ButtonBox["smooth", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], " factors completely into elements of the factor base ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", say" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", "i"], "=", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"j", "=", "1"}], "k"], SubscriptBox[ SubsuperscriptBox["p", "j", "u"], RowBox[{"i", ",", "j"}]]}]}], TraditionalForm]]], ", \twith ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", RowBox[{"i", ",", "j"}]], "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Put ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], "=", RowBox[{"(", RowBox[{ SubscriptBox["u", RowBox[{"1", ",", "1"}]], ",", SubscriptBox["u", RowBox[{"1", ",", "2"}]], ",", "\[Ellipsis]", ",", SubscriptBox["u", RowBox[{"1", ",", "k"}]]}], ")"}]}], TraditionalForm]]], ". Pairs ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["b", "i"]}], ")"}], TraditionalForm]]], " satisfying property (9.10) can be found by trying random choices of ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ". An alternative is to use any suitable recursion relation that generates \ candidates for ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ". For instance, after trying ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "=", "a"}], TraditionalForm]]], " one may want to try ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "=", RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["a", "2"], "+", "1"}], ")"}], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Step", FontVariations->{"Underline"->True}], " 3:\nFind a collection of ", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], "'s whose product is a perfect square. Quite clearly, only the parity of the \ ", Cell[BoxData[ FormBox[ SubscriptBox["u", RowBox[{"i", ",", "j"}]], TraditionalForm]]], "'s matters in this condition, so let us put ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", RowBox[{"i", ",", "j"}]], "=", RowBox[{"(", RowBox[{ SubscriptBox["u", RowBox[{"i", ",", "j"}]], " ", "mod", " ", "2"}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"], "=", RowBox[{"(", RowBox[{ SubscriptBox["v", RowBox[{"1", ",", "1"}]], ",", SubscriptBox["v", RowBox[{"1", ",", "2"}]], ",", "\[Ellipsis]", ",", SubscriptBox["v", RowBox[{"1", ",", "k"}]]}], ")"}]}], TraditionalForm]]], ". We write ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"], "\[Congruent]", RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], " ", RowBox[{"(", RowBox[{"mod", " ", "2"}], ")"}]}]}], TraditionalForm]]], ".\nSince any ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", "1"}], TraditionalForm]]], " vectors ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " (all of length ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ") must be linearly dependent over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "2"], TraditionalForm]]], ", there must be a non-trivial linear combination adding up to ", StyleBox["0", FontVariations->{"Underline"->True}], ". Such a linear combination can be found very efficiently with standard \ methods from linear algebra.\nLet ", Cell[BoxData[ FormBox["I", TraditionalForm]]], " denote the subset of ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "k"}], "}"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"i", "\[Element]", "I"}]], SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"]}], "\[Congruent]", RowBox[{ StyleBox["0", FontVariations->{"Underline"->True}], StyleBox[" ", FontVariations->{"Underline"->True}], RowBox[{"(", " ", RowBox[{"mod", " ", "2"}], ")"}]}]}], StyleBox[" ", FontVariations->{"Underline"->True}]}], TraditionalForm]]], ". Set" }], "Text", CellTags->"StepRSA quadr sieve 3"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"x", "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{"i", "\[Element]", "I"}]], SubscriptBox["a", "i"]}]}], TraditionalForm]]], " \tand \t", Cell[BoxData[ FormBox[ RowBox[{"y", "=", SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[Product]", RowBox[{"i", "\[Element]", "I"}]], SubscriptBox["b", "i"]}], ")"}], RowBox[{"1", "/", "2"}]]}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell[TextData[{ StyleBox["Step", FontVariations->{"Underline"->True}], " 4:\nIt follows from ", ButtonBox["(9.10)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA a^2=b"], " that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{ SuperscriptBox["y", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"x", "-", "y"}], ")"}], RowBox[{"(", RowBox[{"x", "+", "y"}], ")"}]}], TraditionalForm]]], ". Assume that ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[NotCongruent]", RowBox[{ RowBox[{"\[PlusMinus]", "y"}], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " (the probability that this happens is at least 1/2 as we shall see in a \ moment and as will be demonstrated more extensively in ", ButtonBox["Subsection 9.5.1", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Rabin Encr"], " for the case that ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is the product of two different primes). Then ", Cell[BoxData[ FormBox[ RowBox[{"x", "-", "y"}], TraditionalForm]]], " must be divisible by a non-trivial divisor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". In other words, ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{"x", "-", "y"}], ",", "n"}], ")"}], TraditionalForm]]], " yields a non-trivial factor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ".\nIf ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"x", "-", "y"}], ",", "n"}], ")"}], "=", "n"}], TraditionalForm]]], " one has to try to find another perfect square, either by another linear \ dependency between the ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], "'s or by exchanging one of the pairs ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["b", "i"]}], ")"}], TraditionalForm]]], " for a new one. " }], "Text"], Cell[TextData[{ "Consider the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{ SuperscriptBox["y", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " where ", Cell[BoxData[ FormBox["y", TraditionalForm]]], " is assumed to have a given fixed value that is coprime with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". Further, let ", Cell[BoxData[ FormBox[ SuperscriptBox["p", "a"], TraditionalForm]]], " be any factor in the prime power decomposition of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " (see ", ButtonBox["Theorem A.6", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fundamental"], "). Then ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{ SuperscriptBox["y", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", SuperscriptBox["p", "a"]}], ")"}]}]}], TraditionalForm]]], " has just two solutions, namely ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "y"}], " ", RowBox[{"(", RowBox[{"mod", " ", SuperscriptBox["p", "a"]}], ")"}]}]}], TraditionalForm]]], ". Indeed, for ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", "1"}], TraditionalForm]]], " this follows from ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], ". For ", Cell[BoxData[ FormBox[ RowBox[{"a", ">", "1"}], TraditionalForm]]], ", we still have that ", Cell[BoxData[ FormBox[ SuperscriptBox["p", "a"], TraditionalForm]]], " must divide either ", Cell[BoxData[ FormBox[ RowBox[{"x", "-", "y"}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{"x", "+", "y"}], TraditionalForm]]], ", because if ", Cell[BoxData[ FormBox[ RowBox[{"p", "|", RowBox[{"(", RowBox[{"x", "-", "y"}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"p", "|", RowBox[{"(", RowBox[{"x", "+", "y"}], ")"}]}], TraditionalForm]]], " then ", Cell[BoxData[ FormBox[ RowBox[{"p", "|", RowBox[{"2", "y"}]}], TraditionalForm]]], ", but ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[NotVerticalBar]", "y"}], TraditionalForm]]], " (since ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is odd, also ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " will be odd). We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "y"}], " ", RowBox[{"(", RowBox[{"mod", " ", SuperscriptBox["p", "a"]}], ")"}]}]}], TraditionalForm]]], " also when ", Cell[BoxData[ FormBox[ RowBox[{"a", ">", "1"}], TraditionalForm]]], ".\nIt now follows directly from the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19) that relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{ SuperscriptBox["y", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " has ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "l"], TraditionalForm]]], " solutions, where ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " is the number of different prime numbers dividing ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". Only two of these ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "l"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"l", "\[GreaterEqual]", "2"}], TraditionalForm]]], ", solutions are given by ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "y"}], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ", therefore, the probability that ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{"x", "-", "y"}], ",", "n"}], ")"}], TraditionalForm]]], " yields a non-trivial factor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is at least ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["2", "l"], "-", "2"}], ")"}], "/", SuperscriptBox["2", "l"]}], "\[GreaterEqual]", RowBox[{"2", "/", "4"}]}], "=", RowBox[{"1", "/", "2."}]}], TraditionalForm]]] }], "Text", GeneratedCell->True], Cell[BoxData[{ RowBox[{ RowBox[{ StyleBox["input", FontWeight->"Bold"], ":", " ", RowBox[{"integer", StyleBox[" ", FontSlant->"Italic"], RowBox[{ StyleBox["n", FontSlant->"Italic"], StyleBox[".", FontSlant->"Italic"], "\n", StyleBox["make", FontWeight->"Bold", FontSlant->"Plain"]}], StyleBox[" ", FontSlant->"Italic"], "factor", " ", "base", StyleBox[" ", FontSlant->"Italic"], StyleBox["S", FontSlant->"Italic"]}]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{"{", RowBox[{ SubscriptBox["p", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "k"]}], "}"}], FontSlant->"Italic"]}], "\n", RowBox[{ StyleBox["find", FontWeight->"Bold"], " ", "pairs", StyleBox[" ", FontSlant->"Italic"], StyleBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["b", "i"]}], ")"}], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "with"}], "\n", RowBox[{" ", StyleBox[" ", FontSlant->"Italic"], RowBox[{ RowBox[{ StyleBox[ SubscriptBox["a", "i"], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], StyleBox["random", FontSlant->"Plain"]}], StyleBox[",", FontSlant->"Plain"], StyleBox[" ", FontSlant->"Italic"], StyleBox[ RowBox[{ SubsuperscriptBox["a", "i", "2"], "\[Congruent]", RowBox[{ SubscriptBox["b", "i"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], FontSlant->"Italic"], StyleBox[",", FontSlant->"Italic"], StyleBox[ StyleBox[ RowBox[{ StyleBox[" ", FontSlant->"Italic"], " "}]], FontSlant->"Italic"], RowBox[{ StyleBox[ SubscriptBox["b", "i"], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], StyleBox["smooth", FontSlant->"Plain"], StyleBox[" ", FontSlant->"Plain"], RowBox[{ StyleBox["w", FontSlant->"Plain"], StyleBox[".", FontSlant->"Plain"], StyleBox["r", FontSlant->"Plain"], StyleBox[".", FontSlant->"Plain"], StyleBox["t", FontSlant->"Plain"], StyleBox[".", FontSlant->"Plain"], StyleBox[" ", FontSlant->"Italic"], StyleBox["S", FontSlant->"Italic"]}]}]}]}], "\n", RowBox[{ StyleBox["find", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], "index", " ", "set", StyleBox[" ", FontSlant->"Italic"], StyleBox["I", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "such", " ", "that", StyleBox[" ", FontSlant->"Italic"], RowBox[{ StyleBox[ SubscriptBox["\[Product]", RowBox[{"i", "\[Element]", "I"}]], FontSlant->"Italic"], RowBox[{ StyleBox[ SubscriptBox["b", "i"], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "is", " ", "a", " ", "perfect", " ", "square"}]}]}], "\n", RowBox[{ RowBox[{ RowBox[{ StyleBox["put", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ RowBox[{ StyleBox[" ", FontSlant->"Italic"], " "}]], StyleBox["x", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{ SubscriptBox["\[Product]", RowBox[{"i", "\[Element]", "I"}]], SubscriptBox["a", "i"]}], FontSlant->"Italic"]}], StyleBox[",", FontSlant->"Italic"], StyleBox[ RowBox[{"y", "=", SqrtBox[ RowBox[{ SubscriptBox["\[Product]", RowBox[{"i", "\[Element]", "I"}]], SubscriptBox["b", "i"]}]]}], FontSlant->"Italic"]}], "\n", RowBox[{ RowBox[{ StyleBox["put", FontWeight->"Bold"], " ", StyleBox["d", FontSlant->"Plain"]}], StyleBox["=", FontSlant->"Plain"], StyleBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{"x", "-", "y"}], ",", "n"}], ")"}], FontSlant->"Plain"]}], "\n", RowBox[{ RowBox[{ StyleBox["if", FontWeight->"Bold"], " ", StyleBox["d", FontSlant->"Italic"]}], StyleBox["<", FontSlant->"Italic"], RowBox[{ StyleBox["n", FontSlant->"Italic"], " ", StyleBox["then", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], StyleBox["d", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "is", " ", "a", " ", "factor", " ", "of", " ", StyleBox["n", FontSlant->"Italic"]}]}], "\n", RowBox[{" ", RowBox[{ StyleBox["else", FontWeight->"Bold"], " ", "retry", " ", "with", " ", "other", " ", StyleBox["I", FontSlant->"Italic"]}]}]}], "DisplayFormula"], Cell["Factoring by Random Squares", "NumberedFigure", TextAlignment->Center, TextJustification->0], 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 try to factor ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "1271"}], TraditionalForm]]], " with the above method. We first make the factor base consisting of the \ first 8 primes by means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Table", FontVariations->{"Underline"->True}], " and ", StyleBox["Prime", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{3.4233938137935886`*^9, 3.4233974165822716`*^9}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"S", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"Prime", "[", "i", "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "8"}], "}"}]}], "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "2", ",", "3", ",", "5", ",", "7", ",", "11", ",", "13", ",", "17", ",", "19"}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ "Next, we use the function ", StyleBox["RandomInteger", FontVariations->{"Underline"->True}], " to generate a random ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "a", "\[LessEqual]", "n"}], TraditionalForm]]], ", and the function ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], " to factor ", Cell[BoxData[ FormBox[ RowBox[{"b", "\[Congruent]", RowBox[{ SuperscriptBox["a", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", CellChangeTimes->{{3.423396585233201*^9, 3.4233965909051123`*^9}, { 3.4234603726274796`*^9, 3.4234603733774796`*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "1271"}], ";", RowBox[{"a", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{"1", ",", "n"}], "}"}], "]"}]}]}], "\n", RowBox[{"b", "=", RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["a", "2"], ",", "n"}], "]"}]}], "\n", RowBox[{"FactorInteger", "[", "b", "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["752"], "Output"], Cell[BoxData["1180"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"59", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "Unfortunately, ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", "614"}], TraditionalForm]]], " is not smooth with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", but after some trial and error we found the following nine smooth numbers \ (they are put in a list called ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ")." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"n", " ", "=", " ", "1271"}], ";"}], "\n", RowBox[{ RowBox[{"a", " ", "=", " ", RowBox[{"{", RowBox[{ "583", ",", " ", "879", ",", " ", "1137", ",", " ", "421", ",", " ", "727", ",", " ", "1034", ",", " ", "1051", ",", " ", "107", ",", " ", "1111"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"b", "=", RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["a", "2"], ",", " ", "n"}], "]"}]}], ";"}], "\n", RowBox[{"TableForm", "[", "\t\t", RowBox[{ RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"a", "[", RowBox[{"[", "i", "]"}], "]"}], ",", " ", RowBox[{"b", "[", RowBox[{"[", "i", "]"}], "]"}], ",", " ", RowBox[{"Times", "@@", RowBox[{"Superscript", "@@@", RowBox[{"FactorInteger", "[", " ", RowBox[{"b", "[", RowBox[{"[", "i", "]"}], "]"}], " ", "]"}]}]}]}], " ", "}"}], ",", RowBox[{"{", RowBox[{"i", ",", " ", "1", ",", " ", RowBox[{"Length", "[", "a", "]"}]}], "}"}]}], " ", "]"}], ",", "\t\t", RowBox[{"TableHeadings", "->", RowBox[{"{", RowBox[{ RowBox[{"{", "}"}], ",", RowBox[{"{", RowBox[{ "\"\\"", ",", " ", "\"\<\!\(\*SuperscriptBox[\(a\), \(2\)]\) mod n\>\"", ",", " ", "\"\\""}], "}"}]}], "}"}]}], ",", RowBox[{"TableAlignments", "->", RowBox[{"{", "Left", "}"}]}]}], "]"}]}], "Input"], Cell[BoxData[ TagBox[GridBox[{ {"\<\"\"\>", "\<\"a\"\>", "\<\"\\!\\(a\\^2\\) mod n\"\>", \ "\<\"factors\"\>"}, {"\<\"\"\>", "583", "532", RowBox[{ InterpretationBox[ SuperscriptBox["2", "2"], Superscript[2, 2], Editable->False], " ", InterpretationBox[ SuperscriptBox["7", "1"], Superscript[7, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["19", "1"], Superscript[19, 1], Editable->False]}]}, {"\<\"\"\>", "879", "1144", RowBox[{ InterpretationBox[ SuperscriptBox["2", "3"], Superscript[2, 3], Editable->False], " ", InterpretationBox[ SuperscriptBox["11", "1"], Superscript[11, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["13", "1"], Superscript[13, 1], Editable->False]}]}, {"\<\"\"\>", "1137", "162", RowBox[{ InterpretationBox[ SuperscriptBox["2", "1"], Superscript[2, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["3", "4"], Superscript[3, 4], Editable->False]}]}, {"\<\"\"\>", "421", "572", RowBox[{ InterpretationBox[ SuperscriptBox["2", "2"], Superscript[2, 2], Editable->False], " ", InterpretationBox[ SuperscriptBox["11", "1"], Superscript[11, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["13", "1"], Superscript[13, 1], Editable->False]}]}, {"\<\"\"\>", "727", "1064", RowBox[{ InterpretationBox[ SuperscriptBox["2", "3"], Superscript[2, 3], Editable->False], " ", InterpretationBox[ SuperscriptBox["7", "1"], Superscript[7, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["19", "1"], Superscript[19, 1], Editable->False]}]}, {"\<\"\"\>", "1034", "245", RowBox[{ InterpretationBox[ SuperscriptBox["5", "1"], Superscript[5, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["7", "2"], Superscript[7, 2], Editable->False]}]}, {"\<\"\"\>", "1051", "102", RowBox[{ InterpretationBox[ SuperscriptBox["2", "1"], Superscript[2, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["3", "1"], Superscript[3, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["17", "1"], Superscript[17, 1], Editable->False]}]}, {"\<\"\"\>", "107", "10", RowBox[{ InterpretationBox[ SuperscriptBox["2", "1"], Superscript[2, 1], Editable->False], " ", InterpretationBox[ SuperscriptBox["5", "1"], Superscript[5, 1], Editable->False]}]}, {"\<\"\"\>", "1111", "180", RowBox[{ InterpretationBox[ SuperscriptBox["2", "2"], Superscript[2, 2], Editable->False], " ", InterpretationBox[ SuperscriptBox["3", "2"], Superscript[3, 2], Editable->False], " ", InterpretationBox[ SuperscriptBox["5", "1"], Superscript[5, 1], Editable->False]}]} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[2.0999999999999996`]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], Function[BoxForm`e$, TableForm[ BoxForm`e$, TableHeadings -> {{}, {"a", "\!\(a\^2\) mod n", "factors"}}, TableAlignments -> {Left}]]]], "Output"], Cell[TextData[{ "The exponents in the factorization of the ", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], "'s are given by the vectors ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], ", that form the rows of the matrix ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " below. The vectors ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " are the modulo 2 reductions of the ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], "'s. They form the rows of the matrix ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " below. \nFor instance, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", "1"], "=", RowBox[{"532", "=", RowBox[{ SuperscriptBox["2", "2"], ".7", ".19"}]}]}], TraditionalForm]]], " gives ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "1"], "=", RowBox[{"{", RowBox[{ "2", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], "=", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], TraditionalForm]]], ". These two rows are the first row of the matrices ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " below. We use the function ", StyleBox["MatrixForm", FontVariations->{"Underline"->True}], " to display them." }], "Text", CellChangeTimes->{{3.423397022110997*^9, 3.4233970471736574`*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"U", "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ "2", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{ "3", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ "1", ",", "4", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\t ", RowBox[{"{", RowBox[{ "2", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ "3", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "1", ",", "2", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\t\t ", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ "2", ",", "2", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"V", "=", RowBox[{"Mod", "[", RowBox[{"U", ",", "2"}], "]"}]}], ";"}], "\n", RowBox[{"MatrixForm", "[", "U", "]"}], "\n", RowBox[{"MatrixForm", "[", "V", "]"}]}], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"2", "0", "0", "1", "0", "0", "0", "1"}, {"3", "0", "0", "0", "1", "1", "0", "0"}, {"1", "4", "0", "0", "0", "0", "0", "0"}, {"2", "0", "0", "0", "1", "1", "0", "0"}, {"3", "0", "0", "1", "0", "0", "0", "1"}, {"0", "0", "1", "2", "0", "0", "0", "0"}, {"1", "1", "0", "0", "0", "0", "1", "0"}, {"1", "0", "1", "0", "0", "0", "0", "0"}, {"2", "2", "1", "0", "0", "0", "0", "0"} }], "\[NoBreak]", ")"}], Function[BoxForm`e$, MatrixForm[BoxForm`e$]]]], "Output"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"0", "0", "0", "1", "0", "0", "0", "1"}, {"1", "0", "0", "0", "1", "1", "0", "0"}, {"1", "0", "0", "0", "0", "0", "0", "0"}, {"0", "0", "0", "0", "1", "1", "0", "0"}, {"1", "0", "0", "1", "0", "0", "0", "1"}, {"0", "0", "1", "0", "0", "0", "0", "0"}, {"1", "1", "0", "0", "0", "0", "1", "0"}, {"1", "0", "1", "0", "0", "0", "0", "0"}, {"0", "0", "1", "0", "0", "0", "0", "0"} }], "\[NoBreak]", ")"}], Function[BoxForm`e$, MatrixForm[BoxForm`e$]]]], "Output"] }, Open ]], Cell[TextData[{ "To find a non-trivial linear combination of the rows of ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " adding up to the all-zero vector modulo 2, we use the ", StyleBox["NullSpace", FontVariations->{"Underline"->True}], " and ", StyleBox["Transpose", FontVariations->{"Underline"->True}], " functions." }], "Text", CellChangeTimes->{3.4233950431452065`*^9, 3.423395166911624*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"NullSpace", "[", RowBox[{ RowBox[{"Transpose", "[", "V", "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ "0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "We see that the first of the above linear dependencies between rows of ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " reflect two identical rows, but the third one does give an index set ", Cell[BoxData[ FormBox["I", TraditionalForm]]], " that can be used, namely ", Cell[BoxData[ FormBox[ RowBox[{"I", "=", RowBox[{"{", RowBox[{"1", ",", "3", ",", "5"}], "}"}]}], TraditionalForm]]], ".\nIt leads to the values ", Cell[BoxData[ FormBox[ RowBox[{"x", "=", RowBox[{ SubscriptBox["a", "1"], SubscriptBox["a", "3"], SubscriptBox["a", "5"]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", SqrtBox[ RowBox[{ SubscriptBox["b", "1"], SubscriptBox["b", "3"], SubscriptBox["b", "5"]}]]}], TraditionalForm]]] }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"x", "=", RowBox[{ RowBox[{"a", "[", RowBox[{"[", "1", "]"}], "]"}], "*", RowBox[{"a", "[", RowBox[{"[", "3", "]"}], "]"}], "*", RowBox[{"a", "[", RowBox[{"[", "5", "]"}], "]"}]}]}], "\n", RowBox[{"y", "=", SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"b", "[", RowBox[{"[", "1", "]"}], "]"}], "*", RowBox[{"b", "[", RowBox[{"[", "3", "]"}], "]"}], "*", RowBox[{"b", "[", RowBox[{"[", "5", "]"}], "]"}]}], ")"}], RowBox[{"1", "/", "2"}]]}], "\n", RowBox[{"GCD", "[", RowBox[{ RowBox[{"x", "-", "y"}], ",", "n"}], "]"}]}], "Input"], Cell[BoxData["481907217"], "Output"], Cell[BoxData["9576"], "Output"], Cell[BoxData["41"], "Output"] }, Open ]], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "41"}], TraditionalForm]]], " is a factor of ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "1271"}], TraditionalForm]]], ". Indeed ", Cell[BoxData[ FormBox[ RowBox[{"1271", "=", RowBox[{"31", "\[Times]", "41"}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"n", "/", "41"}]], "Input"], Cell[BoxData["31"], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Quadratic Sieve", "Subsubsection", CellTags->"SubsubsRSA Q Sieve"], Cell["The complexity of this method is given by", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ SuperscriptBox["e", RowBox[{ RowBox[{"1.923", ".."}], SuperscriptBox[ RowBox[{"(", RowBox[{"ln", " ", "n"}], ")"}], RowBox[{"1", "/", "3"}]], SuperscriptBox[ RowBox[{"(", RowBox[{"ln", " ", "ln", " ", "n"}], ")"}], RowBox[{"2", "/", "3"}]]}]], TraditionalForm]]], " operations." }], "DisplayFormula"], Cell[TextData[{ "As with the previous methods, we shall not explain all details of this \ factorization technique. Let ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be the number that we want to factor." }], "Text"], Cell[TextData[{ "To start we need a so-called ", ButtonBox["factor base", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", which means that ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is a list of ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " primes (which ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " primes will be determined later)." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", RowBox[{"\[LeftFloor]", SqrtBox["n"], "\[RightFloor]"}]}], TraditionalForm]]], " and let the polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be defined by" }], "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "r"}], ")"}], "2"], "-", "n"}], "=", RowBox[{ SuperscriptBox["x", "2"], "+", RowBox[{"2", RowBox[{"r", ".", "x"}]}], "+", SuperscriptBox["r", "2"], "-", "n"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Note that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["r", "2"], "\[LessEqual]", "n", "<", SuperscriptBox[ RowBox[{"(", RowBox[{"r", "+", "1"}], ")"}], "2"]}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", RowBox[{"n", "-", SuperscriptBox["r", "2"]}], "<", RowBox[{ RowBox[{"2", "r"}], "+", "1"}], "\[LessEqual]", RowBox[{ RowBox[{"2", SqrtBox["n"]}], "+", "1"}]}], TraditionalForm]]], ". It follows that if ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is small in absolute value, then also ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " will be small (when compared to ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ").\nFor ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "=", "0"}], ",", RowBox[{"\[PlusMinus]", "1"}], ",", RowBox[{"\[PlusMinus]", "2"}], ",", "\[Ellipsis]"}], TraditionalForm]]], " define ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " by ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"x", "+", "r"}]}], TraditionalForm]]], " and test ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "r"}], ")"}], "2"], "-", "n"}]}], TraditionalForm]]], " for ", ButtonBox["smoothness", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", i.e. test if all prime factors of ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " are in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". If so, we save the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}], TraditionalForm]]], " in a list of pairs ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["b", "i"]}], ")"}], TraditionalForm]]], " with this property.\nNote that ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["a", "i", "2"], "\[Congruent]", SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "r"}], ")"}], "2"], "\[Congruent]", RowBox[{ SubscriptBox["b", "i"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ", just as in equation ", ButtonBox["(9.10)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA a^2=b"], "." }], "Text"], Cell[TextData[{ "If a prime ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], ", then ", Cell[BoxData[ FormBox[ RowBox[{"p", "|", RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "r"}], ")"}], "2"], "-", "n"}], ")"}]}], TraditionalForm]]], " for some known value of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], ". This means that ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Congruent]", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "r"}], ")"}], "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and thus that ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is a quadratic residue (", ButtonBox["QR", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], ") mod ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". This means that the only prime factors that will appear in the \ factorization of any of the ", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], "'s will have ", ButtonBox["Jacobi symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"n", "/", "p"}], ")"}], "=", "1"}], TraditionalForm]]], ". \nSo, we let the factor basis ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " consist of the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " smallest ", Cell[BoxData[ FormBox[ SubscriptBox["p", "j"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", "k"}], TraditionalForm]]], ", with the property that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"n", "/", SubscriptBox["p", "j"]}], ")"}], "=", "1"}], TraditionalForm]]], ". We also add ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], "and 2 to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", because the ", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], "'s may be negative and/or even." }], "Text", GeneratedCell->True], Cell[TextData[{ "Now that we know how to construct a list of pairs ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["b", "i"]}], ")"}], TraditionalForm]]], ", satisfying" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["a", "i", "2"], "\[Congruent]", RowBox[{ SubscriptBox["b", "i"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ",\n\n", Cell[BoxData[ FormBox[ SubscriptBox["b", "i"], TraditionalForm]]], " is smooth with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "we can continue with ", ButtonBox["Step 3", BaseStyle->"Hyperlink", ButtonData:>"StepRSA quadr sieve 3"], " in the algorithm described in the previous subsubsection." }], "Text"], Cell["\<\ We summarize the quadratic sieve method in the following figure.\ \>", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{ StyleBox["input", FontWeight->"Bold"], ":", "\t", RowBox[{"integer", " ", RowBox[{ StyleBox["n", FontSlant->"Italic"], ".", "\n", StyleBox["make", FontWeight->"Bold"]}], " ", "factor", " ", "base", " ", StyleBox["S", FontSlant->"Italic"]}]}], StyleBox[" ", FontSlant->"Italic"], StyleBox["=", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], RowBox[{ RowBox[{ StyleBox[ RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", " ", "2", ",", " ", SubscriptBox["p", "1"], ",", " ", "\[Ellipsis]", ",", " ", SubscriptBox["p", "k"]}], "}"}], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "with", " ", RowBox[{"(", RowBox[{"n", "/", SubscriptBox["p", "j"]}], ")"}]}], "=", "1"}]}], "\n", RowBox[{ RowBox[{ RowBox[{ StyleBox["find", FontWeight->"Bold"], " ", "pairs", " ", RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["b", "i"]}], ")"}], " ", "with", " ", SubscriptBox["a", "i"]}], "-", RowBox[{ RowBox[{"\[LeftFloor]", SqrtBox["n"], "\[RightFloor]"}], " ", "small"}]}], ",", "\n", " ", RowBox[{ SubsuperscriptBox["a", "i", "2"], "\[Congruent]", RowBox[{ SubscriptBox["b", "i"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], ",", " ", RowBox[{"and", " ", StyleBox[ SubscriptBox["b", "i"], FontSlant->"Italic"], " ", "smooth", " ", RowBox[{"w", ".", "r", ".", "t", ".", " ", StyleBox["S", FontSlant->"Italic"]}]}]}], "\n", RowBox[{ StyleBox["find", FontWeight->"Bold"], " ", "index", " ", "set", " ", StyleBox["I", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "such", " ", "that", " ", RowBox[{ StyleBox[ SubscriptBox["\[Product]", RowBox[{"i", "\[Element]", "I"}]], FontSlant->"Italic"], RowBox[{ StyleBox[ SubscriptBox["b", "i"], FontSlant->"Italic"], " ", "a", " ", "perfect", " ", "square"}]}]}], "\n", RowBox[{ RowBox[{ RowBox[{ StyleBox["put", FontWeight->"Bold"], " ", StyleBox["x", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{ SubscriptBox["\[Product]", RowBox[{"i", "\[Element]", "I"}]], SubscriptBox["a", "i"]}], FontSlant->"Italic"]}], ",", StyleBox[ RowBox[{"y", "=", SqrtBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[Product]", RowBox[{"i", "\[Element]", "I"}]], SubscriptBox["b", "i"]}], ")"}]]}], FontSlant->"Italic"]}], "\n", RowBox[{ RowBox[{ StyleBox["put", FontWeight->"Bold"], " ", StyleBox["d", FontSlant->"Plain"]}], StyleBox["=", FontSlant->"Plain"], StyleBox[ RowBox[{"gcd", RowBox[{"(", RowBox[{ RowBox[{"x", "-", "y"}], ",", "n"}], ")"}]}], FontSlant->"Plain"]}], "\n", RowBox[{ RowBox[{ StyleBox["if", FontWeight->"Bold"], " ", StyleBox["d", FontSlant->"Italic"]}], StyleBox["<", FontSlant->"Italic"], RowBox[{ StyleBox["n", FontSlant->"Italic"], " ", StyleBox["then", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], StyleBox["d", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "is", " ", "a", " ", "factor", " ", "of", " ", StyleBox["n", FontSlant->"Italic"]}]}], "\n", RowBox[{" ", RowBox[{ StyleBox["else", FontWeight->"Bold"], " ", "retry", " ", "with", " ", "other", " ", StyleBox["I", FontSlant->"Italic"]}]}]}], "DisplayFormula"], Cell["Quadratic Sieve Factoring Algorithm ", "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell["\<\ We shall only give an example of the first two steps of the quadratic sieve \ method.\ \>", "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"], "Let", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"n", "="}], TraditionalForm]]], "661643. To make a factor base with 10 primes, we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["While", FontVariations->{"Underline"->True}], ", ", StyleBox["Length", FontVariations->{"Underline"->True}], ", ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], ", ", StyleBox["Prime", FontVariations->{"Underline"->True}], ", and ", StyleBox["AppendTo", FontVariations->{"Underline"->True}], ". " }], "Example", CellChangeTimes->{ 3.423394385672249*^9, 3.423394832237607*^9, 3.4233974226604357`*^9, { 3.4234545072539372`*^9, 3.4234545087851872`*^9}, {3.4234646612259936`*^9, 3.4234646724605846`*^9}}, CellTags->"ExamRSA quadr sieve"], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "661643"}], ";", RowBox[{"k", "=", "10"}], ";"}], "\n", RowBox[{ RowBox[{"SS", "=", RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", "2"}], "}"}]}], ";", RowBox[{"i", "=", "2"}], ";"}], "\n", RowBox[{ RowBox[{"While", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"Length", "[", "SS", "]"}], "-", "2"}], "<", "k"}], ",", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"n", ",", RowBox[{"Prime", "[", "i", "]"}]}], "]"}], "==", "1"}], ",", "\t\t\t\t\t", RowBox[{"AppendTo", "[", RowBox[{"SS", ",", RowBox[{"Prime", "[", "i", "]"}]}], "]"}]}], "]"}], ";", RowBox[{"i", "=", RowBox[{"i", "+", "1"}]}]}]}], "]"}], ";"}], "\n", "SS"}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", "2", ",", "11", ",", "19", ",", "23", ",", "31", ",", "37", ",", "47", ",", "53", ",", "59", ",", "79", ",", "89"}], "}"}]], "Output"], Cell[TextData[{ "To try out if any of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", RowBox[{"-", "5"}], ")"}], ",", RowBox[{"f", "(", RowBox[{"-", "4"}], ")"}], ",", "\[Ellipsis]", ",", RowBox[{"f", "(", "5", ")"}]}], TraditionalForm]]], " is smooth with respect to ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " we use the functions ", StyleBox["TableForm", FontVariations->{"Underline"->True}], ", ", StyleBox["Table", FontVariations->{"Underline"->True}], ", and ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], ":" }], "Text", CellChangeTimes->{ 3.42339382255927*^9, {3.4234603776587296`*^9, 3.4234603792212296`*^9}, { 3.4234641266683807`*^9, 3.423464127402775*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "661643"}], ";", RowBox[{"Clear", "[", RowBox[{"x", ",", "f"}], "]"}], ";"}], "\n", RowBox[{ RowBox[{"r", "=", RowBox[{"\[LeftFloor]", SqrtBox["n"], "\[RightFloor]"}]}], ";", RowBox[{"m", "=", "5"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"f", "[", "x_", "]"}], ":=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "r"}], ")"}], "2"], "-", "n"}]}], ";"}], "\n", RowBox[{"TableForm", "[", RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"r", "+", "i"}], ",", " ", RowBox[{"f", "[", "i", "]"}], ",", " ", RowBox[{ RowBox[{"FactorInteger", "[", RowBox[{"f", "[", "i", "]"}], "]"}], " ", "//", " ", "OutputForm"}]}], "}"}], ",", RowBox[{"{", RowBox[{"i", ",", " ", RowBox[{"-", "m"}], ",", " ", "m"}], "}"}]}], "]"}], "]"}]}], "Input", CellChangeTimes->{{3.4233938286999345`*^9, 3.4233938335280905`*^9}}], Cell[BoxData[ TagBox[GridBox[{ {"808", RowBox[{"-", "8779"}], InterpretationBox[ FrameBox["\<\"{{-1, 1}, {8779, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{-1, 1}, {8779, 1}}], Editable->False]}, {"809", RowBox[{"-", "7162"}], InterpretationBox[ FrameBox["\<\"{{-1, 1}, {2, 1}, {3581, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{-1, 1}, {2, 1}, {3581, 1}}], Editable->False]}, {"810", RowBox[{"-", "5543"}], InterpretationBox[ FrameBox["\<\"{{-1, 1}, {23, 1}, {241, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{-1, 1}, {23, 1}, {241, 1}}], Editable->False]}, {"811", RowBox[{"-", "3922"}], InterpretationBox[ FrameBox["\<\"{{-1, 1}, {2, 1}, {37, 1}, {53, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{-1, 1}, {2, 1}, {37, 1}, {53, 1}}], Editable->False]}, {"812", RowBox[{"-", "2299"}], InterpretationBox[ FrameBox["\<\"{{-1, 1}, {11, 2}, {19, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{-1, 1}, {11, 2}, {19, 1}}], Editable->False]}, {"813", RowBox[{"-", "674"}], InterpretationBox[ FrameBox["\<\"{{-1, 1}, {2, 1}, {337, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{-1, 1}, {2, 1}, {337, 1}}], Editable->False]}, {"814", "953", InterpretationBox[ FrameBox["\<\"{{953, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{953, 1}}], Editable->False]}, {"815", "2582", InterpretationBox[ FrameBox["\<\"{{2, 1}, {1291, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{2, 1}, {1291, 1}}], Editable->False]}, {"816", "4213", InterpretationBox[ FrameBox["\<\"{{11, 1}, {383, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{11, 1}, {383, 1}}], Editable->False]}, {"817", "5846", InterpretationBox[ FrameBox["\<\"{{2, 1}, {37, 1}, {79, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{2, 1}, {37, 1}, {79, 1}}], Editable->False]}, {"818", "7481", InterpretationBox[ FrameBox["\<\"{{7481, 1}}\"\>", BoxFrame->False, FrameMargins->False], OutputForm[{{7481, 1}}], Editable->False]} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[2.0999999999999996`]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], Function[BoxForm`e$, TableForm[BoxForm`e$]]]], "Output"], Cell[TextData[{ "We see that we have only found three pairs ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", SubscriptBox["b", "i"]}], ")"}], TraditionalForm]]], ", namely ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"811", ",", RowBox[{"-", "3922"}]}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"812", ",", RowBox[{"-", "2299"}]}], ")"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"817", ",", "5846"}], ")"}], TraditionalForm]]], ".\nSo, we need to try a larger range of values. We leave the rest of this \ example as an exercise to the reader (see ", ButtonBox["Problem 9.7", BaseStyle->"Hyperlink", ButtonData:>"ProbRSA 9.7"], ")." }], "Text", FontSlant->"Italic"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tSome ", "Unsafe Modes for RSA" }], "Section", TextAlignment->Left, TextJustification->0, CellTags->"SectRSA unsafe modes"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tA Small Public Exponent" }], "Subsection", TextAlignment->Left, TextJustification->0, CellTags->"SubsRSA Coppersmith"], Cell[TextData[{ "We shall discuss here two particular dangers described in ", ButtonBox["[H\[ARing]st88]", BaseStyle->"Hyperlink", ButtonData:>"RefHast88"], " (see also ", ButtonBox["[CoppFPR96]", BaseStyle->"Hyperlink", ButtonData:>"RefCopFPR96"], "). The first one is the situation that more people have chosen the same \ (small) public exponent and that a sender wants to transmit the same message \ to all of them. The second danger is when a sender wants to transmit several \ mathematically related messages to the same receiver, who happens to have a \ small public exponent. \nBoth dangers may appear farfetched to the reader, \ but since exponentiations modulo large numbers are still rather cumbersome, \ it remains very appealing in practical situations to select small public \ exponents. " }], "Text", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[CellGroupData[{ Cell["\<\ Sending the Same Message to More Receivers Who All Have the Same Small Public \ Exponent\ \>", "Subsubsection", TextAlignment->Left, TextJustification->0, CellTags->"SubsubsRSA m^3"], Cell[TextData[{ "Suppose that Alice wants to send the same secret message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " to Bob, Chuck, and Dennis. Let the public modulus of these three people be \ given by the numbers ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["n", "C"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["n", "D"], TraditionalForm]]], ". Now assume that they all happen to have the same public exponent ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "3"}], TraditionalForm]]], ". The messages that ", "Alice", " will transmit are" }], "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[Cell[BoxData[GridBox[{ { RowBox[{ SubscriptBox["c", "B"], "\[Congruent]", RowBox[{ SuperscriptBox["m", "3"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], RowBox[{ RowBox[{"for", " ", "Bob"}], ","}]}, { RowBox[{ SubscriptBox["c", "C"], "\[Congruent]", RowBox[{ SuperscriptBox["m", "3"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "C"]}], ")"}]}]}], RowBox[{ RowBox[{"for", " ", "Chuck"}], ","}]}, { RowBox[{ SubscriptBox["c", "D"], "\[Congruent]", RowBox[{ SuperscriptBox["m", "3"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "D"]}], ")"}]}]}], RowBox[{"for", " ", RowBox[{"Dennis", "."}]}]} }]]]], "NumberedEquation", TextAlignment->Left, TextJustification->0], Cell[TextData[{ "Almost certainly the three moduli will be coprime (otherwise at least two \ of moduli are compromised in a trivial way). The eavesdropper Eve, who \ intercepts ", Cell[BoxData[ FormBox[ SubscriptBox["c", "B"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["c", "C"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["c", "D"], TraditionalForm]]], " can use the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19) to determine ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "3"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"], SubscriptBox["n", "C"], SubscriptBox["n", "D"]}], ")"}]}], TraditionalForm]]], " from (9.11).\nSince it can be assumed that ", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{"m", "<", RowBox[{"min", RowBox[{"{", RowBox[{ SubscriptBox["n", "B"], ",", SubscriptBox["n", "C"], ",", SubscriptBox["n", "D"]}]}]}]}], TraditionalForm], ")"}]]], ", also ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "3"], "<", RowBox[{ SubscriptBox["n", "B"], SubscriptBox["n", "C"], SubscriptBox["n", "D"]}]}], TraditionalForm]]], " holds. So, the above means that Eve in fact has found the integer ", Cell[BoxData[ FormBox[ SuperscriptBox["m", "3"], TraditionalForm]]], ". To compute ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is now straightforward." }], "Text", GeneratedCell->True, TextAlignment->Left, TextJustification->0], 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", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "B"], "="}], TraditionalForm]]], "137703491, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "C"], "=", "144660611"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "D"], "=", "149897933"}], TraditionalForm]]], ". Let the three intercepted messages be given by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "B"], "=", "124100785"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "C"], "=", "85594143"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "D"], "=", "148609330"}], TraditionalForm]]], ".\nTo solve the system of linear congruence relations" }], "Example", TextAlignment->Left, TextJustification->0, CellTags->"ExamRSA e=3 same m"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "3"], "\[Congruent]", RowBox[{ SubscriptBox["c", "B"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], "; ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "3"], "\[Congruent]", RowBox[{ SubscriptBox["c", "C"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "C"]}], ")"}]}]}], TraditionalForm]]], "; ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "3"], "\[Congruent]", RowBox[{ SubscriptBox["c", "D"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "D"]}], ")"}]}]}], TraditionalForm]]], ", " }], "DisplayFormula", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[TextData[{ "with known right hand sides and known moduli, we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["ChineseRemainder", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{ 3.4214658712162347`*^9, {3.4234630862201505`*^9, 3.4234630874701586`*^9}}, TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"nB", "=", "137703491"}], ";", RowBox[{"nC", "=", "144660611"}], ";", RowBox[{"nD", "=", "149897933"}], ";"}], "\n", RowBox[{ RowBox[{"cB", "=", "124100785"}], ";", RowBox[{"cC", "=", "85594143"}], ";", RowBox[{"cD", "=", "148609330"}], ";"}], "\n", RowBox[{"mCubed", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"cB", ",", "cC", ",", "cD"}], "}"}], ",", RowBox[{"{", RowBox[{"nB", ",", "nC", ",", "nD"}], "}"}]}], "]"}]}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData["1881563525396008211918161"], "Output"], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "3"], "\[Congruent]", RowBox[{"1881563525396008211918161", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"], SubscriptBox["n", "C"], SubscriptBox["n", "D"]}], ")"}]}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "3"], "<", RowBox[{ SubscriptBox["n", "B"], SubscriptBox["n", "C"], SubscriptBox["n", "D"]}]}], TraditionalForm]]], ", we even have " }], "Text", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "3"], "=", "1881563525396008211918161"}], TraditionalForm]]], ". " }], "DisplayFormula", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[TextData[{ "To find ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is now easy." }], "Text", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"m", "=", SuperscriptBox[ RowBox[{"(", "mCubed", ")"}], RowBox[{"1", "/", "3"}]]}]], "Input", TextAlignment->Left, TextJustification->0], Cell[BoxData["123454321"], "Output"] }, Open ]], Cell[TextData[{ "That this outcome is correct can easily be checked by means of the ", StyleBox["Mod", FontVariations->{"Underline"->True}], " function." }], "Text", CellChangeTimes->{3.423396051229783*^9}, TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["m", "3"], ",", "nB"}], "]"}], "==", "cB"}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["m", "3"], ",", "nC"}], "]"}], "==", "cC"}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["m", "3"], ",", "nD"}], "]"}], "==", "cD"}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Sending Related Messages to a Receiver with Small Public Exponent\ \>", "Subsubsection", TextAlignment->Left, TextJustification->0, CellTags->"SubsubsRSA Copper"], Cell[TextData[{ "Alice wants to send two secret messages, say ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " to Bob, who happens to have a public exponent ", Cell[BoxData[ FormBox[ SubscriptBox["e", "B"], TraditionalForm]]], " that is rather small. Let ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], " be Bob's modulus. Now, assume that the two messages of Alice are related \ in a linear way, say ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "=", RowBox[{ RowBox[{"a", ".", SubscriptBox["m", "1"]}], "+", "b"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " are in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", SubscriptBox["n", "B"]], TraditionalForm]]], " and assume further that eavesdropper Eve knows this linear relation. \n\ Coppersmith et al. ", ButtonBox["[CoppFPR96]", BaseStyle->"Hyperlink", ButtonData:>"RefCopFPR96"], " describe two surprising methods for Eve to recover the plaintext ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". " }], "Text", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[TextData[StyleBox["Direct Method", FontVariations->{"Underline"->True}]], "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[{ "We shall first describe this method for the case ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "3"}], TraditionalForm]]], ".", "\n", "Let the encryptions of ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " be denoted by ", Cell[BoxData[ FormBox[ SubscriptBox["c", "1"], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ SubscriptBox["c", "2"], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "\[Congruent]", RowBox[{ SubsuperscriptBox["m", "1", "3"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "\[Congruent]", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"a", ".", SubscriptBox["m", "1"]}], "+", "b"}], ")"}], "3"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], ". Then " }], "Text", TextAlignment->Left, TextJustification->0], Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{"b", RowBox[{"(", RowBox[{ SubscriptBox["c", "2"], "+", RowBox[{"2", SuperscriptBox["a", "3"], SubscriptBox["c", "1"]}], "-", SuperscriptBox["b", "3"]}], ")"}]}], RowBox[{"a", RowBox[{"(", RowBox[{ SubscriptBox["c", "2"], "-", RowBox[{ SuperscriptBox["a", "3"], SubscriptBox["c", "1"]}], "+", RowBox[{"2", SuperscriptBox["b", "3"]}]}], ")"}]}]], "\[Congruent]", FractionBox[ RowBox[{ RowBox[{"3", SuperscriptBox["a", "3"], SubsuperscriptBox["bm", "1", "3"]}], "+", RowBox[{"3", SuperscriptBox["a", "2"], SuperscriptBox["b", "2"], SubsuperscriptBox["m", "1", "2"]}], "+", RowBox[{"3", SuperscriptBox["ab", "3"], SubscriptBox["m", "1"]}]}], RowBox[{ RowBox[{"3", SuperscriptBox["a", "3"], SubsuperscriptBox["bm", "1", "2"]}], "+", RowBox[{"3", SuperscriptBox["a", "2"], SuperscriptBox["b", "2"], SubscriptBox["m", "1"]}], "+", RowBox[{"3", SuperscriptBox["ab", "3"]}]}]], "\[Congruent]", RowBox[{ SubscriptBox["m", "1"], " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}], "."}]}]}], TextForm]], "NumberedEquation", TextAlignment->Left, TextJustification->0, CellTags->"FormRSA Copp Red"], Cell[TextData[{ "With the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Simplify", FontVariations->{"Underline"->True}], " one can verify these calculations as follows" }], "Text", CellChangeTimes->{{3.4233947566902485`*^9, 3.4233947635809174`*^9}}, TextAlignment->Left, TextJustification->0], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", RowBox[{"a", ",", "b", ",", "c1", ",", "c2", ",", "m1", ",", "m2"}], "]"}], ";", RowBox[{"Simplify", "[", RowBox[{ FractionBox[ RowBox[{"b", RowBox[{"(", RowBox[{"c2", "+", RowBox[{"2", SuperscriptBox["a", "3"], "c1"}], "-", SuperscriptBox["b", "3"]}], ")"}]}], RowBox[{"a", RowBox[{"(", RowBox[{"c2", "-", RowBox[{ SuperscriptBox["a", "3"], "c1"}], "+", RowBox[{"2", SuperscriptBox["b", "3"]}]}], ")"}]}]], "//.", RowBox[{"{", RowBox[{ RowBox[{"c1", "->", SuperscriptBox["m1", "3"]}], ",", RowBox[{"c2", "->", SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"a", "*", "m1"}], "+", "b"}], ")"}], "3"]}]}], "}"}]}], "]"}]}]], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData["m1"], "Output"], Cell[TextData[{ "A particular simple case is given by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "=", "m"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "=", RowBox[{"m", "+", "1"}]}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"b", "=", "1"}]}], TraditionalForm]]], ". Then ", ButtonBox["(9.12)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Copp Red"], " reduces to " }], "Text", TextAlignment->Left, TextJustification->0], Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"m", "+", "1"}], ")"}], "3"], "+", RowBox[{"2", SuperscriptBox["m", "3"]}], "-", "1"}], RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"m", "+", "1"}], ")"}], "3"], "-", SuperscriptBox["m", "3"], "+", "2"}]], "\[Congruent]", FractionBox[ RowBox[{ RowBox[{"3", SuperscriptBox["m", "3"]}], "+", RowBox[{"3", SuperscriptBox["m", "2"]}], "+", RowBox[{"3", "m"}]}], RowBox[{ RowBox[{"3", SuperscriptBox["m", "2"]}], "+", RowBox[{"3", "m"}], "+", "3"}]], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TextForm]], "DisplayFormula", TextAlignment->Left, TextJustification->0], 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"], "Suppose that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "B"], "=", "477310661"}], TraditionalForm]]], " and that", StyleBox[" ", FontWeight->"Bold"], "the messages", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " are related by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "\[Congruent]", RowBox[{ RowBox[{"3", SubscriptBox["m", "1"]}], "+", RowBox[{"5", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}]}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", "3"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", "5"}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", "477310661"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "=", "5908795"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " can be computed with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Mod", FontVariations->{"Underline"->True}], " and ", StyleBox["Solve", FontVariations->{"Underline"->True}], " as follows" }], "Example", CellChangeTimes->{3.4233955287889395`*^9, 3.4233957153526335`*^9, 3.423396055198559*^9}, TextAlignment->Left, TextJustification->0], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", RowBox[{ "c1", ",", "c2", ",", "f", ",", "g", ",", "m1", ",", "m2", ",", "a", ",", "b"}], "]"}], ";", RowBox[{"n", "=", "477310661"}], ";", RowBox[{"c1", "=", "5908795"}], ";", RowBox[{"c2", "=", "374480016"}], ";", RowBox[{"a", "=", "3"}], ";", RowBox[{"b", "=", "5"}], ";", RowBox[{"f", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"b", RowBox[{"(", RowBox[{"c2", "+", RowBox[{"2", SuperscriptBox["a", "3"], "c1"}], "-", SuperscriptBox["b", "3"]}], ")"}]}], ",", "n"}], "]"}]}], ";", RowBox[{"g", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", RowBox[{"(", RowBox[{"c2", "-", RowBox[{ SuperscriptBox["a", "3"], "c1"}], "+", RowBox[{"2", SuperscriptBox["b", "3"]}]}], ")"}]}], ",", "n"}], "]"}]}], ";", RowBox[{"Solve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"f", "==", RowBox[{"g", "*", "m1"}]}], ",", RowBox[{"Modulus", "==", "n"}]}], "}"}], ",", "m1"}], "]"}]}]], "Input",\ GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData[ RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "477310661"}], ",", RowBox[{"m1", "\[Rule]", "321321321"}]}], "}"}], "}"}]], "Output"], Cell[TextData[{ "So, we have found ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "=", "321321321"}], TraditionalForm]]], ". That this is indeed the solution can be verified quite easily as follows \ " }], "Text", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"m1", "=", "321321321"}], ";"}], "\n", RowBox[{"m2", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"3", "*", "m1"}], "+", "5"}], ",", "n"}], "]"}]}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"m1", ",", "3", ",", "n"}], "]"}], "==", "c1"}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"m2", ",", "3", ",", "n"}], "]"}], "==", "c2"}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"b", "=", "1"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "B"], ">", "3"}], TraditionalForm]]], ", a method like the above still exists. In fact, it can be shown ", ButtonBox["[CoppFPR96]", BaseStyle->"Hyperlink", ButtonData:>"RefCopFPR96"], " that polynomials ", Cell[BoxData[ FormBox[ RowBox[{"P", "(", "m", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"Q", "(", "m", ")"}], TraditionalForm]]], " exist such that each of them can be expressed as rational polynomials in \ ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "\[Congruent]", RowBox[{ SuperscriptBox["m", "e"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "\[Congruent]", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"m", "+", "1"}], ")"}], "e"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], " and such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Q", "(", "m", ")"}], "=", RowBox[{"m", ".", RowBox[{"P", "(", "m", ")"}]}]}], TraditionalForm]]], ". For ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "b"], "=", "5"}], TraditionalForm]]], " these polynomials are given by" }], "Text", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData["9342646"], "Output"], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"] }, Open ]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"P", "(", "m", ")"}], "=", RowBox[{ SubsuperscriptBox["c", "2", "3"], "+", RowBox[{"2", SubscriptBox["c", "1"], SubsuperscriptBox["c", "2", "2"]}], "-", RowBox[{"4", SubsuperscriptBox["c", "1", "2"], SubscriptBox["c", "2"]}], "+", SubsuperscriptBox["c", "1", "3"], "-", RowBox[{"2", SubsuperscriptBox["c", "2", "2"]}], "+", RowBox[{"9", SubscriptBox["c", "1"], SubscriptBox["c", "2"]}], "+", RowBox[{"8", SubsuperscriptBox["c", "1", "2"]}], "+", SubscriptBox["c", "2"], "-", RowBox[{"2", SubscriptBox["c", "1"]}]}]}], TraditionalForm]]], "," }], "DisplayFormula", TextAlignment->Left, TextJustification->0], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Q", "(", "m", ")"}], "=", RowBox[{ RowBox[{"9", SubscriptBox["c", "1"], SubsuperscriptBox["c", "2", "2"]}], "-", RowBox[{"9", SubsuperscriptBox["c", "1", "2"]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", TextAlignment->Left, TextJustification->0], Cell["Again, one can check this with", "Text", TextAlignment->Left, TextJustification->0], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", RowBox[{"c1", ",", "c2", ",", "m"}], "]"}], ";", RowBox[{"P", "=", RowBox[{ SuperscriptBox["c2", "3"], "+", RowBox[{"2", "c1", "*", SuperscriptBox["c2", "2"]}], "-", RowBox[{"4", SuperscriptBox["c1", "2"], "c2"}], "+", SuperscriptBox["c1", "3"], "-", RowBox[{"2", SuperscriptBox["c2", "2"]}], "+", RowBox[{"9", "c1", "*", "c2"}], "+", RowBox[{"8", SuperscriptBox["c1", "2"]}], "+", "c2", "-", RowBox[{"2", "c1"}]}]}], ";", RowBox[{"Q", "=", RowBox[{ RowBox[{"9", "c1", "*", SuperscriptBox["c2", "2"]}], "-", RowBox[{"9", SuperscriptBox["c1", "2"]}]}]}], ";", RowBox[{"Expand", "[", RowBox[{"P", "//.", RowBox[{"{", RowBox[{ RowBox[{"c1", "->", SuperscriptBox["m", "3"]}], ",", RowBox[{"c2", "->", SuperscriptBox[ RowBox[{"(", RowBox[{"m", "+", "1"}], ")"}], "3"]}]}], "}"}]}], "]"}]}], "\n", RowBox[{"Expand", "[", RowBox[{"Q", "//.", RowBox[{"{", RowBox[{ RowBox[{"c1", "->", SuperscriptBox["m", "3"]}], ",", RowBox[{"c2", "->", SuperscriptBox[ RowBox[{"(", RowBox[{"m", "+", "1"}], ")"}], "3"]}]}], "}"}]}], "]"}], "\n", RowBox[{"Simplify", "[", RowBox[{ FractionBox["Q", "P"], "//.", RowBox[{"{", RowBox[{ RowBox[{"c1", "->", SuperscriptBox["m", "3"]}], ",", RowBox[{"c2", "->", SuperscriptBox[ RowBox[{"(", RowBox[{"m", "+", "1"}], ")"}], "3"]}]}], "}"}]}], "]"}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData[ RowBox[{ RowBox[{"9", " ", SuperscriptBox["m", "2"]}], "+", RowBox[{"54", " ", SuperscriptBox["m", "3"]}], "+", RowBox[{"135", " ", SuperscriptBox["m", "4"]}], "+", RowBox[{"171", " ", SuperscriptBox["m", "5"]}], "+", RowBox[{"135", " ", SuperscriptBox["m", "6"]}], "+", RowBox[{"54", " ", SuperscriptBox["m", "7"]}], "+", RowBox[{"9", " ", SuperscriptBox["m", "8"]}]}]], "Output"], Cell[BoxData[ RowBox[{ RowBox[{"9", " ", SuperscriptBox["m", "3"]}], "+", RowBox[{"54", " ", SuperscriptBox["m", "4"]}], "+", RowBox[{"135", " ", SuperscriptBox["m", "5"]}], "+", RowBox[{"171", " ", SuperscriptBox["m", "6"]}], "+", RowBox[{"135", " ", SuperscriptBox["m", "7"]}], "+", RowBox[{"54", " ", SuperscriptBox["m", "8"]}], "+", RowBox[{"9", " ", SuperscriptBox["m", "9"]}]}]], "Output"], Cell[BoxData["m"], "Output"] }, Open ]], Cell[TextData[{ "To find such a solution, write ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{ SubscriptBox["\[Sum]", RowBox[{ RowBox[{"i", "+", "j"}], "\[LessEqual]", "e"}]], RowBox[{ SubscriptBox["p", RowBox[{"i", ",", "j"}]], SubsuperscriptBox["c", "2", "i"], SubsuperscriptBox["c", "1", "j"]}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"Q", "=", RowBox[{ SubscriptBox["\[Sum]", RowBox[{ RowBox[{"i", "+", "j"}], "\[LessEqual]", "e"}]], RowBox[{ SubscriptBox["q", RowBox[{"i", ",", "j"}]], SubsuperscriptBox["c", "2", "i"], SubsuperscriptBox["c", "1", "j"]}]}]}], TraditionalForm]]], ". Next, substitute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "=", SuperscriptBox[ RowBox[{"(", RowBox[{"m", "+", "1"}], ")"}], "e"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", SuperscriptBox["m", "e"]}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " to obtain two polynomials in ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"\[LessEqual]", "e"}], "2"], TraditionalForm]]], ". Now, equate the coefficients of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Q", "(", "m", ")"}], "=", RowBox[{"m", ".", RowBox[{"P", "(", "m", ")"}]}]}], TraditionalForm]]], ". This gives ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{"e", "+", "1"}], ")"}], "+", "e", "+", "\[Ellipsis]", "+", "2", "+", "1"}], ")"}]}], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"e", "+", "2"}]}, {"2"} }], "\[NegativeThinSpace]", ")"}]}], "=", RowBox[{ RowBox[{"(", RowBox[{"e", "+", "2"}], ")"}], RowBox[{"(", RowBox[{"e", "+", "1"}], ")"}]}]}], TraditionalForm]]], " linear equations in the coefficients of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], ". So, there is in fact a large solution space. " }], "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[{ "Since the number of terms in ", Cell[BoxData[ FormBox[ RowBox[{"P", "(", "m", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"Q", "(", "m", ")"}], TraditionalForm]]], " grows quadratic in ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " the above approach will still be rather cumbersome for larger values of ", Cell[BoxData[ FormBox["e", TraditionalForm]]], "." }], "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[StyleBox["Method through GCD calculation", FontVariations->{"Underline"->True}]], "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[{ "For arbitrary values of ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " there is a more direct way to determine ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ SubscriptBox["c", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["c", "2"], TraditionalForm]]], ", when they satisfy a polynomial relation that is known to the \ eavesdropper. Suppose that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "\[Congruent]", RowBox[{ RowBox[{"f", "(", SubscriptBox["m", "1"], ")"}], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "B"]}], ")"}]}]}], TraditionalForm]]], ". The idea is to compute the gcd of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["z", "e"], "-", SubscriptBox["c", "1"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"f", "(", "z", ")"}], ")"}], "e"], "-", SubscriptBox["c", "2"]}], TraditionalForm]]], ". Indeed, since ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " is a zero of both polynomials, it follows that both are divisible by ", Cell[BoxData[ FormBox[ RowBox[{"z", "-", SubscriptBox["m", "1"]}], TraditionalForm]]], ". As a consequence, also the gcd will contain this factor. Almost certainly \ the gcd will not contain any other factors. \nWe shall demonstrate this idea \ with an example. " }], "Text", TextAlignment->Left, TextJustification->0], 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[{ SubscriptBox["e", "B"], "=", "5"}], TraditionalForm]]], ",", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "B"], "=", "466883"}], TraditionalForm]]], ". Further suppose that the message ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " are related by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "=", RowBox[{ RowBox[{"2", SubscriptBox["m", "1"]}], "+", "3"}]}], TraditionalForm]]], " and that they are encrypted into ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", "66575"}], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "=", "387933"}], TraditionalForm]]], ". We want to compute ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["z", "5"], "-", "66575"}], ",", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"2", "z"}], "+", "3"}], ")"}], "5"], "-", "387933"}]}], ")"}], TraditionalForm]]], " mod 466883. In general, this can not be done since ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], " is not prime. Also ", StyleBox["Mathematica", FontSlant->"Italic"], " can not do this directly. We shall simply follow the polynomial version of \ ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA Simple Euclid"], " step for step. Problems may arise, when numbers appear that are not \ coprime with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". This happens rarely and is not bad at all. Indeed, one almost always \ finds in this way a non-trivial factor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", so the system will be broken!\nIn the first step we calculate ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "1"], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"2", "z"}], "+", "3"}], ")"}], "5"], "-", "387933"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "2"], "=", RowBox[{ SuperscriptBox["z", "5"], "-", "66575"}]}], TraditionalForm]]], " and then divide ", Cell[BoxData[ FormBox[ SubscriptBox["f", "1"], TraditionalForm]]], " by ", Cell[BoxData[ FormBox[ SubscriptBox["f", "2"], TraditionalForm]]], ". We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], " and ", StyleBox["Expand", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{ 3.4233946209706297`*^9, {3.423469812658722*^9, 3.423469815518115*^9}}, TextAlignment->Left, TextJustification->0, CellTags->"ExamRSA Copper"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "466883"}], ";", RowBox[{"c1", "=", "66575"}], ";", RowBox[{"c2", "=", "387933"}], ";", RowBox[{"f1", "=", RowBox[{"Expand", "[", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"2", "z"}], "+", "3"}], ")"}], "5"], "-", "c2"}], "]"}]}]}], "\n", RowBox[{"f2", "=", RowBox[{ SuperscriptBox["z", "5"], "-", "c1"}]}], "\n", RowBox[{"f3", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"f1", "-", RowBox[{"32", "f2"}]}], ",", "n"}], "]"}]}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData[ RowBox[{ RowBox[{"-", "387690"}], "+", RowBox[{"810", " ", "z"}], "+", RowBox[{"1080", " ", SuperscriptBox["z", "2"]}], "+", RowBox[{"720", " ", SuperscriptBox["z", "3"]}], "+", RowBox[{"240", " ", SuperscriptBox["z", "4"]}], "+", RowBox[{"32", " ", SuperscriptBox["z", "5"]}]}]], "Output"], Cell[BoxData[ RowBox[{ RowBox[{"-", "66575"}], "+", SuperscriptBox["z", "5"]}]], "Output"], Cell[BoxData[ RowBox[{"342061", "+", RowBox[{"810", " ", "z"}], "+", RowBox[{"1080", " ", SuperscriptBox["z", "2"]}], "+", RowBox[{"720", " ", SuperscriptBox["z", "3"]}], "+", RowBox[{"240", " ", SuperscriptBox["z", "4"]}]}]], "Output"] }, Open ]], Cell[TextData[{ "To keep the division process more manageable, we normalize ", Cell[BoxData[ FormBox[ SubscriptBox["f", "3"], TraditionalForm]]], " by multiplying it with the multiplicative inverse of its leading \ coefficient (mod ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], "). We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234607399726796`*^9, 3.4234607407383094`*^9}}, TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"InverseLeadCoeff", "=", RowBox[{"PowerMod", "[", RowBox[{"240", ",", RowBox[{"-", "1"}], ",", "n"}], "]"}]}], "\n", RowBox[{"f3", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InverseLeadCoeff", "*", "f3"}], ",", "n"}], "]"}]}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData["258731"], "Output"], Cell[BoxData[ RowBox[{"376877", "+", RowBox[{"408526", " ", "z"}], "+", RowBox[{"233446", " ", SuperscriptBox["z", "2"]}], "+", RowBox[{"3", " ", SuperscriptBox["z", "3"]}], "+", SuperscriptBox["z", "4"]}]], "Output"] }, Open ]], Cell[TextData[{ "We continue with this division process until ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "k"], "=", "0"}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ". The gcd will be given by ", Cell[BoxData[ FormBox[ SubscriptBox["f", RowBox[{"k", "-", "1"}]], TraditionalForm]]], "." }], "Text", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"f4", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"f2", "-", RowBox[{"f3", "*", RowBox[{"(", RowBox[{"z", "+", "466880"}], ")"}]}]}], ",", "n"}], "]"}]}]], "Input",\ TextAlignment->Left, TextJustification->0], Cell[BoxData[ RowBox[{"130290", "+", RowBox[{"381818", " ", "z"}], "+", RowBox[{"291812", " ", SuperscriptBox["z", "2"]}], "+", RowBox[{"233446", " ", SuperscriptBox["z", "3"]}]}]], "Output"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"InverseLeadCoeff", "=", RowBox[{"PowerMod", "[", RowBox[{"233446", ",", RowBox[{"-", "1"}], ",", "n"}], "]"}]}], "\n", RowBox[{"f4", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InverseLeadCoeff", "*", "f4"}], ",", "n"}], "]"}]}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData["103752"], "Output"], Cell[BoxData[ RowBox[{"184581", "+", RowBox[{"292352", " ", "z"}], "+", RowBox[{"116723", " ", SuperscriptBox["z", "2"]}], "+", SuperscriptBox["z", "3"]}]], "Output"] }, Open ]], Cell[BoxData[ RowBox[{"f5", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"f3", "-", RowBox[{"f4", "*", RowBox[{"(", RowBox[{"z", "+", "350163"}], ")"}]}]}], ",", "n"}], "]"}]}]], "Input",\ TextAlignment->Left, TextJustification->0], Cell[BoxData[ RowBox[{"355162", "+", RowBox[{"4681", " ", "z"}], "+", RowBox[{"203714", " ", SuperscriptBox["z", "2"]}]}]], "Output"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"InverseLeadCoeff", "=", RowBox[{"PowerMod", "[", RowBox[{"203714", ",", RowBox[{"-", "1"}], ",", "n"}], "]"}]}], "\n", RowBox[{"f5", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InverseLeadCoeff", "*", "f5"}], ",", "n"}], "]"}]}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData["349909"], "Output"], Cell[BoxData[ RowBox[{"397084", "+", RowBox[{"98465", " ", "z"}], "+", SuperscriptBox["z", "2"]}]], "Output"] }, Open ]], Cell[BoxData[ RowBox[{"f6", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"f4", "-", RowBox[{"f5", "*", RowBox[{"(", RowBox[{"z", "+", "18258"}], ")"}]}]}], ",", "n"}], "]"}]}]], "Input", TextAlignment->Left, TextJustification->0], Cell[BoxData[ RowBox[{"451016", "+", RowBox[{"87731", " ", "z"}]}]], "Output"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"InverseLeadCoeff", "=", RowBox[{"PowerMod", "[", RowBox[{"87731", ",", RowBox[{"-", "1"}], ",", "n"}], "]"}]}], "\n", RowBox[{"f6", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InverseLeadCoeff", "*", "f6"}], ",", "n"}], "]"}]}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[BoxData["132235"], "Output"], Cell[BoxData[ RowBox[{"466340", "+", "z"}]], "Output"] }, Open ]], Cell[BoxData[ RowBox[{"f7", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"f5", "-", RowBox[{"f6", "*", RowBox[{"(", RowBox[{"z", "+", "99008"}], ")"}]}]}], ",", "n"}], "]"}]}]], "Input", TextAlignment->Left, TextJustification->0], Cell[BoxData["0"], "Output"], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "7"}], TraditionalForm]]], " and that" }], "Text", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["z", "5"], "-", "66575"}], ",", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"2", "z"}], "+", "3"}], ")"}], "5"], "-", "387933"}]}], ")"}], "\[Congruent]", RowBox[{"z", "+", "466340"}], "\[Congruent]", RowBox[{"z", "-", "543"}]}], TraditionalForm]]], " (mod 466883)." }], "DisplayFormula", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[TextData[{ "Therefore, the secret message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is 543. One can check this with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234607492383637`*^9, 3.4234607499727435`*^9}}, TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "543"}], ";", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"m", ",", "5", ",", "n"}], "]"}], "==", "c1"}]}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{ RowBox[{ RowBox[{"2", "m"}], "+", "3"}], ",", "5", ",", "n"}], "]"}], "==", "c2"}]}], "Input", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[TextData[{ "The above approach of finding ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " by computing a gcd is still practical for ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " up to 32 bits long (", ButtonBox["[CoppFPR96]", BaseStyle->"Hyperlink", ButtonData:>"RefCopFPR96"], "). " }], "Text", GeneratedCell->True, TextAlignment->Left, TextJustification->0] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tA Small Secret Exponent; Wiener's Attack" }], "Subsection", TextAlignment->Left, TextJustification->0, CellTags->"SubsRSA Wiener attack"], Cell[TextData[{ "Wiener ", ButtonBox["[Wien90]", BaseStyle->"Hyperlink", ButtonData:>"RefWien90"], " shows that it is unsafe to use the RSA system with a small secret exponent \ ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ", where \"small\" means something like ", Cell[BoxData[ FormBox[ SqrtBox["n"], TraditionalForm]]], ". This observation is of importance, because often one is inclined to \ reduce the work load of the exponentiation, by choosing a small exponent. For \ instance, if a smart card is used to sign messages (see ", ButtonBox["Subsection 9.1.3", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA sign"], "), it will have to compute exponentiations ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", "d"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}], TraditionalForm]]], ". If the card has limited computing power, a relatively small value of ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " (of course not so small that ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " can be found by exhaustive search) would be handy. " }], "Text", GeneratedCell->True], Cell[TextData[{ "We first show that we can replace ", ButtonBox["(9.4)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA e.d=1"], " by the slightly stronger relation" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"e", ".", "d"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"lcm", "(", RowBox[{ RowBox[{"p", "-", "1"}], ",", RowBox[{"q", "-", "1"}]}], ")"}]}], ")"}]}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "where ", ButtonBox["lcm", BaseStyle->"Hyperlink", ButtonData:>"DefAppA LCM"], " denote the least common multiple. We remark that ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " both divide ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "n", ")"}], TraditionalForm]]], " and so does ", Cell[BoxData[ FormBox[ RowBox[{"lcm", "(", RowBox[{ RowBox[{"p", "-", "1"}], ",", RowBox[{"q", "-", "1"}]}], ")"}], TraditionalForm]]], ". Now note that for a correct functioning of the RSA system, one only needs \ that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"e", ".", "d"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "p"}], "-", "1"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"e", ".", "d"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "q"}], "-", "1"}], ")"}]}]}], TraditionalForm]]], ". The reason is that these two congruences are sufficient to prove that ", ButtonBox["(9.5)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA check RSA secr"], " and ", ButtonBox["(9.6)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA check RSA sign"], " hold modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " resp. modulo ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". From the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " it then follows that (9.5) and (9.6) also hold modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". We conclude that it is sufficient that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"e", ".", "d"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"lcm", "(", RowBox[{ RowBox[{"p", "-", "1"}], ",", RowBox[{"q", "-", "1"}]}], ")"}]}], ")"}]}]}], TraditionalForm]]], ". " }], "Text", GeneratedCell->True], Cell[TextData[{ "The subsequent cryptanalysis will deal with this most general case. It is \ the cryptanalist's aim to find ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " satisfying this relation (and also ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "). The above congruence can be rewritten as " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"e", ".", "d"}], "=", RowBox[{ RowBox[{"1", " ", "+", RowBox[{"K", ".", " ", RowBox[{"lcm", "(", RowBox[{ RowBox[{"p", "-", "1"}], ",", RowBox[{"q", "-", "1"}]}], ")"}]}]}], "=", RowBox[{"1", "+", RowBox[{ FractionBox["K", "G"], RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}]}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{"G", "=", RowBox[{"gcd", "(", RowBox[{ RowBox[{"p", "-", "1"}], ",", RowBox[{"q", "-", "1"}]}], ")"}]}], TraditionalForm]]], ". If ", Cell[BoxData[ FormBox["K", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " have a factor in common, the above relation may be further simplified to" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"e", ".", "d"}], "=", RowBox[{"1", "+", RowBox[{ FractionBox["k", "g"], RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}]}], TraditionalForm]]], ",\t\twith ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"k", ",", "g"}], ")"}], "=", "1"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA Wien ed"], Cell[TextData[{ "One should realize that often ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " (and thus also ", Cell[BoxData[ FormBox["g", TraditionalForm]]], ") will be very small. In a typical RSA system, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " will be ", ButtonBox["safe primes", BaseStyle->"Hyperlink", ButtonData:>"DefRSA Strong prime"], ", meaning that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "-", "1"}], "=", RowBox[{"2.", RowBox[{"p", "'"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", RowBox[{"2.", RowBox[{"q", "'"}]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"p", "'"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"q", "'"}], TraditionalForm]]], " prime. So, in this case ", Cell[BoxData[ FormBox[ RowBox[{"G", "=", "2"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", "1"}], TraditionalForm]]], " or 2." }], "Text"], Cell[TextData[{ "Let us rewrite ", ButtonBox["(9.13)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Wien ed"], " by dividing both hands by ", Cell[BoxData[ FormBox[ RowBox[{"d", ".", "n"}], TraditionalForm]]], " (", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"d", ".", "p", ".", "q"}]}], TraditionalForm]]], ") and rearranging the terms:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FractionBox["k", RowBox[{"d", ".", "g"}]], "=", RowBox[{ FractionBox["e", "n"], "+", RowBox[{ FractionBox["k", RowBox[{"d", ".", "g"}]], RowBox[{"(", RowBox[{ FractionBox["1", "p"], "+", FractionBox["1", "q"], "-", FractionBox["1", "n"]}], ")"}]}], " ", "-", FractionBox["1", RowBox[{"d", ".", "n"}]]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA Wien k/dg"], Cell[TextData[{ "What we like to show is that ", Cell[BoxData[ FormBox[ RowBox[{"k", "/", RowBox[{"(", RowBox[{"d", ".", "g"}], ")"}]}], TraditionalForm]]], " is a ", ButtonBox["convergent", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Cont Frac Appr"], " of the ", ButtonBox["continued fraction", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Cont Frac"], " of the known rational ", Cell[BoxData[ FormBox[ RowBox[{"e", "/", "n"}], TraditionalForm]]], ". Since these continued fractions are easy to compute, it is then possible \ to find the secret exponent ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " (and ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["g", TraditionalForm]]], ")." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nAssume that ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Tilde]", "q", "\[Tilde]", SqrtBox["n"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"e", "\[Tilde]", "n"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "g"}], "<", "d"}], TraditionalForm]]], ". \nThen ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Tilde]", RowBox[{"(", RowBox[{"g", ".", "d"}], ")"}]}], TraditionalForm]]], " and the numbers ", Cell[BoxData[ FormBox[ RowBox[{"d", ",", "k", ",", "g", ",", "p"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " can be found from the continued fraction of ", Cell[BoxData[ FormBox[ RowBox[{"e", "/", "n"}], TraditionalForm]]], " for secret exponents ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " up to ", Cell[BoxData[ FormBox[ SuperscriptBox["n", RowBox[{"1", "/", "4"}]], TraditionalForm]]], ". " }], "Theorem"], Cell[TextData[{ StyleBox["Remark 1", FontWeight->"Bold"], ":\nWe shall be a little sloppy with the use of the \[Tilde] symbol. What we \ mean with ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Tilde]", "b"}], TraditionalForm]]], " is something like \"", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " have the same order of magnitude\"." }], "Text"], Cell[TextData[{ StyleBox["Remark 2", FontWeight->"Bold"], ":\nWe already discussed the likelihood that ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " is small. If ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " is selected as a small integer, the value of ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " will be like that of a random number in the range ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", RowBox[{"lcm", "(", RowBox[{ RowBox[{"p", "-", "1"}], ",", RowBox[{"q", "-", "1"}]}], ")"}]}], "}"}], TraditionalForm]]], ", so also the assumption ", Cell[BoxData[ FormBox[ RowBox[{"e", "\[Tilde]", "n"}], TraditionalForm]]], " is very reasonable. The same holds for ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Tilde]", "q", "\[Tilde]", SqrtBox["n"]}], TraditionalForm]]], "(see the discussion around ", ButtonBox["Example 9.2", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA p-q small"], ")." }], "Text"], Cell[TextData[{ StyleBox["Remark 3", FontWeight->"Bold"], ":\nRelation ", ButtonBox["(9.14)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Wien k/dg"], " implies that ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox["k", RowBox[{"d", ".", "g"}]], ">", FractionBox["e", "n"]}], TraditionalForm]]], ", therefore, it suffices to check only the odd convergents of ", Cell[BoxData[ FormBox[ RowBox[{"e", "/", "n"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Proof of Theorem 9.2", FontWeight->"Bold"], ":\nIf ", Cell[BoxData[ FormBox[ RowBox[{"e", "\[Tilde]", "n"}], TraditionalForm]]], " then ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Tilde]", RowBox[{"g", ".", "d"}]}], TraditionalForm]]], " by ", ButtonBox["(9.14)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Wien k/dg"], ", since the other terms there all tend to zero. It further follows from \ (9.14) that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "|", Cell[BoxData[ FormBox[ RowBox[{ FractionBox["k", RowBox[{"d", ".", "g"}]], "-", FractionBox["e", "n"]}], TraditionalForm]]], "| =", Cell[BoxData[ FormBox[ RowBox[{"|", RowBox[{ RowBox[{ FractionBox["k", RowBox[{"d", ".", "g"}]], RowBox[{"(", RowBox[{ FractionBox["1", "p"], "+", FractionBox["1", "q"], "-", FractionBox["1", "n"]}], ")"}]}], " ", "-", FractionBox["1", RowBox[{"d", ".", "n"}]]}], "|"}], TraditionalForm]]], " \[LessEqual]", Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{"k", "+", "g"}], RowBox[{"d", ".", "g", ".", "n"}]], "+", RowBox[{ FractionBox["k", RowBox[{"d", ".", "g"}]], RowBox[{"(", RowBox[{ FractionBox["1", "p"], "+", FractionBox["1", "q"]}], ")"}]}]}], TraditionalForm]]], "\n\n \t\[Tilde] ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FractionBox[ RowBox[{"d", "+", "1"}], RowBox[{"d", ".", "n"}]], "+", FractionBox["1", SqrtBox["n"]]}], "\[Tilde]", FractionBox["1", SqrtBox["n"]]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", RowBox[{"g", ".", "d"}]}], "<", SuperscriptBox["d", "2"], "<", SuperscriptBox["n", RowBox[{"1", "/", "2"}]]}], TraditionalForm]]], ", we conclude that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "|", Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{" ", "k"}], RowBox[{"d", ".", "g"}]], "-", FractionBox["e", "n"]}], TraditionalForm]]], "| \[LessEqual] ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{" ", "1"}], SqrtBox["n"]], "<"}], TraditionalForm]]], Cell[BoxData[ FormBox[ FractionBox["1", RowBox[{"2", SuperscriptBox[ RowBox[{"(", RowBox[{"d", ".", "g"}], ")"}], "2"]}]], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "It follows from ", ButtonBox["Theorem A.35", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA CF Best Appr"], " that the rational number ", Cell[BoxData[ FormBox[ RowBox[{"k", "/", RowBox[{"(", RowBox[{"d", ".", "g"}], ")"}]}], TraditionalForm]]], " will appear as a convergent in the continued fraction of ", Cell[BoxData[ FormBox[ RowBox[{"e", "/", "n"}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"k", ",", "g"}], ")"}], "=", "1"}], TraditionalForm]]], " and since ", ButtonBox["(9.13)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Wien ed"], " also implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"k", ",", "d"}], ")"}], "=", "1"}], TraditionalForm]]], ", it follows from ", ButtonBox["Corollary A.32", BaseStyle->"Hyperlink", ButtonData:>"CorAppA CF gcd(p q)=1"], " that ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"d", ".", "g"}], TraditionalForm]]], " will be obtained from one of the convergents. Because ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " is very small, we can find ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " with a small trial and error effort.\nFrom ", ButtonBox["(9.13)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Wien ed"], " one can now compute ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], " and since ", Cell[BoxData[ FormBox[ RowBox[{"p", ".", "q"}], TraditionalForm]]], " is known, one can also find the factorization of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " into ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", 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"], StyleBox[" ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Consider", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"n", "=", "9998000099"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"e", "="}], TraditionalForm]]], "6203014673. Let us compute the successive convergents of ", Cell[BoxData[ FormBox[ RowBox[{"e", "/", "n"}], TraditionalForm]]], ". We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Convergents", FontVariations->{"Underline"->True}], " ", StyleBox["which outputs the first so many convergents. ", FontSlant->"Italic"] }], "Example", CellChangeTimes->{{3.4214643617631097`*^9, 3.4214643709662347`*^9}, 3.423370565655074*^9, {3.4233708611669197`*^9, 3.423370863729371*^9}, { 3.423371001524581*^9, 3.423371040618081*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "9998000099"}], ";", RowBox[{"e", "=", "6203014673"}], ";"}], "\[IndentingNewLine]", RowBox[{"Convergents", "[", RowBox[{ RowBox[{"e", "/", "n"}], ",", "8"}], "]"}]}], "Input", CellChangeTimes->{{3.4233707476066003`*^9, 3.4233707724967475`*^9}, 3.423370906369177*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", FractionBox["1", "2"], ",", FractionBox["2", "3"], ",", FractionBox["3", "5"], ",", FractionBox["5", "8"], ",", FractionBox["13", "21"], ",", FractionBox["18", "29"]}], "}"}]], "Output", CellChangeTimes->{{3.4233707687936935`*^9, 3.423370773246733*^9}, 3.4233709070879135`*^9}] }, Open ]], Cell[TextData[{ "Let us check why the last convergent does not lead to ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " (the other cases are even simpler). Writing ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"18", "/", "29"}], "=", RowBox[{"k", "/", RowBox[{"(", RowBox[{"d", ".", "g"}], ")"}]}]}], TraditionalForm]]], " leads to ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "18"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", "1"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", "29"}], TraditionalForm]]], ". An easy argument to show that this is not the right value of ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " is an encryption followed by a decryption, not resulting into the original \ message. We use the function ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4233709144158974`*^9, 3.423370916322111*^9}, { 3.4234607540040193`*^9, 3.423460754738399*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "123"}], ";", RowBox[{"d", "=", "29"}], ";", RowBox[{"c", "=", RowBox[{"PowerMod", "[", RowBox[{"m", ",", "e", ",", "n"}], "]"}]}], ";", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"c", ",", "d", ",", "n"}], "]"}], "==", "m"}]}]], "Input", GeneratedCell->True], Cell[BoxData["False"], "Output", CellChangeTimes->{3.4214644086537347`*^9}], Cell[TextData[{ "\[LineSeparator]Let us try the ", Cell[BoxData[ FormBox[ SuperscriptBox["10", "th"], TraditionalForm]]], " convergent." }], "Text", CellChangeTimes->{ 3.4214644128724847`*^9, {3.4233709291344194`*^9, 3.423370934056263*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Convergents", "[", RowBox[{ RowBox[{"e", "/", "n"}], ",", " ", "10"}], "]"}]], "Input", CellChangeTimes->{{3.423370944228073*^9, 3.4233709958371177`*^9}}], Cell[BoxData[ FractionBox["85", "137"]], "Output", CellChangeTimes->{{3.4233709677591724`*^9, 3.423370988602789*^9}}] }, Open ]], Cell[TextData[{ "Writing ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"85", "/", "137"}], "=", RowBox[{"k", "/", RowBox[{"(", RowBox[{"d", ".", "g"}], ")"}]}]}], TraditionalForm]]], " leads to ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "85"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", "1"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", "137"}], TraditionalForm]]], ". From ", ButtonBox["(9.13)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Wien ed"], " we get ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], "=", "9993745862"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"k", "=", "85"}], ";", RowBox[{"g", "=", "1"}], ";", RowBox[{"d", "=", "137"}], ";", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"e", "*", "d"}], "-", "1"}], ")"}], RowBox[{"g", "/", "k"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData["9997800120"], "Output"], Cell[TextData[{ "Together with ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{ RowBox[{"p", ".", "q"}], "=", "9998000099"}]}], TraditionalForm]]], " we get ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "+", "q", "-", "1"}], "=", RowBox[{ RowBox[{ RowBox[{"p", ".", "q"}], "-", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "="}]}], TraditionalForm]]] }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"n", "-", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"e", "*", "d"}], "-", "1"}], ")"}], RowBox[{"g", "/", "k"}]}]}]], "Input"], Cell[BoxData["199979"], "Output"] }, Open ]], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " are the roots of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "-", "p"}], ")"}], RowBox[{"(", RowBox[{"x", "-", "q"}], ")"}]}], "=", RowBox[{ SuperscriptBox["x", "2"], "-", RowBox[{"199980", "x"}], "+", "9998000099"}]}], TraditionalForm]]], ". They can be found with the function ", StyleBox["Solve", FontVariations->{"Underline"->True}] }], "Text", CellChangeTimes->{3.4233955331327176`*^9, 3.4233957211807957`*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", "x", "]"}], ";", RowBox[{"Solve", "[", RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "-", RowBox[{"199980", "x"}], "+", "9998000099"}], "==", "0"}], ",", RowBox[{"{", "x", "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"x", "\[Rule]", "99989"}], "}"}], ",", RowBox[{"{", RowBox[{"x", "\[Rule]", "99991"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"99989", "\[Times]", "99991"}], "=", "n"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"99989", "*", "99991"}], "==", "n"}]], "Input"], Cell[BoxData["True"], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tSome Physical Attacks" }], "Subsection", TextAlignment->Left, TextJustification->0, CellTags->"SubsRSA physical"], Cell["\<\ Clearly physical attacks on cryptographic implementations are beyond the \ scope of this introduction. Nevertheless, two such attacks will be mentioned \ briefly, because of their relation to theory that we have explained here.\ \>", "Text"], Cell[CellGroupData[{ Cell["Timing Attack", "Subsubsection", TextAlignment->Left, TextJustification->0, CellTags->"SubsubsRSA Timing"], Cell[TextData[{ "Suppose that RSA is implemented on a hardware device (like a smartcard), \ and that the secret exponentiation (", Cell[BoxData[ FormBox[ RowBox[{"m", "\[RightArrow]", RowBox[{"(", RowBox[{ SuperscriptBox["m", "d"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[RightArrow]", RowBox[{"(", RowBox[{ SuperscriptBox["c", "d"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], ") in the RSA process follows a computational scheme of the type explained \ in ", ButtonBox["Subsection 8.1.1", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Log Problem"], ", i.e. any method that consists of repeated squarings and/or \ multiplications. See for instance ", ButtonBox["Example 8.1.3", BaseStyle->"Hyperlink", ButtonData:>"ExamDiscr Exp 171"], "." }], "Text"], Cell[TextData[{ "It is further assumed in this attack (see ", ButtonBox["[Koch96]", BaseStyle->"Hyperlink", ButtonData:>"RefKoch96"], ") that an observer can measure the electro-magnetic radiation or power \ consumption of the device and can clock the length of the various \ calculations. Typically, a multiplication takes longer than a simple squaring \ operation.\nIn this way, the attacker can determine the particular sequence \ of squarings and multiplications that the program went through. Based on the \ outcome, he can simply compute the secret exponent ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " stored on the card. " }], "Text", GeneratedCell->True], Cell["\<\ For instance, if the measurements give Sq.Sq.M.Sq.Sq.M.Sq.Sq.M.Sq.M, where Sq \ stands for Squaring and M for Multiplying, we get the exponent from\ \>", "Text"], 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"] }, Closed]], Cell[CellGroupData[{ Cell["The \"Microwave\" Attack", "Subsubsection", CellTags->"SubsubsRSA Microwave"], Cell[TextData[{ "Suppose again that RSA is implemented on a hardware device (say a \ smartcard), but now assume that the secret exponentiation (", Cell[BoxData[ FormBox[ RowBox[{"m", "\[RightArrow]", RowBox[{"(", RowBox[{ SuperscriptBox["m", "d"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[RightArrow]", RowBox[{"(", RowBox[{ SuperscriptBox["c", "d"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], ") in the RSA process makes use of the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19). See for instance ", ButtonBox["Example 9.1, Part 4", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA Decryp Part 4"], ". So, we assume that two independent exponentiations take place on this \ device: one modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and one modulo ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"p", ".", "q"}]}], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "Now suppose that this RSA implementation is used to sign data (this is the \ simplest version of the attack, cfr. ", ButtonBox["[LensA96]", BaseStyle->"Hyperlink", ButtonData:>"RefLenstA96"], " and ", ButtonBox["[BoDML97]", BaseStyle->"Hyperlink", ButtonData:>"RefBoDML97"], "). So, typically, the attacker presents a message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " to the smart card and would normally expect ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{"(", RowBox[{ SuperscriptBox["m", "d"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], " back. However, the attacker submits the smart card, when it is making its \ calculations, to the right kind of radiation (\"just put it in a microwave\" \ is an oversimplification of this attack) and hopes that in one of the two \ exponentiations an incorrect calculation will be made." }], "Text", GeneratedCell->True], Cell[TextData[{ "For instance, the smart card calculates ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", RowBox[{"(", RowBox[{ SuperscriptBox["m", "d"], " ", "mod", " ", "p"}], ")"}]}], TraditionalForm]]], " correctly, but gets a wrong value for ", Cell[BoxData[ FormBox[ SubscriptBox["c", "2"], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["c", "2"], "'"}], "\[NotEqual]", RowBox[{"(", RowBox[{ SuperscriptBox["m", "d"], " ", "mod", " ", "q"}], ")"}]}], TraditionalForm]]], ". The reader should remember that in the smart card values ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " are stored satisfying" }], "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[{ Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{"a", "\[Congruent]", "1"}], RowBox[{"(", "mod"}], RowBox[{"p", ")"}]}, { RowBox[{"a", "\[Congruent]", "0"}], RowBox[{"(", "mod"}], RowBox[{"q", ")"}]} }]}]], TextJustification->1], "\n\n", Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{"b", "\[Congruent]", "0"}], RowBox[{"(", "mod"}], RowBox[{"p", ")"}]}, { RowBox[{"b", "\[Congruent]", "1"}], RowBox[{"(", "mod"}], RowBox[{"q", ")"}]} }]}]], TextJustification->1] }], "DisplayFormula"], Cell[TextData[{ "So, the card will output ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "'"}], "=", RowBox[{"(", RowBox[{ RowBox[{"a", ".", SubscriptBox["c", "1"]}], "+", RowBox[{ RowBox[{"b", ".", RowBox[{ SubscriptBox["c", "2"], "'"}]}], " ", "mod", " ", "n"}]}], ")"}]}], TraditionalForm]]], ". Now note that since ", Cell[BoxData[ FormBox[ RowBox[{"b", "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], " " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "-", RowBox[{"c", "'"}]}], "\[Congruent]", RowBox[{ RowBox[{"a", ".", SubscriptBox["c", "1"]}], "-", RowBox[{"a", ".", SubscriptBox["c", "1"]}]}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "-", RowBox[{"c", "'"}]}], "\[Congruent]", RowBox[{ RowBox[{"b", ".", SubscriptBox["c", "2"]}], "-", RowBox[{"b", ".", RowBox[{ SubscriptBox["c", "2"], "'"}]}]}], "\[Congruent]", RowBox[{"b", "(", RowBox[{ SubscriptBox["c", "2"], "-", RowBox[{ SubscriptBox["c", "2"], "'"}]}], " ", ")"}], "\[NotCongruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "It follows that ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{"c", "-", RowBox[{"c", "'"}]}], ",", "n"}], ")"}], TraditionalForm]]], " gives a non-trivial factorization of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "It depends on the application whether the attacker can let the card give \ the correct value of ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " too, for instance by having the card sign ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " again without introducing any radiation). A way around this problem is to \ let the attacker select a message ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ", compute ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{"(", RowBox[{ SuperscriptBox["c", "e"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], " with the public exponent ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " and submit ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " when attacking the card. In this way, the correct value of ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " is already known beforehand. " }], "Text"], Cell[TextData[{ StyleBox["Example 9.1 (Part 6)", FontWeight->"Bold", FontSlant->"Plain"], "\nWe continue with the parameters of ", ButtonBox["Example 9.1", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA RSA"], ", so ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "B"], "=", "9733"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "B"], "=", "10177"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], StyleBox["=99052741", FontSlant->"Italic"], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "B"], "=", "81119923"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["d", "B"], "=", "17089915"}], TraditionalForm]]], ". \nFurther, ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", "45287650"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", "53765092"}], TraditionalForm]]], " (see ", ButtonBox["Ex. 9.1, Part 4", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA Decryp Part 4"], ").\nWhen, ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "12345678"}], TraditionalForm]]], ", the correct value of ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " is given by" }], "Text", FontSlant->"Italic", CellTags->"ExamRSA Decryp Part 4"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "99052741"}], ";", RowBox[{"e", "=", "81119923"}], ";", RowBox[{"c", "=", "11111111"}], ";", RowBox[{"m", "=", RowBox[{"PowerMod", "[", RowBox[{"c", ",", "e", ",", "n"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData["24307114"], "Output"], Cell[TextData[{ "So, when signing ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "24307114"}], TraditionalForm]]], " the card should produce ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "11111111"}], TraditionalForm]]], ". \nIn his calculations the card computes numbers ", Cell[BoxData[ FormBox[ SubscriptBox["c", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["c", "2"], TraditionalForm]]], " and gets ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " as follows:" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "9733"}], ";", RowBox[{"q", "=", "10177"}], ";", RowBox[{"d", "=", "17089915"}], ";", RowBox[{"d1", "=", RowBox[{"Mod", "[", RowBox[{"d", ",", RowBox[{"p", "-", "1"}]}], "]"}]}], ";", RowBox[{"d2", "=", RowBox[{"Mod", "[", RowBox[{"d", ",", RowBox[{"q", "-", "1"}]}], "]"}]}], ";", RowBox[{"m1", "=", RowBox[{"Mod", "[", RowBox[{"m", ",", "p"}], "]"}]}], ";", RowBox[{"m2", "=", RowBox[{"Mod", "[", RowBox[{"m", ",", "q"}], "]"}]}], ";", RowBox[{"a", "=", "45287650"}], ";", RowBox[{"b", "=", "53765092"}], ";", RowBox[{"c1", "=", RowBox[{"PowerMod", "[", RowBox[{"m1", ",", "d1", ",", "p"}], "]"}]}], ";", RowBox[{"c2", "=", RowBox[{"PowerMod", "[", RowBox[{"m2", ",", "d2", ",", "q"}], "]"}]}], ";", RowBox[{"c", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"a", "*", "c1"}], "+", RowBox[{"b", "*", "c2"}]}], ",", "n"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData["11111111"], "Output"], Cell[TextData[{ "However, when ", Cell[BoxData[ FormBox[ SubscriptBox["c", "1"], TraditionalForm]]], " is calculated incorrectly due to radiation, say ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["c", "1"], "'"}], "=", "8765"}], TraditionalForm]]], ", the card will produce an incorrect value ", Cell[BoxData[ FormBox[ RowBox[{"c", "'"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "11111111"}], TraditionalForm]]], " and the gcd of the difference of these two numbers with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " will yield a factor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". " }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"c1Prime", "=", "8765"}], ";"}], "\n", RowBox[{"cPr", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"a", "*", "c1Prime"}], "+", RowBox[{"b", "*", "c2"}]}], ",", "n"}], "]"}]}], "\n", RowBox[{"GCD", "[", RowBox[{ RowBox[{"c", "-", "cPr"}], ",", "n"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["92608527"], "Output"], Cell[BoxData["10177"], "Output"] }, Open ]], Cell[TextData[{ "The number 10177 is indeed one of the two factors of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Text", FontSlant->"Italic"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tHow to Generate Large Prime Numbers; Some Primality Tests" }], "Section", CellTags->"SectRSA generate primes"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tTrying Random Numbers" }], "Subsection", CellTags->"SubsRSA try random"], Cell["\<\ To make the RSA system practical, one needs an efficient way to generate very \ long prime numbers. The following pseudo-algorithm describes a probabilistic \ way of how this can be done.\ \>", "Text"], Cell[TextData[{ StyleBox["Algorithm ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox[" \tMethod to generate an ", FontWeight->"Bold"], Cell[BoxData[ FormBox["l", TraditionalForm]], FontWeight->"Bold"], StyleBox["-digits long prime number", FontWeight->"Bold"], StyleBox["\n\n", FontSlant->"Italic"], StyleBox["Step 1", FontVariations->{"Underline"->True}], ": Write down a random, odd integer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " digits long.\n\n", StyleBox["Step 2", FontVariations->{"Underline"->True}], ": Test the candidate ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " for primality. \n\t If ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is not prime, go back to Step 1, otherwise STOP. " }], "Theorem", CellTags->"AlgRSA generate prime"], Cell[TextData[{ "In the next two paragraphs we shall discuss several ways to test an integer \ ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " for primality. The first two tests do not give an absolute guarantee that \ ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is prime, but the probability that a composite number ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " meets the test can be made arbitrary small. The second test (of which only \ an outline will be given in ", ButtonBox["Section 9.3.3", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Lenstra"], ") can guarantee the primality, but it is much slower. For other tests we \ refer the reader to ", ButtonBox["[Knut81]", BaseStyle->"Hyperlink", ButtonData:>"RefKnut81"], ", Section 4.5.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"], StyleBox["\n", FontWeight->"Bold"], "In ", StyleBox["Mathematica", FontSlant->"Italic"], " one can use the functions ", StyleBox["RandomInteger", FontVariations->{"Underline"->True}], ", ", StyleBox["PrimeQ", FontVariations->{"Underline"->True}], ", and ", StyleBox["While", FontVariations->{"Underline"->True}], " to simulate the above algorithm. Note that the parity of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is not tested below (this is not an essential part of the above algorithm \ anyway)." }], "Example", CellChangeTimes->{{3.423396605077078*^9, 3.4233966093896055`*^9}, 3.423397306612818*^9, {3.423454513457062*^9, 3.423454515675812*^9}}, CellTags->"ExamRSA RSA"], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"u", "=", "1"}], ";", RowBox[{"l", "=", "3"}], ";"}], ")"}], " ", RowBox[{"(", RowBox[{ RowBox[{"att", "=", "0"}], ";"}], ")"}], " ", RowBox[{"(", RowBox[{ RowBox[{"While", "[", RowBox[{ RowBox[{ RowBox[{"PrimeQ", "[", "u", "]"}], "\[Equal]", "False"}], ",", RowBox[{ RowBox[{"att", "=", RowBox[{"att", "+", "1"}]}], ";", RowBox[{"u", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{ SuperscriptBox["10", RowBox[{"l", "-", "1"}]], ",", SuperscriptBox["10", "l"]}], "}"}], "]"}]}]}]}], "]"}], ";"}], ")"}], " ", RowBox[{"Print", "[", RowBox[{"\"\\"", ",", "u"}], "]"}], " ", RowBox[{"Print", "[", RowBox[{"att", ",", "\"\< attempt(s)\>\""}], "]"}]}]], "Input", GeneratedCell->True], Cell[TextData[{ "How often does one expect to have to go through Steps 1 and 2 in the above \ \"algorithm\" before obtaining a prime? To answer this question we have to \ know the fraction of the prime numbers in the set of odd, ", Cell[BoxData[ FormBox["l", TraditionalForm]]], "-digit numbers. To this end we quote the ", ButtonBox["Prime Number Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Prime Numb Th"], " (Th. A.2)." }], "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[ RowBox[{"\[Pi]", "(", "x", ")"}], TraditionalForm]]], " count the number of primes less than or equal to ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " (see ", ButtonBox["Definition A.1", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Pi(x)"], "). Then", StyleBox["\n\t", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["lim", RowBox[{"x", "\[RightArrow]", "\[Infinity]"}]], " ", FractionBox[ RowBox[{"\[Pi]", "(", "x", ")"}], RowBox[{ RowBox[{"x", "/", "ln"}], " ", "x"}]]}], "=", "1"}], TraditionalForm]]] }], "Theorem", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"prime number is \"\>", "\[InvisibleSpace]", "439"}], SequenceForm["prime number is ", 439], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"9", "\[InvisibleSpace]", "\<\" attempt(s)\"\>"}], SequenceForm[9, " attempt(s)"], Editable->False]], "Print"], Cell[TextData[{ "\nWith the Prime Number Theorem one can quite easily obtain an \ approximation of the fraction of odd, ", Cell[BoxData[ FormBox["l", TraditionalForm]]], "-digit numbers that are prime. One gets" }], "Text"], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FractionBox[ RowBox[{ RowBox[{"\[Pi]", "(", SuperscriptBox["10", "l"], ")"}], "-", RowBox[{"\[Pi]", "(", SuperscriptBox["10", RowBox[{"l", "-", "1"}]], ")"}]}], RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["10", "l"], "-", SuperscriptBox["10", RowBox[{"l", "-", "1"}]]}], ")"}], "/", "2"}]], " ", OverscriptBox["\[TildeTilde]", ButtonBox[ RowBox[{"P", ".", "N", ".", "T", "."}], BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Prime Numb Th"]], " ", FractionBox[ RowBox[{ FractionBox[ SuperscriptBox["10", "l"], RowBox[{"ln", " ", SuperscriptBox["10", "l"]}]], " ", "-", " ", FractionBox[ SuperscriptBox["10", RowBox[{"l", "-", "1"}]], RowBox[{"ln", " ", SuperscriptBox["10", RowBox[{"l", "-", "1"}]]}]]}], RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["10", "l"], "-", SuperscriptBox["10", RowBox[{"l", "-", "1"}]]}], ")"}], "/", "2"}]]}], "=", " ", RowBox[{ FractionBox[ RowBox[{"2", RowBox[{"(", RowBox[{ RowBox[{"9", "l"}], "-", "10"}], ")"}]}], RowBox[{"9.", RowBox[{"l", ".", RowBox[{"(", RowBox[{"l", "-", "1"}], ")"}], ".", "ln"}], " ", "10"}]], "\[TildeTilde]", " ", FractionBox["2", RowBox[{ RowBox[{"l", ".", "ln"}], " ", "10"}]]}]}], TraditionalForm]]] }], "Text", GeneratedCell->True], Cell[TextData[{ "For instance, with ", Cell[BoxData[ FormBox[ RowBox[{"l", "=", "100"}], TraditionalForm]]], ", one gets" }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"l", "=", "100"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"EstimateProb", "[", "l_", "]"}], "=", RowBox[{"2", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"9", "*", "l"}], "-", "10"}], ")"}], "/", RowBox[{"(", RowBox[{"9", "*", "l", "*", RowBox[{"(", RowBox[{"l", "-", "1"}], ")"}], "*", RowBox[{"Log", "[", "10", "]"}]}], ")"}]}]}]}], ";"}], "\n", RowBox[{"N", "[", RowBox[{ RowBox[{"EstimateProb", "[", "100", "]"}], ",", "3"}], "]"}]}], "Input", CellChangeTimes->{{3.423469996425523*^9, 3.4234699976442804`*^9}}], Cell[BoxData["0.008676141164846107`"], "Output"], Cell["\<\ Since the reciprocal of this number is about 115, we estimate that the \ expected number runs in the prime generation algorithm above will be 115. \ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tProbabilistic Primality Tests" }], "Subsection", CellTags->"SubsRSA prob appr"], Cell[CellGroupData[{ Cell["The Solovay and Strassen Primality Test", "Subsubsection", CellTags->"SubsubsRSA Solovay"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be a prime number. We recall from ", ButtonBox["Definition A.9", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " that an integer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[NotVerticalBar]", "u"}], TraditionalForm]]], " (read: ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " does not divide ", Cell[BoxData[ FormBox["u", TraditionalForm]]], "), is called a ", StyleBox["quadratic residue", FontSlant->"Italic"], " (", StyleBox["QR", FontSlant->"Italic"], ") modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", if the equation" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"u", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "," }], "DisplayFormula", CellTags->"FormRSA qr"], Cell[TextData[{ "has an integer solution. If ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[NotVerticalBar]", "u"}], TraditionalForm]]], " and this congruence relation does not have an integer solution, ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " will be called a ", StyleBox["quadratic non-residue", FontSlant->"Italic"], " modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " (", StyleBox["NQR", FontSlant->"Italic"], "). The well known ", ButtonBox["Legendre symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"u", "/", "p"}], ")"}], TraditionalForm]]], " (see Definition A.10) is defined by" }], "Text", GeneratedCell->True], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["u", "p"], ")"}], TraditionalForm]]], " = ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{"+", "1"}]}, {GridBox[{ { RowBox[{"-", "1"}]}, { RowBox[{" ", "0"}]} }]} }]}], TraditionalForm]]], "\t ", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", "u", " ", "is", " ", StyleBox["a", FontSlant->"Plain"], " ", "quadratic", " ", "residue", " ", "mod", " ", "p"}], ","}], " "}]}, { RowBox[{" ", RowBox[{ RowBox[{"if", " ", "u", " ", "is", " ", StyleBox["a", FontSlant->"Plain"], " ", "quadratic", " ", "nonresidue", " ", "mod", " ", "p"}], ","}]}]}, { RowBox[{"if", " ", "p", " ", "divides", " ", RowBox[{"u", "."}], " "}]} }], TraditionalForm]]], "\t" }], "DisplayFormula"], Cell[TextData[{ "The ", ButtonBox["Jacobi symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["u", "m"], ")"}], TraditionalForm]]], " (see Definition A.11) generalizes the Legendre symbol to all odd integers \ ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ FormBox[ SubscriptBox["\[CapitalPi]", "i"], TraditionalForm], " ", FormBox[ SuperscriptBox[ RowBox[{"(", FormBox[ SubscriptBox["p", "i"], TraditionalForm], ")"}], SubscriptBox["e", "i"]], TraditionalForm]}]}], TraditionalForm]]], " where the ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], "'s are (not necessarily distinct) odd primes. Then, ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["u", "m"], ")"}], TraditionalForm]]], " is defined by" }], "Text", GeneratedCell->True], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], "=", RowBox[{ SubscriptBox["\[Product]", "i"], SuperscriptBox[ RowBox[{"(", FractionBox["u", SubscriptBox["p", "i"]], ")"}], SubscriptBox["e", "i"]]}]}], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "In ", ButtonBox["Section A.4", BaseStyle->"Hyperlink", ButtonData:>"SecAppA QR"], ", the reader can find all kinds of properties of the Legendre symbol and \ the Jacobi symbol. These properties culminate in an extremely efficient \ algorithm to compute the values of these symbols. An example can be found \ there. In ", StyleBox["Mathematica", FontSlant->"Italic"], ", both symbols can be computed with the ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], " function:" }], "Text", CellChangeTimes->{{3.4233023043236637`*^9, 3.4233023145737295`*^9}, { 3.4233024209494104`*^9, 3.4233024351838765`*^9}, 3.4233948427064238`*^9}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"u", "=", "12703"}], ";", " ", RowBox[{"m", "=", "16361"}], ";", " ", RowBox[{"JacobiSymbol", "[", RowBox[{"u", ",", " ", "m"}], "]"}]}]], "Input"], Cell[BoxData["1"], "Output", CellChangeTimes->{3.423302264823411*^9}] }, Open ]], Cell[TextData[{ "As a matter of fact, since ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " in the example above, is a prime number, it is quite easy to compute a \ \"square-root\" of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ". For a discussion of how this can be done, we refer the reader to ", ButtonBox["Section 9.5", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Rabin"], ". In ", StyleBox["Mathematica", FontSlant->"Italic"], " one can simply use the ", StyleBox["Solve", FontVariations->{"Underline"->True}], " function." }], "Text", CellChangeTimes->{3.4233955388358793`*^9, 3.4233957254933233`*^9}], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", "x", "]"}], ";", RowBox[{"Solve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "==", "12703"}], ",", RowBox[{"Modulus", "==", "16361"}]}], "}"}], ",", "x"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "16361"}], ",", RowBox[{"x", "\[Rule]", "7008"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "16361"}], ",", RowBox[{"x", "\[Rule]", "9353"}]}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"\[PlusMinus]", "7008"}], ")"}], "2"], "\[Congruent]", RowBox[{"12703", " ", RowBox[{"(", RowBox[{"mod", " ", "16361"}], ")"}]}]}], TraditionalForm]]], ", as can be checked with the ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " function." }], "Text", CellChangeTimes->{{3.423460759769681*^9, 3.4234607604884357`*^9}}], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"7008", ",", "2", ",", "16361"}], "]"}]], "Input"], Cell[BoxData["12703"], "Output"], Cell[TextData[{ "To find a solution of the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"u", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " for composite integers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is, in general, a very difficult problem and intractable for large values \ of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " (see ", ButtonBox["[Pera86]", BaseStyle->"Hyperlink", ButtonData:>"RefPera86"], " for a discussion of this problem). \nIf ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is the product of different primes and this factorization is known (!), \ one can find the square root of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " by finding the square root of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " modulo all the prime factors of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and then combine the result by means of the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], ". In ", ButtonBox["Section 9.5", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Rabin"], ", this method will be demonstrated. When ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " has higher prime powers in its factorization, matters get much more \ complicated. " }], "Text", GeneratedCell->True], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be a prime number, ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "2"}], TraditionalForm]]], ". We recall from ", ButtonBox["Theorem A.23", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA u/p=u^(p-1)/2"], " that for all integers ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ":" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "p"], ")"}], "\[Congruent]", SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]]}], TraditionalForm]]], " (mod ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ")." }], "NumberedEquation", CellTags->"FormRSA u^(p-1)/2="], Cell[TextData[{ "The Solovay and Strassen Algorithm ", ButtonBox["[SolS77]", BaseStyle->"Hyperlink", ButtonData:>"RefSolS77"], " relies on the following theorem." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be an odd integer and let ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " be defined by\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"G", " ", "=", " ", RowBox[{"{", " ", RowBox[{ RowBox[{ RowBox[{"0", "\[LessEqual]", "u", "<", "m"}], " ", "|", " ", RowBox[{"gcd", "(", RowBox[{"u", ",", "m"}], ")"}]}], "=", RowBox[{ RowBox[{"1", " ", "and", " ", RowBox[{"(", FractionBox["u", "m"], ")"}]}], "\[Congruent]", RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], " ", RowBox[{"(", RowBox[{"mod", " ", FormBox["m", TraditionalForm]}], ")"}]}]}]}], " ", "}"}]}], TraditionalForm]]], "\n\nThen" }], "Theorem", CellTags->"TheoRSA Solovay"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "G", "|"}], "=", RowBox[{"m", "-", "1"}]}], TraditionalForm]]], "\t\tif ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime. " }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"|", "G", "|", RowBox[{"\[LessEqual]", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]}]}], TraditionalForm]]], "\tif ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is not a prime, " }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": If ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime, every integer ", Cell[BoxData[ FormBox[ RowBox[{"0", "<", "u", "<", "m"}], TraditionalForm]]], " satisfies ", ButtonBox["(9.15)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA u^(p-1)/2="], ", and has gcd 1 with ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "G", "|"}], "=", RowBox[{"m", "-", "1"}]}], TraditionalForm]]], " in this case. \nSo, we now consider the case that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is not a prime number. Clearly, ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " is a ", ButtonBox["subgroup", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subgroup"], " of the multiplicative group" }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ ButtonBox[ RowBox[{ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], " "}], BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], "=", " ", RowBox[{ RowBox[{"{", " ", RowBox[{ RowBox[{ RowBox[{"0", "\[LessEqual]", "u", "<", "m"}], " ", "|", " ", RowBox[{"gcd", "(", RowBox[{"u", ",", "m"}], ")"}]}], "=", "1"}], " ", "}"}], "."}]}], TraditionalForm]]]], "DisplayFormula", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "It follows (from ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ") that the cardinality of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " divides that of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], ". So, if ", Cell[BoxData[ FormBox[ RowBox[{"G", "\[NotEqual]", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"]}], TraditionalForm]]], " we can conclude that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "G", "|", RowBox[{"\[LessEqual]", RowBox[{"|", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], "|", RowBox[{"/", "2"}]}]}]}], "=", RowBox[{ RowBox[{ RowBox[{"\[CurlyPhi]", "(", "m", ")"}], "/", "2"}], "\[LessEqual]", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]}]}], TraditionalForm]]], ".This would prove the theorem. We conclude, that it suffices to prove the \ existence of an element ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], "\[NotCongruent]", RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "We distinguish two cases. In ", ButtonBox["[SolS77]", BaseStyle->"Hyperlink", ButtonData:>"RefSolS77"], ", the authors omit to consider the case that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is a square. In the proof below, which is due to J.W. Nienhuys (private \ communication), Case 1 will cover this possibility." }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Case 1", FontVariations->{"Underline"->True}], ": The number ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is divisible by at least the square of some prime number. We write ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ SuperscriptBox["p", "r"], ".", "s"}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " an odd prime, ", Cell[BoxData[ FormBox[ RowBox[{"r", "\[GreaterEqual]", "2"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"p", ",", "s"}], ")"}], "=", "1"}], TraditionalForm]]], ". \nLet ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " be a solution of the system simultaneous congruence relations:" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{"1", "+", RowBox[{"p", " ", RowBox[{"(", RowBox[{"mod", " ", SuperscriptBox["p", "r"]}], ")"}]}]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellMargins->{{Inherited, 1}, {Inherited, Inherited}}, FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormRSA a=1+p"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "s"}], ")"}]}]}], TraditionalForm]], CellTags->"FormRSA a=1 mod s"], "." }], "NumberedEquation", CellMargins->{{Inherited, 1}, {Inherited, Inherited}}, FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormRSA a=1 mod s"], Cell[TextData[{ "By the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19) such a solution ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " exists and is unique modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". Clearly, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"u", ",", SuperscriptBox["p", "r"]}], ")"}], "=", RowBox[{ RowBox[{"gcd", "(", RowBox[{"u", ",", "s"}], ")"}], "=", "1"}]}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"u", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"]}], TraditionalForm]]], ".\nIt follows from ", ButtonBox["(9.18)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA a=1+p"], ", the binomial theorem, and an argument similar to the proof of ", ButtonBox["Theorem B.26", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB (x-a)^p="], " that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", "m"], "\[Congruent]", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "p"}], ")"}], "m"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SuperscriptBox["p", "r"]}], ")"}]}]}], TraditionalForm]]], ". By ", ButtonBox["(9.19)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA a=1 mod s"], " we also have that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", "m"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "s"}], ")"}]}]}], TraditionalForm]]], ". By the Chinese Remainder Theorem we now have that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", "m"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ". \nSince ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[NotCongruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " by ", ButtonBox["(9.18)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA a=1+p"], ", it also follows that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{"m", "-", "1"}]], "\[NotCongruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ". This in turn implies that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], "\[NotCongruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ", which implies that ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " can not satisfy ", ButtonBox["(9.15)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA u^(p-1)/2="], ". We conclude that this element ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is a member of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], ", but not of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], "." }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Case 2", FontVariations->{"Underline"->True}], ": ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is the product of ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " distinct prime numbers, say ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ SubscriptBox["p", "1"], SubscriptBox["p", "2"], "\[Ellipsis]", " ", SubscriptBox["p", "s"]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"s", "\[GreaterEqual]", "2"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " be a quadratic non-residue modulo ", Cell[BoxData[ FormBox[ SubscriptBox["p", "1"], TraditionalForm]]], ". By the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " there is a unique integer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " satisfying the system simultaneous congruence relations" }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "\[Congruent]", RowBox[{"a", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "1"]}], ")"}]}]}], ","}], TraditionalForm]]]], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "i"]}], ")"}]}]}], ","}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "s"}], TraditionalForm]]], "." }], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormRSA u=a p1"], Cell[TextData[{ "Clearly, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"u", ",", SubscriptBox["p", "i"]}], ")"}], "=", "1"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "s"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"]}], TraditionalForm]]], ". To show that ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[NotElement]", "G"}], TraditionalForm]]], ", we need to show that ", ButtonBox["(9.15) ", BaseStyle->"Hyperlink", ButtonData:>"FormRSA u^(p-1)/2="], "does not hold.\nSince ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "i"]}], ")"}]}]}], ","}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "s"}], TraditionalForm]]], ", it follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", SubscriptBox["p", "i"]], ")"}], "=", "1"}], TraditionalForm]]], " for these indices. But ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", SubscriptBox["p", "1"]], ")"}], "=", RowBox[{ RowBox[{"(", FractionBox["a", SubscriptBox["p", "1"]], ")"}], "=", RowBox[{"-", "1"}]}]}], TraditionalForm]]], ", because ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " is NQR. From the definition of the Jacobi symbol (", ButtonBox["Def. A.11", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], ") it follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], "=", RowBox[{"-", "1"}]}], TraditionalForm]]], ". In particular this implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], "\[Congruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "i"]}], ")"}]}]}], TraditionalForm]]], " for any ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "s"}], TraditionalForm]]], ".\nOn the other hand, ", ButtonBox["(9.21)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA u=a p1"], " implies that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "i"]}], ")"}]}]}], TraditionalForm]]], " for any ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "s"}], TraditionalForm]]], ". Hence" }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], "\[NotCongruent]", RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "i"]}], ")"}]}]}], TraditionalForm]]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "for any ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "s"}], TraditionalForm]]], ", and a fortiori (9.15) does not hold." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["We can now describe the Solovay and Strassen Algorithm.", "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["Solovay and Strassen", FontSlant->"Italic"], " primality test\n\t", StyleBox["input\t", FontWeight->"Bold"], "odd integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " (candidate) \n\t\tsecurity parameter ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "\n\t", StyleBox["initialize ", FontWeight->"Bold"], "prime=True; i=1;\n\t", StyleBox["while", FontWeight->"Bold"], " prime ", StyleBox["and", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[LessEqual]", "k"}], TraditionalForm]]], " ", StyleBox["do", FontWeight->"Bold"], "\n\t\t", StyleBox["begin", FontWeight->"Bold"], "\n\t\t", StyleBox["select ", FontWeight->"Bold"], "a random integer ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", " ", RowBox[{"1", "<", "u", "<", "m"}]}], TraditionalForm]]], ";\n\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"u", ",", "m"}], ")"}], "\[NotEqual]", "1"}], TraditionalForm]]], " ", StyleBox["or", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], "\[NotCongruent]", RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " ", StyleBox["then", FontWeight->"Bold"], " prime=False;\n\t\ti=i+1;\n\t\t", StyleBox["end\n\toutput ", FontWeight->"Bold"], "prime" }], "Theorem", CellTags->"AlgRSA Solovay"], Cell[TextData[{ "In the algorithm above, ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " can be any positive integer. The probability that ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " independently and randomly selected elements ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " will pass the two tests, given in Algorithm 9.6, while ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is not prime, is less than or equal to ", Cell[BoxData[ FormBox[ SuperscriptBox["2", RowBox[{"-", "k"}]], TraditionalForm]]], " by ", ButtonBox["Theorem 9.5", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Solovay"], ". By taking ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " sufficiently large, the probability that a non-prime number survives the \ above algorithm can be made arbitrary small. \nSee however the ", ButtonBox["Miller-Rabin", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Miller-Rabin"], " test in the next subsubsection, where we have ", Cell[BoxData[ FormBox[ SuperscriptBox["4", RowBox[{"-", "k"}]], TraditionalForm]]], " as probability that a composite number is not detected after ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " tests." }], "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"], "\nTo test if the odd number ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "1234563"}], TraditionalForm]]], " is prime we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["GCD", FontVariations->{"Underline"->True}], ", ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], ", ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ", and ", StyleBox["Mod", FontVariations->{"Underline"->True}], ":" }], "Example", CellChangeTimes->{ 3.4233948463783226`*^9, 3.4233960923862967`*^9, 3.4233968717037845`*^9, { 3.4234607637228317`*^9, 3.4234607646134624`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "1234563"}], ";", RowBox[{"u", "=", "1212121"}], ";", RowBox[{ RowBox[{"GCD", "[", RowBox[{"u", ",", "m"}], "]"}], "==", "1"}]}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"u", ",", "m"}], "]"}], "-", RowBox[{"PowerMod", "[", RowBox[{"u", ",", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}], ",", "m"}], "]"}]}], ",", "m"}], "]"}], "==", "0"}]}], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output"], Cell[BoxData["False"], "Output"] }, Open ]], Cell[TextData[{ "The reader is invited to test ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "104729"}], TraditionalForm]]], " for primality." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Miller-Rabin Test", "Subsubsection", CellTags->"SubsubsRSA Miller-Rabin"], Cell[TextData[{ "The Miller-Rabin test ", ButtonBox["[Mill76]", BaseStyle->"Hyperlink", ButtonData:>"RefMill76"], ", ", ButtonBox["[Rabi80a]", BaseStyle->"Hyperlink", ButtonData:>"RefRabi80a"], " is based on the fact (see ", ButtonBox["Theorem B.14", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], ") that the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " has only two solutions: ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "So, let ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be an odd integer that we want to test for primality. Assuming for a \ moment that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is in fact prime, we have by ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " (Thm. A.15) that any integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], " satisfies ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{"m", "-", "1"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ".\nSince ", Cell[BoxData[ FormBox[ RowBox[{"m", "-", "1"}], TraditionalForm]]], " is even, it follows that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ". If ", Cell[BoxData[ FormBox[ SuperscriptBox["a", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]]], " happens to be ", Cell[BoxData[ FormBox[ RowBox[{"+", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}], TraditionalForm]]], " is even, we can repeat the argument, so in this case we conclude that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "4"}]], "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ", etc. In this way, one can prove the following lemma." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be a prime and write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "-", "1"}], "=", RowBox[{"a", SuperscriptBox[".2", "f"]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " odd. Let ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " be an integer in between 1 and ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], ". Then \neither\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", "a"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "\nor\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{"a", SuperscriptBox[".2", "i"]}]], "\[Congruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", "f"}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ "To test an odd integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " for primality we proceed as follows. First we write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "-", "1"}], "=", RowBox[{"a", SuperscriptBox[".2", "f"]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " odd. Next we pick a random integer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "u", "<", "m"}], TraditionalForm]]], ", and compute from left to right ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", "a"], ",", SuperscriptBox["u", RowBox[{"a", ".2"}]], ",", "\[Ellipsis]", ",", " ", SuperscriptBox["u", RowBox[{"a", SuperscriptBox[".2", "f"]}]]}], TraditionalForm]]], ". As soon as one of these numbers is not in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", "1"}], "}"}], TraditionalForm]]], ", while the next one is ", Cell[BoxData[ FormBox[ RowBox[{"+", "1"}], TraditionalForm]]], ", or if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{"a", SuperscriptBox[".2", "f"]}]], "\[NotCongruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " we may conclude that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is composite and we can stop. \nWe repeat the test ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " times, where ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is a security parameter, that will be discussed in a moment." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be an integer and let ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " be such that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{"a", SuperscriptBox[".2", "j"]}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"j", "\[GreaterEqual]", "1"}], TraditionalForm]]], ", while ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{"a", SuperscriptBox[".2", RowBox[{"j", "-", "1"}]]}]], "\[NotCongruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is called a ", StyleBox["strong witness", FontSlant->"Italic"], " to the compositeness of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". It gives a proof that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is composite." }], "Text", CellTags->"DefRSA strong witness"], Cell[TextData[{ "On the other hand, let ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be composite and let ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " be an integer that satisfies ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", "a"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{"a", SuperscriptBox[".2", "j"]}]], "\[Congruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]], CellTags->"DefRSA strong liar"], " for some ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"f", "-", "1"}]}], TraditionalForm]]], ", then this ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is called a ", StyleBox["strong liar", FontSlant->"Italic"], " (to the primality) of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". \nFor an efficient primality test we want composite numbers to have as \ few strong liars as possible." }], "Text", CellTags->"DefRSA strong liar"], 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["Miller-Rabin", FontSlant->"Italic"], " primality test\n\t", StyleBox["input\t", FontWeight->"Bold"], "odd integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " (candidate) \n\t\tsecurity parameter ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "\n\t", StyleBox["initialize ", FontWeight->"Bold"], "prime=True; i=1;\n\t", StyleBox["write", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "-", "1"}], "=", RowBox[{"a", SuperscriptBox[".2", "f"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " odd.\n\t", StyleBox["while", FontWeight->"Bold"], " prime ", StyleBox["and", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[LessEqual]", "k"}], TraditionalForm]]], " ", StyleBox["do", FontWeight->"Bold"], "\n\t\t", StyleBox["begin", FontWeight->"Bold"], "\n\t\t", StyleBox["select ", FontWeight->"Bold"], "a random integer ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", " ", RowBox[{"1", "<", "u", "<", RowBox[{"m", "-", "1"}]}]}], TraditionalForm]]], ";\n\t\t", StyleBox["compute", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{"(", RowBox[{ SuperscriptBox["u", "a"], " ", "mod", " ", "m"}], ")"}]}], TraditionalForm]]], "\n\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[NotCongruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " ", StyleBox["then\n\t\t\tbegin", FontWeight->"Bold"], "\t", StyleBox["put", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"j", "=", "1"}], TraditionalForm]]], "\n\t\t\t\t", StyleBox["while", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[NotCongruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " ", StyleBox["and", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"j", "\[LessEqual]", RowBox[{"f", "-", "1"}]}], TraditionalForm]]], "\n\t\t\t\t", StyleBox["do begin", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[LeftArrow]", RowBox[{"(", RowBox[{ SuperscriptBox["x", "2"], " ", "mod", " ", "m"}], ")"}]}], TraditionalForm]]], "\n\t\t\t \t\t", StyleBox["if ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], StyleBox[" then", FontWeight->"Bold"], " prime=False\n\t\t\t \t\t", Cell[BoxData[ FormBox[ RowBox[{"j", "\[LeftArrow]", RowBox[{"j", "+", "1"}]}], TraditionalForm]]], "\n\t\t\t \t\t", StyleBox["end\n\t\t\t\tif ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"x", "\[NotCongruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " ", StyleBox["then", FontWeight->"Bold"], " prime=False\n\t\t\t ", StyleBox["end", FontWeight->"Bold"], "\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"i", "=", RowBox[{"i", "+", "1"}]}], TraditionalForm]]], ";\n\t\t", StyleBox["end\n\toutput ", FontWeight->"Bold"], "prime" }], "Theorem", CellTags->"AlgRSA Miller-Rabin"], 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"], "Let", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"m", "=", "7933"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "-", "1"}], "=", SuperscriptBox["1983.2", "2"]}], TraditionalForm]]], ". Let us pick a random ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and compute ", Cell[BoxData[ FormBox[ SuperscriptBox["u", SuperscriptBox["1983.2", "i"]], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", "=", "0"}], ",", "1", ",", "2"}], TraditionalForm]]], ". We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["While", FontVariations->{"Underline"->True}], " and ", StyleBox["EvenQ", FontVariations->{"Underline"->True}], " to write ", Cell[BoxData[ FormBox[ RowBox[{"m", "-", "1"}], TraditionalForm]]], " as ", Cell[BoxData[ FormBox[ RowBox[{"a", SuperscriptBox[".2", "f"]}], TraditionalForm]]], " and use ", StyleBox["RandomInteger", FontVariations->{"Underline"->True}], ", ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ", ", StyleBox["Print", FontVariations->{"Underline"->True}], ", and ", StyleBox["Do", FontVariations->{"Underline"->True}], " for the actual test." }], "Example", CellChangeTimes->{ 3.4233922405960207`*^9, 3.4233924554255204`*^9, {3.4233966248584547`*^9, 3.4233966361241517`*^9}, {3.4234545273164372`*^9, 3.4234545296914372`*^9}, {3.4234607683791113`*^9, 3.423460769113491*^9}, { 3.423470033191383*^9, 3.42347003661328*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "7933"}], ";", RowBox[{"f", "=", "0"}], ";", RowBox[{"a", "=", RowBox[{"m", "-", "1"}]}], ";", RowBox[{"While", "[", RowBox[{ RowBox[{"EvenQ", "[", "a", "]"}], ",", RowBox[{ RowBox[{"f", "=", RowBox[{"f", "+", "1"}]}], ";", RowBox[{"a", "=", FractionBox["a", "2"]}]}]}], "]"}], ";", RowBox[{"{", RowBox[{"a", ",", "f"}], "}"}]}], "\n", RowBox[{"u", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{"1", ",", RowBox[{"m", "-", "2"}]}], "}"}], "]"}]}], "\n", RowBox[{ RowBox[{"x", "=", RowBox[{"PowerMod", "[", RowBox[{"u", ",", "a", ",", "m"}], "]"}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"Print", "[", "x", "]"}], ",", RowBox[{"x", "=", RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["x", "2"], ",", "m"}], "]"}]}]}], "}"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "f"}], "}"}]}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1983", ",", "2"}], "}"}]], "Output"], Cell[BoxData["465"], "Output"], Cell[BoxData["4983"], "Print"], Cell[BoxData["7932"], "Print"], Cell[BoxData["1"], "Print"], Cell[TextData[{ "We see that no matter how often we run this, we shall always get ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"+", "1"}], ",", RowBox[{"+", "1"}], ",", RowBox[{"+", "1"}]}], ")"}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"-", "1"}], ",", RowBox[{"+", "1"}], ",", RowBox[{"+", "1"}]}], ")"}], TraditionalForm]]], ", or ", Cell[BoxData[ FormBox[ RowBox[{"(*", RowBox[{ RowBox[{",", " ", RowBox[{"-", "1"}], ",", " ", RowBox[{"+", "1"}]}], ")"}]}], TraditionalForm]]], " ." }], "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[" ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "429"}], TraditionalForm]]], ". A ", ButtonBox["strong witness", BaseStyle->"Hyperlink", ButtonData:>"DefRSA strong witness"], " of the compositeness of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is given by the choice ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "34"}], TraditionalForm]]], ", as we can see below." }], "Example"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "429"}], ";", RowBox[{"f", " ", "=", " ", "0"}], ";", RowBox[{"a", " ", "=", " ", RowBox[{"m", "-", "1"}]}], ";", " ", RowBox[{"While", "[", RowBox[{ RowBox[{"EvenQ", "[", "a", "]"}], ",", RowBox[{ RowBox[{"f", "=", RowBox[{"f", "+", "1"}]}], ";", RowBox[{"a", "=", " ", RowBox[{"a", "/", "2"}]}]}]}], "]"}], ";", RowBox[{"{", RowBox[{"a", ",", "f"}], "}"}]}], "\n", RowBox[{"u", "=", "34"}], "\n", RowBox[{ RowBox[{"x", "=", RowBox[{"PowerMod", "[", RowBox[{"u", ",", "a", ",", "m"}], "]"}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"Print", "[", "x", "]"}], ",", RowBox[{"x", "=", RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["x", "2"], ",", "m"}], "]"}]}]}], "}"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "f"}], "}"}]}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"107", ",", "2"}], "}"}]], "Output"], Cell[BoxData["34"], "Output"], Cell[BoxData["265"], "Print"], Cell[BoxData["298"], "Print"], Cell[BoxData["1"], "Print"] }, Open ]], Cell[TextData[{ "What remains to be done is to give an estimate of the fraction of strong \ liars modulo a composite number. The next theorem says that this fraction is \ at most 1/4. This means that the probability that a composite number will not \ be detected after ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " runs of the Miller-Rabin test is at most ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "/", "4"}], ")"}], "k"], TraditionalForm]]], ". This compares very favorably with the ", ButtonBox["Solovay and Strassen", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Solovay"], " primality test where this probability can only be upperbounded by ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "/", "2"}], ")"}], "k"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be a composite number, ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[NotEqual]", "9"}], TraditionalForm]]], ". Then the number of ", ButtonBox["strong liars", BaseStyle->"Hyperlink", ButtonData:>"DefRSA strong liar"], " in between 1 and ", Cell[BoxData[ FormBox[ RowBox[{"m", "-", "1"}], TraditionalForm]]], " is at most ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CurlyPhi]", "(", "m", ")"}], "/", "4"}], TraditionalForm]]], ", where ", ButtonBox["\[CurlyPhi]", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], " denotes Euler's totient function.\nIn other words: the probability that \ after ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " runs ", ButtonBox["Algorithm 9.8", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Miller-Rabin"], " has not established the compositeness of a non-prime ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is at most ", Cell[BoxData[ FormBox[ SuperscriptBox["4", RowBox[{"-", "k"}]], TraditionalForm]]], "." }], "Theorem", GeneratedCell->True], Cell[TextData[{ "The proof of Theorem 9.8 (see ", ButtonBox["[Moni80]", BaseStyle->"Hyperlink", ButtonData:>"RefMoni80"], " or ", ButtonBox["[Rabi80a]", BaseStyle->"Hyperlink", ButtonData:>"RefRabi80a"], ") is very technical and does not give further insight to the reader of this \ introduction." }], "Text", GeneratedCell->True], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "9"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CurlyPhi]", "(", "m", ")"}], "/", "4"}], TraditionalForm]]], " will be ", Cell[BoxData[ FormBox[ RowBox[{"6", "/", "4"}], TraditionalForm]]], ", which is less than the two \"strong liars\" ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"+", "1"}], TraditionalForm]]], "." }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tA Deterministic Primality Test" }], "Subsection", CellTags->"SubsRSA Lenstra"], Cell[TextData[{ "Primality tests that prove in a deterministic way that a certain is prime \ or not are of course much slower than probabilistic algorithms of the type \ discussed in the previous subsection.\nWe shall now explain the idea behind \ the deterministic primality test of H. Cohen and H.W. Lenstra jr. ", ButtonBox["[CohL82]", BaseStyle->"Hyperlink", ButtonData:>"RefCohL82"], ". This test is an improvement of ", ButtonBox["[AdPR83]", BaseStyle->"Hyperlink", ButtonData:>"RefAdPR83"], ". We shall not give a complete description of this test. That would involve \ too much advanced and deep number theory. We closely follow the excellent \ introductory article by Lenstra ", ButtonBox["[LensH83]", BaseStyle->"Hyperlink", ButtonData:>"RefLens83"], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "We start by quoting ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " (Thm. A.15)." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t\t", FontWeight->"Bold"], "Fermat\nLet ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be a prime number and let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " be any integer. Then" }], "Theorem", CellTags->"TheoRSA Fermat"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "m"], "\[Congruent]", RowBox[{"a", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormRSA Fermat"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be an integer that we want to test for primality. A single integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " that does not satisfy (9.22), proves that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is not a prime number." }], "Text"], Cell[TextData[{ "Unfortunately, the opposite is not true. For instance, ", Cell[BoxData[ FormBox[ RowBox[{"m", " ", "=", " ", "561"}], TraditionalForm]]], " satisfies ", ButtonBox["(9.22)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Fermat"], ", while ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{"3", "\[Times]", "11", "\[Times]", "17"}]}], TraditionalForm]]], ". To see this we first compute ", Cell[BoxData[ FormBox[ RowBox[{"lcm", "(", RowBox[{ RowBox[{"\[CurlyPhi]", "(", "3", ")"}], ",", " ", RowBox[{"\[CurlyPhi]", "(", "11", ")"}], ",", " ", RowBox[{"\[CurlyPhi]", "(", "17", ")"}]}], ")"}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ OverscriptBox["=", ButtonBox[ RowBox[{ RowBox[{"Thm", ".", "A"}], ".17"}], BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler Phi Form"]], RowBox[{"lcm", "(", RowBox[{"2", ",", " ", "10", ",", " ", "16"}], ")"}]}], "=", "80"}], " "}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " be coprime with 561. It follows from ", ButtonBox["Euler's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler"], " (Thm. A.14) that ", Cell[BoxData[ FormBox[ SuperscriptBox["a", "80"], TraditionalForm]]], " is congruent to 1 modulo each of the three prime divisors of 561. The ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19) now implies that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "80"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "561"}], ")"}]}]}], TraditionalForm]]], ". Hence, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{ FormBox[ RowBox[{ SuperscriptBox["a", "561"], "\[Congruent]", RowBox[{"a", ".", RowBox[{"(", SuperscriptBox["a", "80"]}]}]}], TraditionalForm], ")"}], "7"], "\[Congruent]", RowBox[{"a", " ", RowBox[{"(", RowBox[{"mod", " ", "561"}], ")"}]}]}], TraditionalForm]]], ". \nFor the values of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " that have a factor in common with 561, ", ButtonBox["(9.22)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Fermat"], " can be proved in a similar way." }], "Text", GeneratedCell->True], Cell[TextData[{ "The reader may want to verify the above with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], " and ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ":" }], "Text", CellChangeTimes->{{3.4234603847212296`*^9, 3.4234603855337296`*^9}, { 3.4234607732697678`*^9, 3.4234607740041475`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "561"}], ";", " ", RowBox[{"FactorInteger", "[", "m", "]"}]}], "\n", RowBox[{ RowBox[{"a", "=", "543"}], ";", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"a", ",", "m", ",", "m"}], "]"}], "==", "a"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"11", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"17", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData["True"], "Output"] }, Open ]], Cell[TextData[{ "Composite integers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " with the property that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{"m", "-", "1"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ", for all ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], ", are commonly called ", StyleBox["Carmichael numbers", FontSlant->"Italic"], ". " }], "Text", CellTags->"DefRSA Carmichael"], Cell[TextData[{ "The converse of a slightly stronger statement than ", ButtonBox["Theorem 9.10", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Fermat"], " does hold however. In the sequel, ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"a", "/", "m"}], ")"}], TraditionalForm]]], " denotes, as usual, the ", ButtonBox["Jacobi symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], "." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nAn odd integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime if and only if for all integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], "\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], "\[Congruent]", RowBox[{ RowBox[{"(", RowBox[{"a", "/", "m"}], ")"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": That the relation above holds for prime numbers was already remarked on \ in ", ButtonBox["(9.15)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA u^(p-1)/2="], ". The converse was first proved by Lehmer ", ButtonBox["[Lehm76]", BaseStyle->"Hyperlink", ButtonData:>"RefLehm76"], ", but it also follows directly ", ButtonBox["Theorem 9.5", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Solovay"], "." }], "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["\<\ The above theorem is of course not a very efficient primality test for \ numbers that are more than 100 digits long. Lenstra offers the following \ \"attractive\" alternative.\ \>", "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nAn odd integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime if and only if every divisor ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is a power of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": This statement is completely trivial, since ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", RowBox[{"1", "=", SuperscriptBox["m", "0"]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", RowBox[{"m", "=", SuperscriptBox["m", "1"]}]}], TraditionalForm]]], " are the only divisors of a prime number ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". All other numbers in between 1 and ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " can not be written as power of ", Cell[BoxData[ FormBox["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[{ "Clearly it is not this theorem that we want to use as a primality test, but \ a variation of it does turn out to be very powerful. We shall show that under \ certain conditions every divisor of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " looks a little bit like a power of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be an integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " that is coprime with 6. Assume further that" }], "Theorem", CellTags->"TheoRSA Lenstra 1"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], "\[Congruent]", RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "\tfor ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "=", RowBox[{"-", "1"}]}], ",", "2", ",", " ", RowBox[{"and", " ", "3"}]}], TraditionalForm]]], "," }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormRSA Cond Lenstra 1"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], "\[Congruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "\tfor some integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormRSA Cond Lenstra 2"], Cell[TextData[{ "Then, for each ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " dividing ", Cell[BoxData[ FormBox["m", TraditionalForm]]] }], "Theorem", CounterIncrements->"None", Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"d", "\[Congruent]", RowBox[{ SuperscriptBox["m", "j"], " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], "\tfor some non-negative integer." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormRSA m^j mod 24"], Cell["In fact, (9.19) can be strengthened to", "Theorem", CounterIncrements->"None", Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"d", "\[Congruent]", RowBox[{ SuperscriptBox["m", "j"], " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], "\tfor ", Cell[BoxData[ FormBox[ RowBox[{"j", "=", "0"}], TraditionalForm]]], " or 1." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormRSA m^j mod 24 j=0"], Cell[TextData[{ "Condition ", ButtonBox["(9.24)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Cond Lenstra 2"], " can not be omitted in the theorem above. Indeed, ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{"1729", "=", RowBox[{"7", "\[Times]", "13", "\[Times]", "19"}]}]}], TraditionalForm]]], " does satisfy ", ButtonBox["(9.23)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Cond Lenstra 1"], ", but does not satisfy ", ButtonBox["(9.25)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA m^j mod 24"], ". Note that ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], ", therefore, no power of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " will ever be equal to one of the prime divisors of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ".\nAll these statements can be checked with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], ", ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], ", ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ", and ", StyleBox["Mod", FontVariations->{"Underline"->True}], ":" }], "Text", CellChangeTimes->{ 3.423299340859253*^9, {3.4233024594027815`*^9, 3.42330246151217*^9}, 3.42339484992522*^9, 3.4233961103551617`*^9, {3.4234603897524796`*^9, 3.4234603906587296`*^9}, {3.4234607772854185`*^9, 3.423460778519801*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "1729"}], ";", " ", RowBox[{"FactorInteger", "[", "m", "]"}]}], "\n", RowBox[{"Mod", "[", RowBox[{"m", ",", "24"}], "]"}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{ RowBox[{"-", "1"}], ",", "m"}], "]"}], "-", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"-", "1"}], ",", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}], ",", "m"}], "]"}]}], ",", "m"}], "]"}], "==", "0"}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"2", ",", "m"}], "]"}], "-", RowBox[{"PowerMod", "[", RowBox[{"2", ",", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}], ",", "m"}], "]"}]}], ",", "m"}], "]"}], "==", "0"}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"3", ",", "m"}], "]"}], "-", RowBox[{"PowerMod", "[", RowBox[{"3", ",", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}], ",", "m"}], "]"}]}], ",", "m"}], "]"}], "==", "0"}]}], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"7", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"13", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"19", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData["1"], "Output"], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"] }, Open ]], Cell[TextData[{ "Before we prove ", ButtonBox["Theorem 9.13", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Lenstra 1"], ", we shall illustrate how it can be used to test the primality of integers \ ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"24", "<", "m", "<", SuperscriptBox["24", "2"]}], TraditionalForm]]], ". After the proof we shall discuss generalizations of Theorem 9.13, that \ yield efficient primality tests for larger values of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "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"], "(Cohen and Lenstra", StyleBox[" ", FontWeight->"Bold"], "limited primality test)\n\t", StyleBox["input", FontWeight->"Bold"], "\t\t", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"24", "<", "m", "<", SuperscriptBox["24", "2"]}], TraditionalForm]]], ",\n\t", StyleBox["initialize \t", FontWeight->"Bold"], "prime=True,\n\t", StyleBox["test 1:", FontWeight->"Bold"], "\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", "6"}], ")"}], "\[NotEqual]", "1"}], TraditionalForm]]], " ", StyleBox["then ", FontWeight->"Bold"], "prime=False\n\t", StyleBox["test 2:", FontWeight->"Bold"], "\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], "\[NotCongruent]", RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "\tfor ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "=", RowBox[{"-", "1"}]}], ",", "2", ",", " ", RowBox[{"or", " ", "3"}]}], TraditionalForm]]], "\n\t\t\t\t\t", StyleBox["then ", FontWeight->"Bold"], "prime=False\n\t", StyleBox["test 3", FontWeight->"Bold"], ":\t\tfind an integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], "\[Congruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ";\n\t\t\t", StyleBox["if", FontWeight->"Bold"], " no such integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " exists ", StyleBox["then ", FontWeight->"Bold"], "prime=False\n\t", StyleBox["test 4", FontWeight->"Bold"], ":\t\tcompute ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", RowBox[{"(", RowBox[{"m", " ", "mod", " ", "24"}], ")"}]}], TraditionalForm]]], ". \n\t\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"d", ">", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"d", "\[VerticalSeparator]", "m"}], TraditionalForm]]], " ", StyleBox["then ", FontWeight->"Bold"], "prime=False\n\t", StyleBox["output", FontWeight->"Bold"], " prime" }], "Theorem", CellTags->"AlgRSA Lenstra small"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The first matter to be addressed is Test 3. If ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime, the probability that a random ", Cell[BoxData[ FormBox[ RowBox[{"1", "<", "a", "<", "m"}], TraditionalForm]]], " satisfies ", ButtonBox["(9.24)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Cond Lenstra 2"], " is 1/2 by ", ButtonBox["Theorem A.23", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA u/p=u^(p-1)/2"], " and ", ButtonBox["Theorem A.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Chi"], ". So, in two tries one can expect to find an integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " satisfying ", ButtonBox["(9.24)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Cond Lenstra 2"], ". If no such integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " exists, ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is not prime. \nMore can be said about this step. Assuming the Extended \ Riemann Hypothesis one can even prove that ", ButtonBox["(9.24)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Cond Lenstra 2"], " has a solution ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "<", "a", "<", RowBox[{"2", SuperscriptBox[ RowBox[{"(", RowBox[{"log", " ", "m"}], ")"}], "2"]}]}], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime. (See also ", ButtonBox["[Pera86]", BaseStyle->"Hyperlink", ButtonData:>"RefPera86"], ".)\nIf ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " meets the first three tests, we know from ", ButtonBox["Theorem 9.13", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Lenstra 1"], " that each divisor ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " must be congruent to 1 or ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " modulo 24. Since ", Cell[BoxData[ FormBox[ RowBox[{"m", "<", SuperscriptBox["24", "2"]}], TraditionalForm]]], ", we may assume that ", Cell[BoxData[ FormBox[ RowBox[{"d", "<", "24"}], TraditionalForm]]], " (otherwise consider ", Cell[BoxData[ FormBox[ RowBox[{"n", "/", "d"}], TraditionalForm]]], " instead of ", Cell[BoxData[ FormBox["d", TraditionalForm]]], "). It follows that ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " is in fact ", StyleBox["equal", FontSlant->"Italic"], " to 1 or to (", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{"m", " ", "mod", " ", "24"}], TraditionalForm], ")"}]]], ". \nThe possibility that ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", RowBox[{"(", RowBox[{"m", " ", "mod", " ", "24"}], ")"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"d", ">", "1"}], TraditionalForm]]], ", is ruled out by Test 4. It follows that this divisor ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " must be equal to 1. We conclude that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime." }], "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[{ "To be able to prove ", ButtonBox["Theorem 9.13", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Lenstra 1"], " we need the following lemmas. The first gives a necessary and sufficient \ condition for two integers ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], ", both having gcd 1 with 6, to be congruent to each other modulo 24." }], "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["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " be two integers, both coprime with 6. Then \n\n\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "\[Congruent]", RowBox[{ SubscriptBox["m", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], "\t\[DoubleLongLeftRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "/", SubscriptBox["m", "1"]}], ")"}], "=", RowBox[{"(", RowBox[{"u", "/", SubscriptBox["m", "2"]}], ")"}]}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "=", RowBox[{"-", "1"}]}], ",", "2", ","}], TraditionalForm]]], " and 3." }], "Theorem", CellTags->"LemRSA m1=m2 mod 24"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": There are eight integers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "m", "\[LessEqual]", "24"}], TraditionalForm]]], ", that are coprime with 6, namely 1, 5, 7, 11, 13, 17, 19 and 23. For each \ of these values ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " we calculate the values ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "=", RowBox[{"-", "1"}]}], ",", "2"}], TraditionalForm]]], ", and 3 by means of ", ButtonBox["Corollary A.24", BaseStyle->"Hyperlink", ButtonData:>"CorAppA Chi(-1)"], ", ", ButtonBox["Theorem A.25", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chi(2)"], ", resp. ", ButtonBox["Theorem A.27", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Quad Reci Gauss"], " or with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], ", which can be applied at once to a whole list of numbers." }], "Text", CellChangeTimes->{ 3.423302175291588*^9, {3.4233024779966507`*^9, 3.423302484027939*^9}, 3.423394854409624*^9, 3.4234701286451187`*^9}, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", RowBox[{"{", RowBox[{ "1", ",", "5", ",", "7", ",", "11", ",", "13", ",", "17", ",", "19", ",", "23"}], "}"}]}], ";", RowBox[{"JacobiSymbol", "[", RowBox[{ RowBox[{"-", "1"}], ",", "m"}], "]"}]}], "\n", RowBox[{"JacobiSymbol", "[", RowBox[{"2", ",", "m"}], "]"}], "\n", RowBox[{"JacobiSymbol", "[", RowBox[{"3", ",", "m"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}], ",", "1", ",", "1", ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "1"}], ",", "1", ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}], ",", "1", ",", RowBox[{"-", "1"}], ",", "1"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}], ",", "1", ",", "1", ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}], ",", "1"}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ "It is easy to verify that the matrix with these three vectors as rows has \ the property that all columns are different. This shows that the three values \ ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "=", RowBox[{"-", "1"}]}], ",", "2"}], TraditionalForm]]], ", 3, uniquely define ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "1", ",", "5", ",", "7", ",", "11", ",", "13", ",", "17", ",", "19", ",", "23"}], "}"}], 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[{ "For example, by looking at the second column, we see that ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "5"}], TraditionalForm]]], " is uniquely defined in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "1", ",", "5", ",", "7", ",", "11", ",", "13", ",", "17", ",", "19", ",", "23"}], "}"}], TraditionalForm]]], " by the three values ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"-", "1"}], ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"2", "/", "m"}], ")"}], "=", RowBox[{"-", "1"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"3", "/", "m"}], ")"}], "=", RowBox[{"-", "1"}]}], 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["m", TraditionalForm]]], " be any integer. Then\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"m", ",", "6"}], ")"}], "=", "1"}], TraditionalForm]]], "\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "2"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"LemRSA m^2 mod 24"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Since ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is not divisible by 3, it follows that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "2"], "\[Congruent]", RowBox[{"1", " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "3"}], ")"}], "."}]}]}], TraditionalForm]]], " Similarly, since ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is odd, it follows that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "2"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}]}]}], TraditionalForm]]], ". To see this, write ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{"2.", "n"}], "+", "1"}]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "2"], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"2.", "n"}], "+", "1"}], ")"}], "2"], "=", RowBox[{ RowBox[{"4", RowBox[{"n", "(", RowBox[{"n", "+", "1"}], ")"}]}], "+", "1"}]}]}], TraditionalForm]]], ".\nSince, 3 and 8 are coprime, the statement follows from the Chinese \ Remainder Theorem." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Of course, we could have checked the above lemma with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Mod", FontVariations->{"Underline"->True}], " as follows" }], "Text", CellChangeTimes->{3.4233961173239565`*^9}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"m", "=", RowBox[{"{", RowBox[{ "1", ",", "5", ",", "7", ",", "11", ",", "13", ",", "17", ",", "19", ",", "23"}], "}"}]}], "\n", RowBox[{"Mod", "[", RowBox[{ SuperscriptBox["m", "2"], ",", "24"}], "]"}]}], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "5", ",", "7", ",", "11", ",", "13", ",", "17", ",", "19", ",", "23"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ "We are now ready to prove", StyleBox[" ", FontWeight->"Bold"], ButtonBox["Theorem 9.13", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Lenstra 1"], "." }], "Text"], Cell[TextData[{ StyleBox["Proof of Theorem 9.13", FontWeight->"Bold"], ":\nIt is a direct consequence of condition ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", "6"}], ")"}], "=", "1"}], TraditionalForm]]], " and ", ButtonBox["Lemma 9.16", BaseStyle->"Hyperlink", ButtonData:>"LemRSA m^2 mod 24"], " that each exponent ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " in ", ButtonBox["(9.25)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA m^j mod 24"], " can be reduced modulo 2. This shows that (9.25) can be replaced by ", ButtonBox["(9.26)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA m^j mod 24 j=0"], " \nNext, note that it suffices to prove (9.25) for prime divisors ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " only. Write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "-", "1"}], "=", RowBox[{"f", SuperscriptBox[".2", "k"]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"d", "-", "1"}], "=", RowBox[{"g", SuperscriptBox[".2", "l"]}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " and g are odd and where ", Cell[BoxData[ FormBox[ RowBox[{"k", ">", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"l", ">", "0"}], TraditionalForm]]], ".\nWe shall first prove that ", Cell[BoxData[ FormBox[ RowBox[{"l", "\[GreaterEqual]", "k"}], TraditionalForm]]], " and then use ", ButtonBox["Lemma 9.15", BaseStyle->"Hyperlink", ButtonData:>"LemRSA m1=m2 mod 24"], " to show that either ", Cell[BoxData[ FormBox[ RowBox[{"d", "\[Congruent]", RowBox[{ SuperscriptBox["n", "0"], " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{"d", "\[Congruent]", RowBox[{ SuperscriptBox["n", "1"], " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], ".\nRaise both sides in condition ", ButtonBox["(9.24)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Cond Lenstra 2"], " to the power ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " and reduce the result modulo ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", "m"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " is odd, one obtains" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{ RowBox[{"f", ".", "g"}], SuperscriptBox[".2", RowBox[{"k", "-", "1"}]]}]], "\[Congruent]", SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "g"], "\[Congruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "d"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Since we assume that ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " is prime and since ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " can not have a factor in common with ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " or ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", it follows from ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " (Thm. A.15) that" }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{ RowBox[{"f", ".", "g"}], SuperscriptBox[".2", "l"]}]], "\[Congruent]", SuperscriptBox["a", RowBox[{"f", "(", RowBox[{"d", "-", "1"}], ")"}]], "\[Congruent]", SuperscriptBox["1", "f"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "d"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["We conclude from these two congruence relations that", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "-", "1"}], "<", "l"}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Now consider ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", "2", ",", "3"}], "}"}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " is odd and ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", "m"}], TraditionalForm]]], ", we have" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"f", ".", "g"}], SuperscriptBox[".2", RowBox[{"k", "-", "1"}]]}]], "\[Congruent]", SuperscriptBox["u", RowBox[{ RowBox[{"g", "(", RowBox[{"m", "-", "1"}], ")"}], "/", "2"}]], OverscriptBox["\[Congruent]", RowBox[{" ", ButtonBox[ RowBox[{"(", "9.23", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA Cond Lenstra 1"]}]], SuperscriptBox[ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], "g"], "\[Congruent]", RowBox[{ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], " ", RowBox[{"(", RowBox[{"mod", " ", "d"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "On the other hand (again because ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " is prime), we have" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"f", ".", "g"}], SuperscriptBox[".2", RowBox[{"l", "-", "1"}]]}]], "\[Congruent]", RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"f", "(", RowBox[{"d", "-", "1"}], ")"}], "/", "2"}]], OverscriptBox["\[Congruent]", ButtonBox[ RowBox[{"(", "9.15", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormRSA u^(p-1)/2="]], SuperscriptBox[ RowBox[{"(", RowBox[{"u", "/", "d"}], ")"}], "f"]}], "\[Congruent]", RowBox[{ RowBox[{"(", RowBox[{"u", "/", "d"}], ")"}], " ", RowBox[{"(", RowBox[{"mod", " ", "d"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "It follows from the two last congruence relations that for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", "=", RowBox[{"-", "1"}]}], ",", "2", ",", "3"}], TraditionalForm]]] }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "/", "d"}], ")"}], " ", "=", " ", SuperscriptBox[ RowBox[{"(", RowBox[{"u", "/", "m"}], ")"}], SuperscriptBox["2", RowBox[{"l", "-", "k"}]]]}], TraditionalForm]]], "." }], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormRSA u/d u/m"], Cell[TextData[{ "Note that we have replaced the congruence relation above by an equality \ sign. We can do this, because both hands have value ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], " or 1.\nIf ", Cell[BoxData[ FormBox[ RowBox[{"l", "=", "k"}], TraditionalForm]]], ", relation ", ButtonBox["(9.27)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA u/d u/m"], " and ", ButtonBox["Lemma 9.15", BaseStyle->"Hyperlink", ButtonData:>"LemRSA m1=m2 mod 24"], " together imply that ", Cell[BoxData[ FormBox[ RowBox[{"d", "\[Congruent]", "m", "\[Congruent]", RowBox[{ SuperscriptBox["m", "1"], " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], ". \nOn the other hand, if ", Cell[BoxData[ FormBox[ RowBox[{"l", ">", "k"}], TraditionalForm]]], ", the right hand side of ", ButtonBox["(9.27)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA u/d u/m"], " is equal to 1, which is also ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"u", "/", "1"}], ")"}], TraditionalForm]]], ". So, ", ButtonBox["Lemma 9.15", BaseStyle->"Hyperlink", ButtonData:>"LemRSA m1=m2 mod 24"], " yields that ", Cell[BoxData[ FormBox[ RowBox[{"d", "\[Congruent]", "1", "\[Congruent]", RowBox[{ SuperscriptBox["n", "0"], " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], 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[{ "Crucial in the application of ", ButtonBox["Theorem 9.13", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Lenstra 1"], " is the fact that we can replace ", ButtonBox["(9.25) ", BaseStyle->"Hyperlink", ButtonData:>"FormRSA m^j mod 24"], "by ", ButtonBox["(9.26)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA m^j mod 24 j=0"], ". Because of this, only one condition needed to be tested in the fourth \ step of ", ButtonBox["Algorithm 9.14", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Lenstra small"], ". The reason that (9.25) could be replaced by (9.26) (see ", ButtonBox["Lemma 9.16", BaseStyle->"Hyperlink", ButtonData:>"LemRSA m^2 mod 24"], ") is the fact that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"n", ",", "24"}], ")"}], TraditionalForm]]], "\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["n", "2"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "24"}], ")"}]}]}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell[TextData[{ "Theorem 9.13 can only prove the primality of integers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"24", "<", "m", "<", SuperscriptBox["24", "2"]}], TraditionalForm]]], ". For larger values of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " one needs generalizations of Theorem 9.13. As may be expected, the \ exponent in ", ButtonBox["Lemma 9.16", BaseStyle->"Hyperlink", ButtonData:>"LemRSA m^2 mod 24"], " will have to be increased in these generalizations. An example of such a \ generalization would be" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", " ", "65520"}], ")"}], " ", "=", " ", "1"}], TraditionalForm]]], "\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "12"], "\[Congruent]", RowBox[{"1", " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "65520"}], ")"}], "."}]}]}], TraditionalForm]]] }], "DisplayFormula"], Cell["In order to test 100-digit numbers for primality, one uses", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", " ", "s"}], ")"}], " ", "=", " ", "1"}], TraditionalForm]]], "\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "5040"], "\[Congruent]", RowBox[{"1", " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "65520"}], ")"}], "."}]}]}], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " is the 53-digit number" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["2", "6"], TraditionalForm], "\[Times]", SuperscriptBox["3", "3"], "\[Times]", SuperscriptBox["5", "2"], "\[Times]", SuperscriptBox["7", "2"], "\[Times]", "11", "\[Times]", "13", "\[Times]", "17", "\[Times]", "19", "\[Times]", "31", "\[Times]", "37", "\[Times]", "41", "\[Times]", "43", "\[Times]", "61", "\[Times]", "71"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ "\[Times]", "73", "\[Times]", "113", "\[Times]", "127", "\[Times]", "181", "\[Times]", "211", "\[Times]", "241", "\[Times]", "281", "\[Times]"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ "337", "\[Times]", "421", "\[Times]", "631", "\[Times]", "1009", "\[Times]", "2521"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Note that ", Cell[BoxData[ FormBox[ RowBox[{ SqrtBox["m"], "<", "s"}], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " has not more than 100 digits. A rough outline of the primality test of a \ 100-digit number is as follows." }], "Text"], Cell[TextData[{ StyleBox["Algorithm ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "(Cohen and Lenstra; outline of primality test)\n\t", StyleBox["input", FontWeight->"Bold"], "\t\t", Cell[BoxData[ FormBox[ RowBox[{"m", "<", SuperscriptBox["10", "100"]}], TraditionalForm]]], "\n\t", StyleBox["initialize \t", FontWeight->"Bold"], "prime=True,\n\t", StyleBox["test 1:", FontWeight->"Bold"], "\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", "s"}], ")"}], "\[NotEqual]", "1"}], TraditionalForm]]], " ", StyleBox["then ", FontWeight->"Bold"], "prime=False\n\t", StyleBox["test 2:", FontWeight->"Bold"], "\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " fails any of 67 congruence relations like ", ButtonBox["(9.23)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Cond Lenstra 1"], " \n\t\t\t\t\t", StyleBox["then ", FontWeight->"Bold"], "prime=False\n\t", StyleBox["test 3", FontWeight->"Bold"], ":\t\tcompute ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", RowBox[{"(", RowBox[{ SuperscriptBox["n", "i"], " ", "mod", " ", "s"}], ")"}]}], TraditionalForm]]], ", for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", "=", "1"}], ",", "2", ",", "\[Ellipsis]", ",", "5039", ","}], TraditionalForm]]], " \n\t\t\t", StyleBox["if", FontWeight->"Bold"], " any of these ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " divide ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " ", StyleBox["then ", FontWeight->"Bold"], "prime=False\n\t", StyleBox["output", FontWeight->"Bold"], " prime" }], "Theorem"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is composite, the algorithm above will sometimes yield a factor of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". The probability that this will happen however, is very small. In most \ cases that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is composite, the algorithm will terminate in Step 2 and one does not \ obtain a factor of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". The algorithm above can be adapted to test larger integers for primality. \ The expected running time is" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"ln", " ", "n"}], ")"}], RowBox[{"c", " ", "ln", " ", "ln", " ", "n"}]], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " is some constant." }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Rabin Variant" }], "Section", CellTags->"SectRSA Rabin"], Cell[TextData[{ "In ", ButtonBox["Subsection 9.2.1", BaseStyle->"Hyperlink", ButtonData:>"DiscRSA fact=break"], ", it was mentioned that no other general method of breaking RSA is known \ than by factoring ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". In ", ButtonBox["[Rabi79]", BaseStyle->"Hyperlink", ButtonData:>"RefRabi79"], ", ", StyleBox["Rabin", FontSlant->"Italic"], " proposes a variant of the RSA system, whose cryptanalysis can be proved to \ be equivalent to the factorization of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "The Encryption Function" }], "Subsection", CellTags->"SubsRSA Rabin Encr"], Cell[TextData[{ "In the RSA system, each user U had to select a public exponent ", Cell[BoxData[ FormBox[ SubscriptBox["e", "u"], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["e", "U"], ",", SubscriptBox["n", "U"]}], ")"}], "=", "1"}], TraditionalForm]]], " (see (9.2)). In Rabin's variant, all users ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " take the same exponent" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "U"], "=", "2"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA e=2"], Cell[TextData[{ "We remind the reader of the discussion in ", ButtonBox["Subsection 9.3.1", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Coppersmith"], ".\nSince ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"2", ",", RowBox[{"\[CurlyPhi]", "(", SubscriptBox["n", "U"], ")"}]}], ")"}], "=", "2"}], TraditionalForm]]], ", because both ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "U"], "-", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "U"], "-", "1"}], TraditionalForm]]], " are even, encryption is no longer a one-to-one mapping. Indeed, if ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "U"]}], ")"}]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"c", " ", ",", SubscriptBox["n", "U"]}], ")"}], "=", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "U"], "=", RowBox[{ SubscriptBox["p", "U"], SubscriptBox["q", "U"]}]}], TraditionalForm]]], ", it follows that the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "U"]}], ")"}]}]}], TraditionalForm]]], " has two solutions, namely ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PlusMinus]", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "U"]}], ")"}]}], TraditionalForm]]], " and, similarly, the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["q", "U"]}], ")"}]}]}], TraditionalForm]]], " will have the two solutions ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PlusMinus]", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["q", "U"]}], ")"}]}], TraditionalForm]]], ". By the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19), the congruence relation " }], "Text", GeneratedCell->True], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "U"]}], ")"}]}]}], TraditionalForm]]]], "NumberedEquation", CellTags->"FormRSA Rabin encr"], Cell[TextData[{ "has four solutions modulo ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], ". What happens if ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"c", ",", SubscriptBox["n", "U"]}], ")"}], "\[NotEqual]", "1"}], TraditionalForm]]], " is an easy exercise for the reader (see ", ButtonBox["Problem 9.5", BaseStyle->"Hyperlink", ButtonData:>"ProbRSA Rabin non-trivial factor"], "). " }], "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"], "\nConsider the encryption of the message ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "12345678"}], TraditionalForm]]], " modulo the modulus ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{ RowBox[{"9733", "\[Times]", "10177"}], "=", "99052741"}]}], TraditionalForm]]], " (we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Prime", FontVariations->{"Underline"->True}], " and ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ")." }], "Example", CellChangeTimes->{ 3.4233974366605253`*^9, {3.423460782676078*^9, 3.423460783363582*^9}}, CellTags->"ExamRSA Rabin"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"pB", "=", RowBox[{"Prime", "[", "1200", "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"qB", "=", RowBox[{"Prime", "[", "1250", "]"}]}], ";"}], "\n", RowBox[{"nB", "=", RowBox[{"pB", "*", "qB"}]}], "\n", RowBox[{ RowBox[{"m", "=", "12345678"}], ";"}], "\n", RowBox[{"PowerMod", "[", RowBox[{"m", ",", "2", ",", "nB"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["99052741"], "Output"], Cell[BoxData["43962531"], "Output"] }, Open ]], Cell[TextData[{ "To find the four messages that are mapped to the same ciphertext, we have \ to combine the four systems of linear congruence relations ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], " with the Chinese Remainder Theorem. We use the function ", StyleBox["ChineseRemainder", FontVariations->{"Underline"->True}], ". " }], "Text", CellChangeTimes->{{3.4214658943568597`*^9, 3.4214658990756097`*^9}, { 3.4234630918764367`*^9, 3.42346309314207*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"m1", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"12345678", ",", "12345678"}], "}"}], ",", RowBox[{"{", RowBox[{"9733", ",", "10177"}], "}"}]}], "]"}]}], "\n", RowBox[{"m2", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"-", "12345678"}], ",", "12345678"}], "}"}], ",", RowBox[{"{", RowBox[{"9733", ",", "10177"}], "}"}]}], "]"}]}], "\n", RowBox[{"m3", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"12345678", ",", RowBox[{"-", "12345678"}]}], "}"}], ",", RowBox[{"{", RowBox[{"9733", ",", "10177"}], "}"}]}], "]"}]}], "\n", RowBox[{"m4", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"-", "12345678"}], ",", RowBox[{"-", "12345678"}]}], "}"}], ",", RowBox[{"{", RowBox[{"9733", ",", "10177"}], "}"}]}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["12345678"], "Output"], Cell[BoxData["48738630"], "Output"], Cell[BoxData["50314111"], "Output"], Cell[BoxData["86707063"], "Output"] }, Open ]], Cell["To check this we calculate", "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"PowerMod", "[", RowBox[{"m1", ",", "2", ",", "nB"}], "]"}], "\n", RowBox[{"PowerMod", "[", RowBox[{"m2", ",", "2", ",", "nB"}], "]"}], "\n", RowBox[{"PowerMod", "[", RowBox[{"m3", ",", "2", ",", "nB"}], "]"}], "\n", RowBox[{"PowerMod", "[", RowBox[{"m4", ",", "2", ",", "nB"}], "]"}]}], "Input"], Cell[BoxData["43962531"], "Output"], Cell[BoxData["43962531"], "Output"], Cell[BoxData["43962531"], "Output"], Cell[BoxData["43962531"], "Output"] }, Open ]], Cell[TextData[{ "We note that the image space of the encryption function is not the whole \ set ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", SubscriptBox["n", "U"]}], "}"}], TraditionalForm]]], ". As a consequence, this variant by Rabin can not be used in a \ straightforward way as a signature scheme. (See the related ", ButtonBox["Fiat-Shamir", BaseStyle->"Hyperlink", ButtonData:>"FigProt Fiat-Shamir"], " protocol in Chapter 14.)" }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tDecryption" }], "Subsection", CellTags->"SubSRSA Rabin decr"], Cell[CellGroupData[{ Cell["Precomputation", "Subsubsection", CellTags->"SubsubsRSA Rabin pre"], Cell[TextData[{ "How does one decrypt a message ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " in the Rabin variant of the RSA system? As explained earlier in this \ section, we do this with the Chinese Remainder Theorem. As precalculation, \ one computes integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " satisfying" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "U"]}], ")"}]}]}], TraditionalForm]], CellTags->"FormRSA CRT eq for a"], "\tand \t", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["q", "U"]}], ")"}]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellTags->"FormRSA CRT eq for a"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"b", "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "U"]}], ")"}]}]}], TraditionalForm]], CellTags->"FormRSA CRT eq for b"], "\tand \t", Cell[BoxData[ FormBox[ RowBox[{"b", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["q", "U"]}], ")"}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA CRT eq for b"], Cell[TextData[{ "The solutions ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " can easily be found as follows; for instance, to find ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ", we obtain ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"l", ".", SubscriptBox["q", "U"]}]}], TraditionalForm]]], " from the second congruence relation and substitute this in the first \ congruence relation. One gets the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"l", ".", SubscriptBox["q", "U"]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "U"]}], ")"}]}]}], TraditionalForm]]], ", which can be solved with the extended version of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], ", (Alg. A.8). See also ", ButtonBox["Example A.3", BaseStyle->"Hyperlink", ButtonData:>"ExamAppA Chin Rem Th"], ". \nThese systems of congruence relations can also be solved directly with \ the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["ChineseRemainder", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{ 3.4214659237318597`*^9, {3.423463098610855*^9, 3.4234631007827435`*^9}}], Cell[TextData[{ StyleBox["Example 9.16 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nContinuing with the parameters of ", ButtonBox["Example 9.16", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA Rabin"], ", we need to solve" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "9733"}], ")"}]}]}], TraditionalForm]]], "\tand \t", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "10177"}], ")"}]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"b", "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "9733"}], ")"}]}]}], TraditionalForm]]], "\tand \t", Cell[BoxData[ FormBox[ RowBox[{"b", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "10177"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"a", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"9733", ",", "10177"}], "}"}]}], "]"}]}], "\n", RowBox[{"b", "=", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"9733", ",", "10177"}], "}"}]}], "]"}]}]}], "Input"], Cell[BoxData["45287650"], "Output"], Cell[BoxData["53765092"], "Output"] }, Open ]], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", "45287650"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", "53765092"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell["Finding a Square Root Modulo a Prime Number", "Subsubsection", CellTags->"SubsubsRSA find square root"], Cell[TextData[{ "Next, one has to solve the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "U"]}], ")"}]}]}], TraditionalForm]]], " (and, similarly, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["q", "U"]}], ")"}]}]}], TraditionalForm]]], "). If ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "0"}], TraditionalForm]]], " the solution is obvious, so, let us assume that ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[NotCongruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "U"]}], ")"}]}]}], TraditionalForm]]], ".\nFor notational reasons we omit the subscript ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " from now on. It turns out that an immediate technique to find ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is not always possible. We consider three cases." }], "Text"], Cell[TextData[{ StyleBox["Case 1", FontVariations->{"Underline"->True}], ": ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Congruent]", RowBox[{"3", " ", RowBox[{"(", RowBox[{"mod", " ", "4"}], ")"}]}]}], TraditionalForm]]] }], "Text"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " is the square of some element ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], " (such a ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " is called a ", ButtonBox["quadratic residue", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "; see Section A.4), the two solutions of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " are given by ", Cell[BoxData[ FormBox[ RowBox[{"\[PlusMinus]", SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]]}], TraditionalForm]]], ". Indeed, if we square this expression we get from Fermat's theorem:" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"\[PlusMinus]", SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]]}], ")"}], "2"], "\[Congruent]", SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "2"}]], "\[Congruent]", RowBox[{"c", ".", SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]]}], "\[Congruent]", RowBox[{"c", ".", SuperscriptBox["m", RowBox[{"p", "-", "1"}]]}], OverscriptBox["\[Congruent]", ButtonBox[ RowBox[{ RowBox[{"Thm", ".", " ", "A"}], ".15"}], BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"]], RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", 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 prime ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "3571"}], TraditionalForm]]], " which is congruent to 3 modulo 4. The number ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "2868"}], TraditionalForm]]], " is a quadratic residue modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " as can be checked with the ", ButtonBox["Legendre symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"], ", which is a special case of the ", ButtonBox["Jacobi Symbol", BaseStyle->"Hyperlink", ButtonData->"DefAppA Jacobi S"], ". To verify all these assertions we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Prime", FontVariations->{"Underline"->True}], ", ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", and ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{ 3.4233948624878006`*^9, 3.4233961302771645`*^9, 3.423397441441806*^9, { 3.423470197129932*^9, 3.4234702385520725`*^9}, {3.4234703688966565`*^9, 3.4234703689435315`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"p", "=", RowBox[{"Prime", "[", "500", "]"}]}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{"p", ",", "4"}], "]"}], "==", "3"}], "\n", RowBox[{ RowBox[{"c", "=", "2868"}], ";", RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"c", ",", "p"}], "]"}], "==", "1"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["3571"], "Output"], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"] }, Open ]], Cell[TextData[{ "The solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"2868", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{"\[PlusMinus]", SuperscriptBox["2868", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]]}], "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "3234"}], " ", RowBox[{"(", RowBox[{"mod", " ", "3571"}], ")"}]}]}], TraditionalForm]]], ".\nTo verify this we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423460788191738*^9, 3.423460788926118*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"m", "=", RowBox[{"PowerMod", "[", RowBox[{"c", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}], ",", "p"}], "]"}]}], "\n", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"{", RowBox[{"m", ",", RowBox[{"-", "m"}]}], "}"}], ",", "2", ",", "p"}], "]"}]}], "Input"], Cell[BoxData["3234"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"2868", ",", "2868"}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ StyleBox["Case 2", FontVariations->{"Underline"->True}], ": ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Congruent]", RowBox[{"5", " ", RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}]}]}], TraditionalForm]]] }], "Text", CellTags->"CaseRSA Rabin 2"], Cell[TextData[{ "With a slight refinement of the method used above it can be shown that the \ solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " in this case is given by ", Cell[BoxData[ FormBox[ RowBox[{"\[PlusMinus]", SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "3"}], ")"}], "/", "8"}]]}], TraditionalForm]]], " if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PlusMinus]", "2."}], RowBox[{"c", ".", SuperscriptBox[ RowBox[{"(", RowBox[{"4.", "c"}], ")"}], RowBox[{ RowBox[{"(", RowBox[{"p", "-", "5"}], ")"}], "/", "8"}]]}]}], TraditionalForm]]], " if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}]], "\[Congruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ".\nSee ", ButtonBox["Problem 9.14", BaseStyle->"Hyperlink", ButtonData:>"ProbRSA Rabin decrypt 5(8)"], ", which addresses this case." }], "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 prime ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "3581"}], TraditionalForm]]], " which is congruent to 5 modulo 8. The number ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "2177"}], TraditionalForm]]], " is a quadratic residue modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " as can be checked with the ", ButtonBox["Legendre symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"], "." }], "Example", CellChangeTimes->{{3.423394806456192*^9, 3.423394808971833*^9}, { 3.4234701901455126`*^9, 3.4234701924892774`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"p", "=", RowBox[{"Prime", "[", "501", "]"}]}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{"p", ",", "8"}], "]"}], "==", "5"}], "\n", RowBox[{ RowBox[{"c", "=", "2177"}], ";", RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"c", ",", "p"}], "]"}], "==", "1"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["3581"], "Output"], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"] }, Open ]], Cell[TextData[{ "The solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"2177", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{"\[PlusMinus]", SuperscriptBox["2177", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]]}], "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "3100"}], " ", RowBox[{"(", RowBox[{"mod", " ", "3581"}], ")"}]}]}], TraditionalForm]]], " because ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " (otherwise the answer would be ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PlusMinus]", "2."}], RowBox[{"c", ".", SuperscriptBox[ RowBox[{"(", RowBox[{"4.", "c"}], ")"}], RowBox[{ RowBox[{"(", RowBox[{"p", "-", "5"}], ")"}], "/", "8"}]]}]}], TraditionalForm]]], ")." }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"c", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}], ",", "p"}], "]"}], "==", "1"}], ",", "\t\t\t\t", RowBox[{"m", "=", RowBox[{"PowerMod", "[", RowBox[{"c", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "3"}], ")"}], "/", "8"}], ",", "p"}], "]"}]}], ",", "\t\t\t\t", RowBox[{"m", "=", RowBox[{"Mod", "[", RowBox[{"2", "c", "*", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"4", "c"}], ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "5"}], ")"}], "/", "8"}], ",", "p"}], "]"}], "p"}], "]"}]}]}], "]"}], "\n", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"{", RowBox[{"m", ",", RowBox[{"-", "m"}]}], "}"}], ",", "2", ",", "p"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["3100"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"2177", ",", "2177"}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ StyleBox["Case 3", FontVariations->{"Underline"->True}], ": ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}]}]}], TraditionalForm]]] }], "Text", CellTags->"CaseRSA Rabin 3"], Cell[TextData[{ "A fast deterministic algorithm to solve this congruence relation does not \ exist. We follow ", ButtonBox["[Rabi79]", BaseStyle->"Hyperlink", ButtonData:>"RefRabi79"], ". " }], "Text", GeneratedCell->True], Cell[TextData[{ "In Section A.4 we have introduced QR as the set of ", ButtonBox["quadratic residues", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and NQR as the set of quadratic non-residues modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". \nLet ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " denote the two solutions ", Cell[BoxData[ FormBox[ RowBox[{"\[PlusMinus]", "m"}], TraditionalForm]]], " of the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{"r", "+", "u"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"s", "+", "u"}], TraditionalForm]]], " are the two solutions of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "c"}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". In other words," }], "Text", GeneratedCell->True], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "c"}], "=", RowBox[{ RowBox[{"(", RowBox[{"x", "-", RowBox[{"(", RowBox[{"r", "+", "u"}], ")"}]}], ")"}], RowBox[{"(", RowBox[{"x", "-", RowBox[{"(", RowBox[{"s", "+", "u"}], ")"}]}], ")"}]}]}], TraditionalForm]]]], "NumberedEquation", CellTags->"FormRSA (x-u)^2-c"], Cell[TextData[{ "over the finite field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], " (=GF(p)).\nSince ", Cell[BoxData[ FormBox[ RowBox[{"r", "\[NotCongruent]", RowBox[{"s", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ", it follows that the field element ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"r", "+", "u"}], ")"}], "/", RowBox[{"(", RowBox[{"s", "+", "u"}], ")"}]}], TraditionalForm]]], " will never take on value 1. Since the mapping ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[RightArrow]", RowBox[{ RowBox[{"(", RowBox[{"r", "+", "u"}], ")"}], "/", RowBox[{"(", RowBox[{"s", "+", "u"}], ")"}]}]}], TraditionalForm]]], " is one-to-one for ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", SubscriptBox["\[DoubleStruckCapitalZ]", "p"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[NotEqual]", RowBox[{"-", "s"}]}], TraditionalForm]]], ", we conclude that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"r", "+", "u"}], ")"}], "/", RowBox[{"(", RowBox[{"s", "+", "u"}], ")"}]}], " ", "|", " ", RowBox[{"u", "\[Element]", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\\", RowBox[{"{", RowBox[{"-", "s"}], "}"}]}]}]}], "}"}], "=", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\\", RowBox[{"{", "1", "}"}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormRSA (r+u)/(s+u)"], Cell[TextData[{ "The reader may want to verify this by means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Table", FontVariations->{"Underline"->True}], ", ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ", and ", StyleBox["Union", FontVariations->{"Underline"->True}], ". " }], "Text", CellChangeTimes->{ 3.4233938374499903`*^9, 3.423396140995983*^9, {3.4234607957386613`*^9, 3.4234607964730415`*^9}, {3.423470404928137*^9, 3.423470406600023*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "19"}], ";", RowBox[{"s", "=", "9"}], ";"}], "\n", RowBox[{ RowBox[{"r", "=", RowBox[{"p", "-", "s"}]}], ";"}], "\n", RowBox[{"S1", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"r", "+", "u"}], ")"}], "*", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"(", RowBox[{"s", "+", "u"}], ")"}], ",", RowBox[{"-", "1"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}], " ", ",", "\t\t", RowBox[{"{", RowBox[{"u", ",", "0", ",", RowBox[{"r", "-", "1"}]}], "}"}]}], "]"}]}], "\n", RowBox[{"S2", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"r", "+", "u"}], ")"}], "*", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"(", RowBox[{"s", "+", "u"}], ")"}], ",", RowBox[{"-", "1"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}], " ", ",", "\t\t", RowBox[{"{", RowBox[{"u", ",", RowBox[{"r", "+", "1"}], ",", RowBox[{"p", "-", "1"}]}], "}"}]}], "]"}]}], "\n", RowBox[{"S", "=", RowBox[{"Union", "[", RowBox[{"S1", ",", "S2"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[TextData[{ "It follows from ", ButtonBox["(9.33)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA (r+u)/(s+u)"], " and ", ButtonBox["Theorem A.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Chi"], " that for half of the admissible values of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " the element ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"r", "+", "u"}], ")"}], "/", RowBox[{"(", RowBox[{"s", "+", "u"}], ")"}]}], TraditionalForm]]], " will be in ", Cell[BoxData[ FormBox[ RowBox[{"QR", "\[Union]", RowBox[{"{", "0", "}"}]}], TraditionalForm]]], " and for the other half it will be in NQR. In the first case, either ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"-", "r"}]}], TraditionalForm]]], " or (by ", ButtonBox["Theorem A.21", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chi(uv)"], ") both ", Cell[BoxData[ FormBox[ RowBox[{"r", "+", "u"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"s", "+", "u"}], TraditionalForm]]], " will be an element of QR or they will both be in NQR. In the latter case, \ exactly one of them will be in QR and the other will be in NQR." }], "Text", GeneratedCell->True], Cell[TextData[{ "A property of quadratic residues modulo a prime number that we shall need \ later on is given by ", ButtonBox["(A.16)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA x^(p-1)/2 is prod QR"], ":" }], "Text", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "18", ",", "3", ",", "8", ",", "9", ",", "4", ",", "16", ",", "15", ",", "7", ",", "10", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "2", ",", "11", ",", "14", ",", "6", ",", "5", ",", "17", ",", "12", ",", "13"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "0", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6", ",", "7", ",", "8", ",", "9", ",", "10", ",", "11", ",", "12", ",", "13", ",", "14", ",", "15", ",", "16", ",", "17", ",", "18"}], "}"}]], "Output"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], "-", "1"}], "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{"u", " ", "is", " ", "QR"}]], RowBox[{ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "."}]}]}], TraditionalForm]]]], "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"], "\nAs an example, consider the QR's mod 11. We introduce a new function, \ which makes use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Select", FontVariations->{"Underline"->True}], ", ", StyleBox["Range", FontVariations->{"Underline"->True}], ", and ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.4234633830996847`*^9, 3.4234634372580147`*^9}, { 3.4234704439440117`*^9, 3.423470452131564*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"ListQuadRes", "[", "p_", "]"}], ":=", " ", RowBox[{"Select", "[", RowBox[{ RowBox[{"Range", "[", "p", "]"}], ",", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"#1", ",", "p"}], "]"}], "==", "1"}], "&"}]}], "]"}]}]], "Input"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"p", "=", "11"}], ";"}], "\n", " "}], "\n", RowBox[{"ListQuadRes", "[", "p", "]"}]}], "Input", GeneratedCell->True, CellTags->"InputAppA ListQuadRes"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "3", ",", "4", ",", "5", ",", "9"}], "}"}]], "Output"], Cell[TextData[{ "So, the QR's modulo 11 are given by: 1, 3, 4, 5, and 9. We now compute with \ the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], ":" }], "Text", CellChangeTimes->{3.423394629392559*^9}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"x", "-", "3"}], ")"}], RowBox[{"(", RowBox[{"x", "-", "4"}], ")"}], RowBox[{"(", RowBox[{"x", "-", "5"}], ")"}], RowBox[{"(", RowBox[{"x", "-", "9"}], ")"}]}], ",", "11"}], "]"}]], "Input"], Cell[BoxData["0"], "Output"] }, Open ]], Cell[TextData[{ "This is indeed equal to ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "5"], "-", "1"}], TraditionalForm]]], " modulo 11." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "It follows from the above discussion, in particular from ", ButtonBox["(9.33)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA (r+u)/(s+u)"], " and ", ButtonBox["(A.16)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA x^(p-1)/2 is prod QR"], ", that for a randomly chosen ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\\", RowBox[{"{", RowBox[{"-", "s"}], "}"}]}]}], TraditionalForm]]], ", " }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "c"}], ",", RowBox[{"x", "(", RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], "-", "1"}], ")"}]}], ")"}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}], TraditionalForm]]] }], "NumberedEquation", CellTags->"FormRSA gcd for square root"], Cell["will be", "Text"], Cell[TextData[Cell[BoxData[GridBox[{ { RowBox[{ RowBox[{"x", "-", "u", "-", "r"}], ","}], RowBox[{ RowBox[{ RowBox[{"if", " ", "u"}], "+", "r"}], "\[Element]", RowBox[{"QR", "\[Union]", RowBox[{"{", "0", "}"}]}]}], RowBox[{ RowBox[{ RowBox[{ RowBox[{"and", " ", "u"}], "+", "s"}], "\[Element]", "NQR"}], ","}]}, { RowBox[{ RowBox[{"x", "-", "u", "-", "s"}], ","}], RowBox[{ RowBox[{ RowBox[{"if", " ", "u"}], "+", "r"}], "\[Element]", "NQR", " "}], RowBox[{ RowBox[{ RowBox[{ RowBox[{"and", " ", "u"}], "+", "s"}], "\[Element]", RowBox[{"QR", "\[Union]", RowBox[{"{", "0", "}"}]}]}], ","}]}, { RowBox[{"1", ","}], RowBox[{ RowBox[{ RowBox[{"if", " ", "u"}], "+", "r"}], "\[Element]", "NQR"}], RowBox[{ RowBox[{ RowBox[{"and", " ", "u"}], "+", RowBox[{"s", " ", "is", " ", "NQR"}]}], ","}]}, { RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "c"}], ","}], RowBox[{ RowBox[{ RowBox[{"if", " ", "u"}], "+", "r"}], "\[Element]", RowBox[{"QR", "\[Union]", RowBox[{"{", "0", "}"}]}]}], RowBox[{ RowBox[{ RowBox[{"and", " ", "u"}], "+", "s"}], "\[Element]", RowBox[{"QR", "\[Union]", RowBox[{ RowBox[{"{", "0", "}"}], "."}]}]}]} }]]]], "DisplayFormula"], Cell[TextData[{ "The counting arguments above imply that with probability ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}], RowBox[{"p", "-", "1"}]], "=", FractionBox["1", "2"]}], TraditionalForm]]], "one of the first two possibilities will occur. So, with probability 1/2 we \ have a non-trivial factor of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "c"}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is known, one also has found the value of ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " or ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ".\nNote that in the extremely unlikely, remaining case, namely if ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"-", "s"}]}], TraditionalForm]]], ", expression ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "c"}], TraditionalForm]]], " will reduce to ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "+", RowBox[{"2", RowBox[{"s", ".", "x"}]}]}], TraditionalForm]]], ". So, the gcd in ", ButtonBox["(9.34)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA gcd for square root"], " will contain a factor ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " and the other factor will yield the solution ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ". " }], "Text"], Cell["An example of the above method will be given later.", "Text"], Cell[TextData[{ "The expected number of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], "'s that one has to try in this algorithm before finding a solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " is the reciprocal of 1/2, i.e. 2. For a discussion of other methods of \ taking square roots modulo a prime number, we refer the interested reader to \ ", ButtonBox["[Pera86]", BaseStyle->"Hyperlink", ButtonData:>"RefPera86"], "." }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell["The Four Solutions", "Subsubsection", CellTags->"SubsubsRSA Rabin 4 solutions"], Cell[TextData[{ "The final step in the decryption algorithm is of course to use the Chinese \ Remainder Theorem to combine each of the two solutions of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " with each of the two solutions of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Example 9.16 (Part 3)", FontWeight->"Bold", FontSlant->"Plain"], "\nWe continue with the parameters of ", ButtonBox["Example 9.16", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA Rabin"], ". So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "=", "9733"}], ","}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "10177"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{ RowBox[{"p", "\[Times]", "q"}], "=", "99052741"}]}], TraditionalForm]]], ", and the solutions of " }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "9733"}], ")"}]}]}], TraditionalForm]]], "\tand \t", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "10177"}], ")"}]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"b", "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "9733"}], ")"}]}]}], TraditionalForm]]], "\tand \t", Cell[BoxData[ FormBox[ RowBox[{"b", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "10177"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "are given by ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", "45287650"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", "53765092"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "9733"}], ";", RowBox[{"q", "=", "10177"}], ";", RowBox[{"n", "=", RowBox[{"p", "*", "q"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"a", "=", "45287650"}], ";", RowBox[{"b", "=", "53765092"}], ";"}], "\[IndentingNewLine]", RowBox[{"Mod", "[", RowBox[{"p", ",", "8"}], "]"}], "\n", RowBox[{"Mod", "[", RowBox[{"q", ",", "8"}], "]"}]}], "Input", CellChangeTimes->{{3.423470512553826*^9, 3.4234705178976097`*^9}}], Cell[BoxData["5"], "Output"], Cell[BoxData["1"], "Output"] }, Open ]], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "9513124"}], TraditionalForm]]], " be a ciphertext. Since ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Congruent]", RowBox[{"5", " ", RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"q", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}]}]}], TraditionalForm]]], ", we follow Case 2 to find the square root of ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and Case 3 to find the square root of ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ SqrtBox["9513124"], TraditionalForm]]], "modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " by ", ButtonBox["Case 2", BaseStyle->"Hyperlink", ButtonData:>"CaseRSA Rabin 2"] }], "Text", FontWeight->"Bold"], Cell[TextData[{ "We calculate ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PowerMod", FontVariations->{"Underline"->True}] }], "Text", CellChangeTimes->{ 3.423396150527294*^9, {3.4234608005668173`*^9, 3.4234608018012*^9}, { 3.423470528819555*^9, 3.423470532585204*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"c", "=", "9513124"}], ";", RowBox[{"u", "=", RowBox[{"PowerMod", "[", RowBox[{"c", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}], ",", "p"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output"], Cell[TextData[{ "and find 1. The square root of ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is thus given by ", Cell[BoxData[ FormBox[ RowBox[{"\[PlusMinus]", SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "3"}], ")"}], "/", "8"}]]}], TraditionalForm]]], ":" }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"f", "=", RowBox[{"PowerMod", "[", RowBox[{"c", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "3"}], ")"}], "/", "8"}], ",", "p"}], "]"}]}]], "Input"], Cell[BoxData["868"], "Output"] }, Open ]], Cell[TextData[{ Cell[BoxData[ FormBox[ SqrtBox["9513124"], TraditionalForm]]], "modulo ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " by ", ButtonBox["Case 3", BaseStyle->"Hyperlink", ButtonData:>"CaseRSA Rabin 3"] }], "Text", FontWeight->"Bold"], Cell[TextData[{ "We want to find the zeros of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "-", "9513124"}], TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". We take a random ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], TraditionalForm]]], " and compute ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "9513124"}], ",", RowBox[{"x", "(", RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "-", "1"}], ")"}]}], ")"}], TraditionalForm]]], " and hope to find a linear factor. We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], ", ", StyleBox["PolynomialGCD", FontVariations->{"Underline"->True}], " and" }], "Text", CellChangeTimes->{{3.4234556700288815`*^9, 3.4234556719819937`*^9}, { 3.4234608063637295`*^9, 3.4234608070981092`*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"u", "=", "11"}], ";", RowBox[{"x", "=."}], ";", RowBox[{"PolynomialGCD", "[", RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "c"}], ",", RowBox[{"x", RowBox[{"(", RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "-", "1"}], ")"}]}], ",", RowBox[{"Modulus", "->", "q"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData["$Aborted"], "Output"], Cell["We try again", "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"u", "=", "111"}], ";", RowBox[{"x", "=."}], ";", RowBox[{"PolynomialGCD", "[", RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "2"], "-", "c"}], ",", RowBox[{"x", RowBox[{"(", RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "-", "1"}], ")"}]}], ",", RowBox[{"Modulus", "->", "q"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1438", "+", "x"}]], "Output"], Cell[TextData[{ "It follows that one of the square roots is given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "-", "111", "-", "g"}], "\[Congruent]", RowBox[{"x", "+", RowBox[{"1438", " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}]}], TraditionalForm]]], ". So, by" }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"g", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"-", "111"}], "-", "1438"}], ",", "q"}], "]"}]}]], "Input"], Cell[BoxData["8628"], "Output"] }, Open ]], Cell[TextData[{ "It follows from the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " ", "(Thm. A.19) ", "that the four square roots of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", "9513124"}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"mod", " ", "99052741"}], ")"}], TraditionalForm]]], " are given by" }], "Text", GeneratedCell->True, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"a", "*", "f"}], "+", RowBox[{"b", "*", "g"}]}], ",", "n"}], "]"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"a", "*", "f"}], "-", RowBox[{"b", "*", "g"}]}], ",", "n"}], "]"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"-", "a"}], "*", "f"}], "+", RowBox[{"b", "*", "g"}]}], ",", "n"}], "]"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"-", "a"}], "*", "f"}], "-", RowBox[{"b", "*", "g"}]}], ",", "n"}], "]"}]}], "Input"], Cell[BoxData["6969696"], "Output"], Cell[BoxData["63567091"], "Output"], Cell[BoxData["35485650"], "Output"], Cell[BoxData["92083045"], "Output"] }, Open ]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "How to Distinguish Between the Solutions" }], "Subsection", CellTags->"SubsRSA distinguish"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " be one of the two solutions of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["p", "U"]}], ")"}]}]}], TraditionalForm]]], " and let ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " be one of the two solutions of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["q", "U"]}], ")"}]}]}], TraditionalForm]]], ". Further, let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " be the solutions of the linear congruence relations ", ButtonBox["(9.30)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA CRT eq for a"], " and ", ButtonBox["(9.31)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA CRT eq for b"], ". \nThen, by the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19), the four solutions of ", ButtonBox["(9.29)", BaseStyle->"Hyperlink", ButtonData:>"FormRSA Rabin encr"], " are given by" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PlusMinus]", RowBox[{"f", ".", "a"}]}], "\[PlusMinus]", RowBox[{ RowBox[{"g", ".", "b"}], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["n", "U"]}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "One would like the sender and receiver to be able to distinguish between \ the four solutions in such a way that they can agree on one of them. In some \ cases this can be done quite easily. Indeed, if ", Cell[BoxData[ FormBox[ SubscriptBox["p", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["q", "U"], TraditionalForm]]], " are both congruent to 3 mod 4, one has by ", ButtonBox["Corollary A.24", BaseStyle->"Hyperlink", ButtonData:>"CorAppA Chi(-1)"], " that ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], " is a NQR both modulo ", Cell[BoxData[ FormBox[ SubscriptBox["p", "U"], TraditionalForm]]], " and modulo ", Cell[BoxData[ FormBox[ SubscriptBox["q", "U"], TraditionalForm]]], ". Hence, exactly one of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"-", "f"}], TraditionalForm]]], " is QR and the same is true for ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"-", "g"}], TraditionalForm]]], ". Replacing ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " by ", Cell[BoxData[ FormBox[ RowBox[{"-", "f"}], TraditionalForm]]], " and/or ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " by ", Cell[BoxData[ FormBox[ RowBox[{"-", "g"}], TraditionalForm]]], ", if necessary, one has without loss of generality that" }], "Text", GeneratedCell->True], Cell[TextData[Cell[BoxData[GridBox[{ { RowBox[{ RowBox[{"+", RowBox[{"f", ".", "a"}]}], "+", RowBox[{"g", ".", "b"}]}], RowBox[{ RowBox[{"is", " ", "QR", " ", "mod", " ", SubscriptBox["p", "U"]}], ","}], RowBox[{ RowBox[{"+", RowBox[{"f", ".", "a"}]}], "+", RowBox[{"g", ".", "b"}]}], RowBox[{ RowBox[{"is", " ", "QR", " ", "mod", " ", SubscriptBox["q", "U"]}], ","}]}, { RowBox[{ RowBox[{"+", RowBox[{"f", ".", "a"}]}], "-", RowBox[{"g", ".", "b"}]}], RowBox[{ RowBox[{"is", " ", "QR", " ", "mod", " ", SubscriptBox["p", "U"]}], ","}], RowBox[{ RowBox[{"+", RowBox[{"f", ".", "a"}]}], "-", RowBox[{"g", ".", "b"}]}], RowBox[{ RowBox[{"is", " ", "QR", " ", "mod", " ", SubscriptBox["q", "U"]}], ","}]}, { RowBox[{ RowBox[{"-", RowBox[{"f", ".", "a"}]}], "+", RowBox[{"g", ".", "b"}]}], RowBox[{ RowBox[{"is", " ", "QR", " ", "mod", " ", SubscriptBox["p", "U"]}], ","}], RowBox[{ RowBox[{"-", RowBox[{"f", ".", "a"}]}], "+", RowBox[{"g", ".", "b"}]}], RowBox[{ RowBox[{"is", " ", "QR", " ", "mod", " ", SubscriptBox["q", "U"]}], ","}]}, { RowBox[{ RowBox[{"-", RowBox[{"f", ".", "a"}]}], "-", RowBox[{"g", ".", "b"}]}], RowBox[{ RowBox[{"is", " ", "QR", " ", "mod", " ", SubscriptBox["p", "U"]}], ","}], RowBox[{ RowBox[{"-", RowBox[{"f", ".", "a"}]}], "-", RowBox[{"g", ".", "b"}]}], RowBox[{"is", " ", "QR", " ", "mod", " ", RowBox[{ SubscriptBox["q", "U"], "."}]}]} }]]]], "DisplayFormula"], Cell[TextData[{ "By ", ButtonBox["Definition A.11", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], " and the second statement in ", ButtonBox["Theorem A.26", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Jacob iRelat"], " we have that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"f", ".", "a"}], "+", RowBox[{ RowBox[{"g", ".", "b"}], "/", SubscriptBox["n", "U"]}]}], ")"}], "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"-", RowBox[{"f", ".", "a"}]}], "-", RowBox[{ RowBox[{"g", ".", "b"}], "/", SubscriptBox["n", "U"]}]}], ")"}], "=", "1"}]}], TraditionalForm]]], ", while ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"f", ".", "a"}], "-", RowBox[{ RowBox[{"g", ".", "b"}], "/", SubscriptBox["n", "U"]}]}], ")"}], "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"-", RowBox[{"f", ".", "a"}]}], "+", RowBox[{ RowBox[{"g", ".", "b"}], "/", SubscriptBox["n", "U"]}]}], ")"}], "=", RowBox[{"-", "1"}]}]}], TraditionalForm]]], ". Of the two solutions with Jacobi value ", Cell[BoxData[ FormBox[ RowBox[{"+", "1"}], TraditionalForm]]], ", one will lie in between 1 and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["n", "U"], "-", "1"}], ")"}], "/", "2"}], TraditionalForm]]], ", the other will lie between ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["n", "U"], "+", "1"}], ")"}], "/", "2"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "U"], "-", "1"}], TraditionalForm]]], " (or both are equal to 0).\nWe conclude that there is a unique solution ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " satisfying ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "m", "\[LessEqual]", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["n", "U"], "-", "1"}], ")"}], "/", "2"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"m", "/", SubscriptBox["n", "U"]}], ")"}], "=", "1"}], TraditionalForm]]], ". So, sender and receiver can agree to use only messages of this form." }], "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[" (Part 1)", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "B"], "=", "77"}], TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "53"}], TraditionalForm]]], " be a received message. Repeating the decryption process explained in the \ previous subsection, we get ", Cell[BoxData[ FormBox[ RowBox[{"f", "=", "2"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", "8"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", "22"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", "56"}], TraditionalForm]]], ". \nWith the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Mod", FontVariations->{"Underline"->True}], " and ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], ", we get the following four possible messages with their respective Jacobi \ symbol value. " }], "Example", CellChangeTimes->{ 3.423396165230513*^9, {3.4234705661322937`*^9, 3.4234705734604654`*^9}}, CellTags->"ExamRSA Rabin four"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"nB", "=", "77"}], ";"}], " ", RowBox[{ RowBox[{"f", "=", "2"}], ";", RowBox[{"g", "=", "8"}], ";"}], RowBox[{ RowBox[{"a", "=", "22"}], ";", RowBox[{"b", "=", "56"}], ";"}], RowBox[{ RowBox[{"m1", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"a", "*", "f"}], "+", RowBox[{"b", "*", "g"}]}], ",", "nB"}], "]"}]}], ";"}], RowBox[{ RowBox[{"m2", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"a", "*", "f"}], "-", RowBox[{"b", "*", "g"}]}], ",", "nB"}], "]"}]}], ";"}], RowBox[{ RowBox[{"m3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"-", "a"}], "*", "f"}], "+", RowBox[{"b", "*", "g"}]}], ",", "nB"}], "]"}]}], ";"}], RowBox[{ RowBox[{"m4", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"-", "a"}], "*", "f"}], "-", RowBox[{"b", "*", "g"}]}], ",", "nB"}], "]"}]}], ";"}], RowBox[{"Print", "[", RowBox[{"m1", ",", "\"\< \>\"", ",", RowBox[{"JacobiSymbol", "[", RowBox[{"m1", ",", "nB"}], "]"}]}], "]"}]}], "\n", RowBox[{"Print", "[", RowBox[{"m2", ",", "\"\< \>\"", ",", RowBox[{"JacobiSymbol", "[", RowBox[{"m2", ",", "nB"}], "]"}]}], "]"}], "\n", RowBox[{"Print", "[", RowBox[{"m3", ",", "\"\< \>\"", ",", RowBox[{"JacobiSymbol", "[", RowBox[{"m3", ",", "nB"}], "]"}]}], "]"}], "\n", RowBox[{"Print", "[", RowBox[{"m4", ",", "\"\< \>\"", ",", RowBox[{"JacobiSymbol", "[", RowBox[{"m4", ",", "nB"}], "]"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{"30", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"-", "1"}]}], SequenceForm[30, " ", -1], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"58", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", "1"}], SequenceForm[58, " ", 1], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"19", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", "1"}], SequenceForm[19, " ", 1], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"47", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"-", "1"}]}], SequenceForm[47, " ", -1], Editable->False]], "Print"], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "19"}], TraditionalForm]]], " is the unique solution with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"m", "/", "77"}], ")"}], "=", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "m", "\[LessEqual]", "33"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "19"}], TraditionalForm]]], " was the message transmitted by the sender." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ SubscriptBox["p", "U"], TraditionalForm]]], " (or ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "U"], ")"}], TraditionalForm]]], " is congruent to 1 modulo 4, one can still agree to use only messages with \ ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "m", "\[LessEqual]", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["n", "U"], "-", "1"}], ")"}], "/", "2"}]}], TraditionalForm]]], ". To get ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"m", "/", SubscriptBox["n", "U"]}], ")"}], "=", "1"}], TraditionalForm]]], " the sender and receiver could restrict themselves to shorter messages, say \ 20 digits shorter, and fill up the remaining 20 digits in such a way that the \ resulting message has Jacobi symbol 1 modulo ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], "." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Equivalence of Breaking Rabin's Scheme and Factoring ", Cell[BoxData[ FormBox["n", TraditionalForm]]] }], "Subsection", CellTags->"SubsRSA Equivalence"], Cell[TextData[{ "We shall now show that breaking Rabin's variant of RSA is equivalent to \ factoring ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], ". Of course, when the factorization of ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], " is known to the cryptanalist, Rabin's system is in fact broken, because \ the cryptanalist can use the same methods to decrypt as the receiver can (see \ ", ButtonBox["Subsection 9.5.2", BaseStyle->"Hyperlink", ButtonData:>"SubSRSA Rabin decr"], ")." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t \n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"p", "\[Times]", "q"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " are prime. Let \[GothicCapitalA] denote an algorithm that for every ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ", which is the square of an integer, finds a solution of ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["x", "2"], TraditionalForm], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"F", "(", "n", ")"}], TraditionalForm]]], " operations.\nThen a probabilistic algorithm exists that factors ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " with an expected number of operations that is ", Cell[BoxData[ FormBox[ RowBox[{"2", RowBox[{"(", RowBox[{ RowBox[{"F", "(", "n", ")"}], "+", RowBox[{"2", SubscriptBox["log", "2"], "n"}]}], ")"}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoRSA Rabin equiv compl"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Select a random ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "<", "m", "<", "n"}], TraditionalForm]]], ", compute ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{ SuperscriptBox["m", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " and solve ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " with algorithm \[GothicCapitalA] in ", Cell[BoxData[ FormBox[ RowBox[{"F", "(", "n", ")"}], TraditionalForm]]], " steps. Let ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " be the solution found by \[GothicCapitalA]. The following four \ possibilities each have probability 1/4:" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[GridBox[{ { RowBox[{"i", ")"}]}, { StyleBox[ RowBox[{"ii", ")"}], FontSlant->"Italic"]}, { StyleBox[ RowBox[{"iii", ")"}], FontSlant->"Italic"]}, { StyleBox[ RowBox[{"iv", ")"}], FontSlant->"Italic"]} }]]], "\t", Cell[BoxData[GridBox[{ { RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"+", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], "and", RowBox[{ RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"+", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], ","}]}, { RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"+", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], "and", RowBox[{ RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"-", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], ","}]}, { RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"-", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], "and", RowBox[{ RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"+", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], ","}]}, { RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"-", "m"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], "and", RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"-", "m"}], " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}], "."}]}]}]} }]]] }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Indeed, there are four different messages that are mapped to ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " and they are all four equally likely.\nIn case ii), ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"k", "-", "m"}], ",", "n"}], ")"}], "=", "p"}], TraditionalForm]]], " and in case iii) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"k", "-", "m"}], ",", "n"}], ")"}], "=", "q"}], TraditionalForm]]], ". So, the calculation of ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{"k", "-", "m"}], ",", "n"}], ")"}], TraditionalForm]]], " will yield the factorization of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " with probability 1/2. This computation involves less than ", Cell[BoxData[ FormBox[ RowBox[{"2", SubscriptBox["log", "2"], "n"}], TraditionalForm]]], " calculations by ", ButtonBox["Theorem A.9", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Compl Eucl"], ", therefore, each choice of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " involves at most ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"F", "(", "n", ")"}], "+", RowBox[{"2", SubscriptBox["log", "2"], "n"}]}], TraditionalForm]]], " operations.\nSince the probability of success is 1/2, one expects to need \ two tries." }], "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 9.20 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nSuppose that ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "77"}], TraditionalForm]]], " and that the value of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " that we have picked is 30. Then ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", SuperscriptBox["30", "2"], "\[Congruent]", RowBox[{"53", " ", RowBox[{"(", RowBox[{"mod", " ", "77"}], ")"}]}]}], TraditionalForm]]], ". Now assume that Algorithm \[GothicCapitalA] finds ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "19"}], TraditionalForm]]], " as solution to ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"53", " ", RowBox[{"(", RowBox[{"mod", " ", "77"}], ")"}]}]}], TraditionalForm]]], " (see ", ButtonBox["Example 9.20", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA Rabin four"], " for these parameters).\nThen one of the factors of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " will be found from ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{"k", "-", "m"}], ",", "n"}], ")"}], TraditionalForm]]], ". This would also have happened if \[GothicCapitalA] had found ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "58"}], TraditionalForm]]], ", but not with 30 or 47.\nAll these calculations can easily be checked with \ the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["GCD", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.4233968804382153`*^9}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "77"}], ";", " ", RowBox[{"m", "=", "30"}], ";", RowBox[{"GCD", "[", RowBox[{ RowBox[{"19", "-", "30"}], ",", "n"}], "]"}]}], "\n", RowBox[{"GCD", "[", RowBox[{ RowBox[{"58", "-", "30"}], ",", "n"}], "]"}], "\n", RowBox[{"GCD", "[", RowBox[{ RowBox[{"30", "-", "30"}], ",", "n"}], "]"}], "\n", RowBox[{"GCD", "[", RowBox[{ RowBox[{"47", "-", "30"}], ",", "n"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["11"], "Output"], Cell[BoxData["7"], "Output"], Cell[BoxData["77"], "Output"], Cell[BoxData["1"], "Output"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectRSA Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nConsider the ", ButtonBox["RSA system", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA secr"], " with ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"383", "\[Times]", "563"}]}], TraditionalForm]]], " (so ", Cell[BoxData[ FormBox[ RowBox[{"n", " ", "=", "215629"}], TraditionalForm]]], ") and public key ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "49"}], TraditionalForm]]], ". So, a plaintext ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " will be encrypted into ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{"E", "(", "m", ")"}]}], TraditionalForm]]], ", where" }], "Problem"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"E", "(", "m", ")"}], "=", RowBox[{ SuperscriptBox["m", "49"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Prove that every ciphertext ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " satisfies ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["E", "10"], "(", "c", ")"}], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ". (Hint: use ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " and the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], ".) The notation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["E", "10"], "(", "c", ")"}], TraditionalForm]]], " stands for ", Cell[BoxData[ FormBox[ OverscriptBox[ FormBox[ OverscriptBox[ RowBox[{"E", "(", RowBox[{"E", "(", " ", RowBox[{"\[Ellipsis]", " ", RowBox[{"E", "(", "c", ")"}]}], ")"}], ")"}], "\[OverBrace]"], TraditionalForm], "10"], TraditionalForm]]], ".\nGive an easy way for a cryptanalist to recover plaintext ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ciphertext ", Cell[BoxData[ FormBox["c", TraditionalForm]]], "." }], "Problem", GeneratedCell->True, CounterIncrements->"Non"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nVerify that the RSA secrecy system (or signature scheme) works correctly \ when a message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " has a non-trivial factor in common with the modulus ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"p", "\[Times]", "q"}]}], TraditionalForm]]], ", i.e. show that " }], "Problem", CellTags->"ProbRSA RSA when gcd>1"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["m", "e"], ")"}], "d"], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]], "DisplayFormula"], Cell[BoxData[ FormBox[ RowBox[{"when", " ", FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", "n"}], ")"}], "=", "p"}], TraditionalForm], "or", " ", FormBox["q", TraditionalForm], " ", RowBox[{ RowBox[{"(", RowBox[{"as", " ", "always", " ", FormBox["e", TraditionalForm], " ", "and", " ", FormBox["d", TraditionalForm], " ", "denote", " ", "the", " ", "public", " ", RowBox[{"resp", ".", "secret"}], " ", "exponents"}], ")"}], ".", "\n", RowBox[{"(", RowBox[{"Hint", ":", RowBox[{"use", " ", ButtonBox[ RowBox[{ RowBox[{"Fermat", "'"}], "s", " ", "Theorem"}], BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " ", "and", " ", "the", " ", RowBox[{ ButtonBox[ RowBox[{"Chinese", " ", "Remainder", " ", "Theorem"}], BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], "."}]}]}], ")"}]}]}], TextForm]], "Problem", PageBreakBelow->Automatic, GeneratedCell->True, CounterIncrements->"None"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nConsider the ", ButtonBox["RSA cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA secr"], " with modulus ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"p", "\[Times]", "q"}]}], TraditionalForm]]], " and public exponent ", Cell[BoxData[ FormBox["e", TraditionalForm]]], ".\na) Prove that the number of solutions of the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "u"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ", when ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], ", is exactly ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " (hint: use the multiplicative structure of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], ", ", ButtonBox["Theorem B.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Cyclic Struc"], ")\nb) Show that each solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"e", "-", "1"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " is a solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"gcd", "(", RowBox[{ RowBox[{"e", "-", "1"}], ",", RowBox[{"p", "-", "1"}]}], ")"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and vice versa (use ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], ").\nc) Prove that the number of solutions of the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "e"], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", RowBox[{"gcd", "(", RowBox[{ RowBox[{"e", "-", "1"}], ",", RowBox[{"p", "-", "1"}]}], ")"}]}], TraditionalForm]]], ".\nd) Prove that the number of plaintexts ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " satisfying" }], "Problem", GeneratedCell->True], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "e"], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]]], "DisplayFormula"], Cell["\<\ (in which case encryption does not conceal a message), is given by\ \>", "Problem", CounterIncrements->"Non"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{"1", "+", RowBox[{"gcd", "(", RowBox[{ RowBox[{"e", "-", "1"}], ",", RowBox[{"p", "-", "1"}]}], ")"}]}], "}"}], ".", RowBox[{"{", RowBox[{"1", "+", RowBox[{"gcd", "(", RowBox[{ RowBox[{"e", "-", "1"}], ",", RowBox[{"q", "-", "1"}]}], ")"}]}], "}"}], "."}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "(Hint: use the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], ".)" }], "Problem", PageBreakBelow->Automatic, GeneratedCell->True, CounterIncrements->"None"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nDemonstrate the principle of the ", ButtonBox["Solovay and Strassen", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Solovay"], " primality test on the number m = 33. The number ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " has been made small in this problem to keep the calculations simple. So, \ do not make use of numbers that \"incidentally\" have a factor in common with \ ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "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]]], "\nGive a ", StyleBox["Mathematica", FontSlant->"Italic"], " implementation of ", ButtonBox["Algorithm 9.14", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Lenstra small"], " and test it out for two values of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"24", "<", "m", "<", SuperscriptBox["24", "2"]}], TraditionalForm]]], "." }], "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]]], "\nGive a complete factorization of ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "110545695839248001"}], TraditionalForm]]], " by means of ", ButtonBox["Pollard's ", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Fact Pollard rho"], ButtonBox["\[CurlyRho]", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Fact Pollard rho"], " Algorithm." }], "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]]], "\nComplete ", ButtonBox["Example 9.7", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA quadr sieve"], ". (Hint: extend the search to ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"-", "105"}], ",", "105"}], ")"}], TraditionalForm]]], ".)" }], "Problem", CellTags->"ProbRSA 9.7"], 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]]], "\nApply the ", ButtonBox["Wiener attack", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Wiener attack"], " to ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "122714980793"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "34587422599"}], TraditionalForm]]], "." }], "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]]], "\nFind a ", ButtonBox["strong liar", BaseStyle->"Hyperlink", ButtonData:>"DefRSA strong liar"], " for the composite number ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "85"}], TraditionalForm]]], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nSuppose that Alice has sent the same secret message to B, C, D, E, and F \ by means of the ", ButtonBox["RSA system", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA secr"], ". Let the public moduli of these people be given by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "B"], "=", "324059"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "C"], "=", "324371"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "D"], "=", "326959"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "E"], "=", "324851"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "F"], "=", "324899"}], TraditionalForm]]], ". Assume that they all have the same public exponent ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "5"}], TraditionalForm]]], ".\nLet the intercepted messages be given by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "B"], "=", "68207"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "C"], "=", "96570"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "D"], "=", "251415"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "E"], "=", "273331"}], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "F"], "=", "154351"}], TraditionalForm]]], ".\nDetermine Alice's message (see ", ButtonBox["Example 9.8", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA e=3 same m"], "). " }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nSuppose that Alice has sent secret messages ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "=", "m"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "=", RowBox[{ SuperscriptBox["m", "2"], "+", RowBox[{"10", "m"}], "+", "20"}]}], TraditionalForm]]], " to Bob by means of the RSA system. Let Bob's modulus be ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "B"], "=", "483047"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "B"], "=", "3"}], TraditionalForm]]], ". Suppose that you have intercepted the transmitted ciphertexts ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", "346208"}], TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "=", "230313"}], TraditionalForm]]], " and that you know the above relation between ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], ". Determine ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " (see ", ButtonBox["Example 9.10", BaseStyle->"Hyperlink", ButtonData:>"ExamRSA Copper"], ")." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nConsider the ", ButtonBox["Rabin variant", BaseStyle->"Hyperlink", ButtonData:>"FormRSA e=2"], " of the RSA system. So, only the number ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is public.\nSuppose that a message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "<", "m", "<", "n"}], TraditionalForm]]], ", has been sent that has a non-trivial factor in common with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ".\nHow many possible plaintexts will the receiver find at the end of the \ decryption process?" }], "Problem", CellTags->"ProbRSA Rabin non-trivial factor"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nThe ", ButtonBox["Rabin variant", BaseStyle->"Hyperlink", ButtonData:>"FormRSA e=2"], " of the RSA system is used as cryptosystem with ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"17419", "\[Times]", "17431"}]}], TraditionalForm]]], ". Demonstrate the decryption algorithm of this system for the ciphertext ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "234279292"}], TraditionalForm]]], ".\nWhich solution will come up if the method described in ", ButtonBox["Subsection 9.5.3", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA distinguish"], " is being followed? Why can this method be applied?" }], "Problem", PageBreakAbove->True], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Congruent]", RowBox[{"5", " ", RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}]}]}], TraditionalForm]]], " and let ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " be a ", ButtonBox["quadratic residue", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". \na) Show that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}]], "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ".\nb) Show that the solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{"\[PlusMinus]", SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "3"}], ")"}], "/", "8"}]]}], TraditionalForm]]], " if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ".\nc) Show that the solution of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"c", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PlusMinus]", "2"}], SuperscriptBox[ RowBox[{"c", "(", RowBox[{"4", "c"}], ")"}], RowBox[{ RowBox[{"(", RowBox[{"p", "-", "5"}], ")"}], "/", "8"}]]}], TraditionalForm]]], " if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "4"}]], "\[Congruent]", RowBox[{ RowBox[{"-", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". (Hint: use ", ButtonBox["Theorem A.25", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chi(2)"], " which implies that 2 is not a quadratic residue modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ")" }], "Problem", GeneratedCell->True, CellTags->"ProbRSA Rabin decrypt 5(8)"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tElliptic Curves Based Systems" }], "Chapter", CellTags->"Chap Ellip"], Cell[TextData[{ "It will turn out in this chapter that ", ButtonBox["discrete-logarithm", BaseStyle->"Hyperlink", ButtonData:>"Chap Discr"], "-based cryptosystems can also be defined over elliptic curves. For ", ButtonBox["RSA", BaseStyle->"Hyperlink", ButtonData:>"Chap RSA"], "-based systems the same can be done, but there seems to be little reason to \ do so. For discrete-logarithm-like systems over elliptic curves, it may very \ well be that smaller parameters are possible with the same level of security \ as the regular systems over finite fields.\nHowever, many questions regarding \ EC-systems are still open at this moment, making it unclear what the future \ of these systems will be." }], "Text"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tSome Basic Facts of Elliptic Curves" }], "Section", CellTags->"SectEllip Basic facts"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " be a ", ButtonBox["finite field", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], " with ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " elements, where ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], ". The number ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is prime and is called the ", ButtonBox["characteristic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB characteristic"], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q"}], TraditionalForm]]], "). If ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "1"}], TraditionalForm]]], ", we have ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", "q", ")"}], "=", SubscriptBox["\[DoubleStruckCapitalZ]", "p"]}], TraditionalForm]]], ", the set of integers modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". " }], "Text", GeneratedCell->True], Cell[TextData[{ "The so-called (affine) ", StyleBox["Weierstrass equation", FontSlant->"Italic"], " is given by" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "+", RowBox[{"u", ".", "x", ".", "y"}], "+", RowBox[{"v", ".", "y"}]}], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", ".", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", ".", "x"}], "+", "c"}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip Weierstrass"], Cell[TextData[{ "It is defined over any field (like \[GothicCapitalR] or \ \[DoubleStruckCapitalC]), but for cryptographic purposes we shall always \ assume that the coefficients are in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[NotEqual]", "2"}], TraditionalForm]]], ", one can simplify the Weierstrass equation by means of the transformation \ ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{"y", "\[RightArrow]", RowBox[{"y", "-", RowBox[{"(", RowBox[{"u", ".", "x"}]}]}]}], TraditionalForm], "+", "v"}], ")"}], "/", "2"}], TraditionalForm]]], ". One obtains (with new values for ", Cell[BoxData[ FormBox[ RowBox[{"a", ",", "b"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ")" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", "a"}]}], TraditionalForm], ".", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", ".", "x"}], "+", "c"}], TraditionalForm]]], ". " }], "NumberedEquation", CellTags->"FormEllip Red Weier"], Cell[TextData[{ "If also ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[NotEqual]", "3"}], TraditionalForm]]], ", one can apply ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[RightArrow]", RowBox[{"x", "-", RowBox[{"a", "/", "3"}]}]}], TraditionalForm]]], " to further reduce this form to:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"b", ".", "x"}], "+", "c"}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip Weier Red p>3"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]]], ", two standard simplifications of ", Cell[BoxData[ FormBox[ RowBox[{"(", "10.1", ")"}], TraditionalForm]]], " are possible. They are given by" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "+", RowBox[{"x", ".", "y"}]}], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", ".", SuperscriptBox["x", "2"]}], "+", "c"}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip Weier Red p=2"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "+", RowBox[{"v", ".", "y"}]}], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"b", ".", "x"}], "+", "c"}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip Weier Red p=2 super"], 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["elliptic curve", FontSlant->"Italic"], " \[ScriptCapitalE] over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " is defined as the set of points ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"x", ",", "y"}], ")"}], TraditionalForm]]], " satisfying ", ButtonBox["(10.1)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], " together with a single element ", Cell[BoxData[ FormBox["O", TraditionalForm]]], ", called the ", StyleBox["point at infinity", FontSlant->"Italic"], ". " }], "Definition", CellTags->"DefEllip elliptic curve"], Cell[TextData[{ "To verify if a point ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"u", ",", "v"}], ")"}], TraditionalForm]]], " lies on a particular elliptic curve, say ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"2", "x"}], "+", "3"}]}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "5"], TraditionalForm]]], ", is quite easy." }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "5"}], ";", RowBox[{"a", "=", "0"}], ";", RowBox[{"b", "=", "2"}], ";", RowBox[{"c", "=", "3"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"EC", "[", RowBox[{"x_", ",", "y_"}], "]"}], "=", RowBox[{ SuperscriptBox["y", "2"], "-", SuperscriptBox["x", "3"], "-", RowBox[{"a", "*", SuperscriptBox["x", "2"]}], "-", RowBox[{"b", "*", "x"}], "-", "c"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"u", ",", "v"}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "4"}], "}"}]}], ";", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"EC", "[", RowBox[{"u", ",", "v"}], "]"}], ",", "p"}], "]"}], "==", "0"}]}]}], "Input", CellChangeTimes->{{3.4234708075088387`*^9, 3.42347081088386*^9}}], Cell[BoxData["True"], "Output"], Cell[TextData[{ "To see if \[ScriptCapitalE] contains a point with a given ", Cell[BoxData[ FormBox["x", TraditionalForm]]], "-coordinate we can use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Solve", FontVariations->{"Underline"->True}], ". Since the Weierstrass equation is quadratic in ", Cell[BoxData[ FormBox["y", TraditionalForm]]], ", there will be at most two values of ", Cell[BoxData[ FormBox["y", TraditionalForm]]], " (see ", ButtonBox["Theorem B.14", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], ")." }], "Text", CellChangeTimes->{{3.4233955507578306`*^9, 3.423395561148522*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "11"}], ";", RowBox[{"Solve", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "==", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", " ", "x"}], "+", "3"}]}], ",", RowBox[{"x", "==", "3"}], ",", " ", RowBox[{"Modulus", "==", " ", "p"}]}], "}"}], ",", " ", RowBox[{"{", "y", "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"x", "\[Rule]", "3"}], ",", RowBox[{"y", "\[Rule]", "2"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"x", "\[Rule]", "3"}], ",", RowBox[{"y", "\[Rule]", "9"}]}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{"x", "=", "3"}], TraditionalForm]]], " leads to the values ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{"\[PlusMinus]", "2"}]}], TraditionalForm]]], ", i.e. to the points ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"3", ",", "2"}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"3", ",", "9"}], ")"}], TraditionalForm]]], ". The reader should try some other values of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "The reader is referred to Subsection 9.5.2 to find a ", ButtonBox["discussion", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA find square root"], " on how the square root of a ", ButtonBox["quadratic residue", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " modulo a prime number can be determined by mathematical means." }], "Text", GeneratedCell->True], Cell[TextData[{ "It follows from the above that a point ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"(", RowBox[{"x", ",", "y"}], ")"}]}], TraditionalForm]]], " on an elliptic curve is completely characterized by its ", Cell[BoxData[ FormBox["x", TraditionalForm]]], "-coordinate and the \"sign\" of ", Cell[BoxData[ FormBox["y", TraditionalForm]]], ". This reduces the storage requirement of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " by almost a factor 2. If ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "p"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "2"}], TraditionalForm]]], ", the \"sign\" of ", Cell[BoxData[ FormBox["y", TraditionalForm]]], " can be defined as being plus one when ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "y", "\[LessEqual]", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]}], TraditionalForm]]], " and as minus one otherwise. \nIf ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "2"}], TraditionalForm]]], ", one can use likewise the \"sign\" of the left-most nonzero coordinate in \ the ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary representation of ", Cell[BoxData[ FormBox["y", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "For small values of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", one can find all points on \[ScriptCapitalE] by trying out all possible \ value of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " and check in each case if ", ButtonBox["(10.1)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], " has a solution. Below, we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Flatten", FontVariations->{"Underline"->True}], ", ", StyleBox["Table", FontVariations->{"Underline"->True}], ", and ", StyleBox["Solve", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{ 3.423393842246896*^9, {3.4233955751642365`*^9, 3.4233955799611425`*^9}, { 3.4234638268794565`*^9, 3.423463828426371*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", RowBox[{"x", ",", "y"}], "]"}], ";"}], "\n", RowBox[{ RowBox[{"p", "=", "11"}], ";"}], "\n", RowBox[{"Flatten", "[", RowBox[{ RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"Solve", "[", " ", RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "==", " ", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", " ", "x"}], " ", "+", " ", "3"}]}], ",", " ", RowBox[{"x", "==", "u"}], ",", " ", RowBox[{"Modulus", "==", "p"}]}], "}"}], "]"}], ",", RowBox[{"{", RowBox[{"u", ",", " ", "0", ",", " ", RowBox[{"p", "-", "1"}]}], "}"}]}], "]"}], " ", ",", "1"}], "]"}]}], "Input", CellChangeTimes->{{3.4234638329264865`*^9, 3.4234638333639975`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "5"}], ",", RowBox[{"x", "\[Rule]", "0"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "6"}], ",", RowBox[{"x", "\[Rule]", "0"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "1"}], ",", RowBox[{"x", "\[Rule]", "2"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "10"}], ",", RowBox[{"x", "\[Rule]", "2"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "2"}], ",", RowBox[{"x", "\[Rule]", "3"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "9"}], ",", RowBox[{"x", "\[Rule]", "3"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "5"}], ",", RowBox[{"x", "\[Rule]", "4"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "6"}], ",", RowBox[{"x", "\[Rule]", "4"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "2"}], ",", RowBox[{"x", "\[Rule]", "5"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "9"}], ",", RowBox[{"x", "\[Rule]", "5"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "5"}], ",", RowBox[{"x", "\[Rule]", "7"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "6"}], ",", RowBox[{"x", "\[Rule]", "7"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "4"}], ",", RowBox[{"x", "\[Rule]", "9"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "7"}], ",", RowBox[{"x", "\[Rule]", "9"}]}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "We see that for ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "11"}], TraditionalForm]]], ", there are 14 solutions (not counting ", StyleBox["O", FontSlant->"Italic"], ")", ". There is a (imprecise) probabilistic argument to predict the number of \ points on \[ScriptCapitalE]: for each value of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], ", equation ", ButtonBox["(10.1)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], " will have two solutions with probability 1/2 and no solutions with \ probability 1/2, leading to about ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " solutions." }], "Text"], Cell[TextData[{ "As supporting evidence of this statement, consider the right hand side in \ ", ButtonBox["(10.2)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Red Weier"], " and assume that ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "2"}], TraditionalForm]]], ". If, for a given value of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], ", the right hand side is a square in GF(p) (there are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}], TraditionalForm]]], " squares, namely all even powers of a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], "; or see ", ButtonBox["Theorem A.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Chi"], "), there will be two solutions for ", Cell[BoxData[ FormBox["y", TraditionalForm]]], ". If the right hand side is 0, there is only one solution, namely ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", "0"}], TraditionalForm]]], ". There are no other solutions." }], "Text", GeneratedCell->True], Cell[TextData[{ " A famous theorem by Hasse ", ButtonBox["[Silv86]", BaseStyle->"Hyperlink", ButtonData:>"RefSilv86"], " states:" }], "Text", GeneratedCell->True], 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["Hasse", FontSlant->"Italic"], "\nLet ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " be the number of points on a elliptic curve over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ". Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"|", RowBox[{"N", "-", RowBox[{"(", RowBox[{"q", "+", "1"}], ")"}]}], "|", RowBox[{"\[LessEqual]", RowBox[{"2", SqrtBox["q"]}]}]}], TraditionalForm]]] }], "Theorem", CellTags->"TheoEllip Hasse"], Cell[TextData[{ "Note that in the example above, we have indeed that ", Cell[BoxData[ FormBox[ RowBox[{"|", RowBox[{"15", "-", "12"}], "|", RowBox[{"\[LessEqual]", RowBox[{"2", SqrtBox["11"]}]}]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "In general, it is very hard to find the precise number of points on an \ elliptic curve. There is however an algorithm by Schoof ", ButtonBox["[Scho95]", BaseStyle->"Hyperlink", ButtonData:>"RefScho95"], " which computes this number (see also ", ButtonBox["[Mene93]", BaseStyle->"Hyperlink", ButtonData:>"RefMene98"], " for a further discussion)." }], "Text", GeneratedCell->True], Cell[TextData[{ "Although it is not necessary for the understanding of the rest of this \ chapter, we like to remind the reader of the possibilities in ", StyleBox["Mathematica", FontSlant->"Italic"], " to make calculations over fields ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["p", "m"], ")"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"m", ">", "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"], StyleBox[" ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "As an example of a curve over", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "\[Alpha]", "]"}], "/", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["\[Alpha]", "3"], "+", SuperscriptBox["\[Alpha]", "4"]}], ")"}]}]}], TraditionalForm]]], " (see ", ButtonBox["Table B.2", BaseStyle->"Hyperlink", ButtonData:>"TableAppB F16-2"], "), we can consider the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", "\[Alpha]x", "+", "1"}]}], TraditionalForm]]], ". To test if ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["\[Alpha]", "2"], ",", SuperscriptBox["\[Alpha]", "14"]}], ")"}], TraditionalForm]]], " is on the curve we first load the ", StyleBox["Mathematica", FontSlant->"Italic"], " package ", StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.4234548808776817`*^9, 3.4234548834245405`*^9}}, CellTags->"ExamEllip point on EC?"], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input", GeneratedCell->True], Cell[BoxData[{ RowBox[{ RowBox[{"f16", "=", RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"al", "=", RowBox[{"f16", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], "}"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"EC", "[", RowBox[{"x_", ",", "y_"}], "]"}], "=", RowBox[{ SuperscriptBox["y", "2"], "-", SuperscriptBox["x", "3"], "-", RowBox[{"al", "*", "x"}], "-", "1"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"u", ",", "v"}], "}"}], "=", RowBox[{"{", RowBox[{ SuperscriptBox["al", "2"], ",", SuperscriptBox["al", "14"]}], "}"}]}], ";"}], "\n", RowBox[{"EC", "[", RowBox[{"u", ",", "v"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["0"], "Output"], Cell[TextData[{ "Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", "14"], ")"}], "2"], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", "2"], ")"}], "3"], "+", RowBox[{"\[Alpha]", "(", SuperscriptBox["\[Alpha]", "2"], ")"}], "+", "1"}]}], TraditionalForm]]], ", as can be checked with" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ SuperscriptBox["al", "6"], "+", SuperscriptBox["al", "3"], "+", "1"}], "\n", SuperscriptBox[ RowBox[{"(", SuperscriptBox["al", "14"], ")"}], "2"]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Geometry of Elliptic Curves" }], "Section", CellTags->"SectEllip geometry"], Cell[TextData[{ "The reason that we are interested in elliptic curves is the addition ", ButtonBox["operation", BaseStyle->"Hyperlink", ButtonData:>"DefAppB operation"], " that can be defined on them. This operation will have ", Cell[BoxData[ FormBox[ RowBox[{"O", "\[Element]", "\[ScriptCapitalE]"}], TraditionalForm]]], " (the ", ButtonBox["point at infinity", BaseStyle->"Hyperlink", ButtonData:>"DefEllip elliptic curve"], ") as its unit-element and will have the structure of an ", ButtonBox["additive", BaseStyle->"Hyperlink", ButtonData:>"DefAppB additive group"], " ", ButtonBox["group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], ".\nTo be able to define a suitable addition on \[ScriptCapitalE], we shall \ make use of the property that any line intersecting \[ScriptCapitalE] in at \ least two points, will intersect it in a third. Here, a tangent point should \ be counted twice. The point ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " at infinity is the intersection point of all vertical lines." }], "Text", GeneratedCell->True], Cell[TextData[{ "We shall first show a picture of an elliptic curve over the reals. We use \ the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["ContourPlot", FontVariations->{"Underline"->True}], ButtonBox[".", BaseStyle->"Link", ButtonData->"paclet:ref/ContourPlot"] }], "Text", CellChangeTimes->{{3.4214672151068597`*^9, 3.4214672173724847`*^9}, { 3.423470855352895*^9, 3.423470863868574*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"elliptic", "=", RowBox[{"ContourPlot", "[", " ", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "==", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", "x"}], "+", " ", "3"}]}], ",", " ", RowBox[{"{", RowBox[{"x", ",", " ", RowBox[{"-", "3"}], ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"y", ",", RowBox[{"-", "4"}], ",", "4"}], "}"}], ",", RowBox[{"Frame", "\[Rule]", "False"}], ",", RowBox[{"Axes", "\[Rule]", "True"}]}], "]"}]}]], "Input", CellChangeTimes->{3.4214672294818597`*^9}], Cell[BoxData[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 "], {{}, {}, {Hue[0.67, 0.6, 0.6], TagBox[ TooltipBox[ LineBox[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140}], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{"3", "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == 3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ], TagBox[ TooltipBox[LineBox[CompressedData[" 1:eJwl02V7EAQUBeCNbhAQkAaVUlIF6QYJ6ZBukBbpbpTuGGxjQXczYgMllUZB QVK6Ubp5efjwnvsDzrnZWnev0y0wICDgSzHRncRkpjCVaUxnBjOZxWzmEMRc 5hFMCKHMJ4xwIohkAQtZxGKWsJRlLGcFK1nFatawlnWsZwMb2cRmotjCVrax nWhi2MFOfuFXdrGbPexlH/v5jd85wEEOcZgjHOUYx/mDPznBSf7ib05xmn84 w1nOcZ4LXORfLnGZK1zlGte5wU1ucZs73OUe9/mP/3nAQx7xmCc85RnPecFL XvGaNwToM5BYxCYOcYlHfBKQkEQkJglJSUZyUvABKUlFaj4kDWlJx0ekJwMZ yURmspCVbGTnYz7hU3KQk1zkJg+f8Tl5yUd+ClCQQnwR+H6fX1GYInxNUYpR nBKUpBSlKUNZylGeClSkEpX5hipUpRrV+ZYa1KQWtalDXepRnwY05Dsa0Zgm NKUZzWlBS1rRmja0pR3t6cD3dKQTnelCV949Y3d+oAc/0pNe9KYPfelHfwYw kEEMZghDGcZwRjCSUYxmDD/xM2MZx3gmMJFJTGYKU5nGdGYwk1nMZg5BzGUe wYQQynzCCCeCSBawkEUsZglLWcZyVrCSVaxmDWtZx3o2sJFNbCaKLWxlG9uJ JoYd7OQtut+j/A== "]], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{"3", "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == 3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ]}}], AspectRatio->1, Axes->True, PlotRange->{{-3, 3}, {-4, 4}}, PlotRangeClipping->True, PlotRangePadding->{ Scaled[0.02], Scaled[0.02]}]], "Output", CellChangeTimes->{3.4214672335131097`*^9}] }, Open ]], Cell[TextData[{ "The reader is invited to change the coefficient of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " in the function plotted above from ", Cell[BoxData[ FormBox[ RowBox[{"-", "5"}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ RowBox[{"-", "4"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"-", "3"}], TraditionalForm]]], " and observe how the graph changes." }], "Text"], Cell[TextData[{ "To see how the line ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{"x", "+", "1"}]}], TraditionalForm]]], " intersects ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", "x"}], "+", "3"}]}], TraditionalForm]]], " we use the additional functions ", StyleBox["Epilog", FontVariations->{"Underline"->True}], " and ", StyleBox["Line", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234709049469624`*^9, 3.423470906275096*^9}, { 3.423470960447317*^9, 3.423470963541087*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContourPlot", "[", " ", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "==", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", "x"}], "+", " ", "3"}]}], ",", " ", RowBox[{"{", RowBox[{"x", ",", " ", RowBox[{"-", "3"}], ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"y", ",", RowBox[{"-", "4"}], ",", "4"}], "}"}], ",", RowBox[{"Frame", "\[Rule]", "False"}], ",", RowBox[{"Axes", "\[Rule]", "True"}], ",", RowBox[{"Epilog", "->", " ", RowBox[{"Line", "[", " ", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"-", "3"}], ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", RowBox[{"-", "3"}]}], "}"}]}], "}"}], "]"}]}]}], "]"}]], "Input", CellChangeTimes->{ 3.4214672294818597`*^9, {3.4214677689506097`*^9, 3.4214677693881097`*^9}, { 3.4214692641849847`*^9, 3.4214692899349847`*^9}}], Cell[BoxData[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 "], {{}, {}, {Hue[0.67, 0.6, 0.6], TagBox[ TooltipBox[ LineBox[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151}], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{"3", "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == 3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ], TagBox[ TooltipBox[LineBox[CompressedData[" 1:eJwl0/efCAQYBvA7MxSKRLIzy55l72Tvyt4ku+y998jIOO4Od9zhbGefnU0h ZO+Z7L2+Pn74Pu8f8DxvhuadanUMDAgIyCmmuzOYySyCmM0cggkhlLnMYz5h hLOAhUQQySIWs4QolrKM5axgJatYzRqiWcs61rOBjWxiMzFsYSvb2M4OdrKL P9nNHvayj/0c4CCHOMxf/M0RjnKMfzjOCU7yL6c4zRnOco7zXOAil7jMFa5y jevc4Ca3uM1/3OF/7nKP+zzgIY94zBOe8oznvOAlr3jNGwJ0FEgsYhOHuMQj Ph+QgIQk4kM+IjFJSMrHfEIykvMpKfiMlKTic1LzBWlISzrSk4GMZOJLMpOF rGQjOzn4iq8D3+8qF7nJQ17ykZ8CFKQQhSnCN3xLUYpRnBKUpBSlKUNZylGe ClTkOyrxPZWpQlWqUZ0a1KQWtalDXepRnx/4kZ9oQEMa0ZgmNKUZzWlBS1rR mja0pR0/055f6MC7B+tEZ7rQlW78ym90pwc96UVv+tCXfvRnAAMZxGCGMJRh DGcEIxnFaMYwlnGMZwITmcTvTGYKU5nGH0xnBjOZRRCzmUMwIYQyl3nMJ4xw FrCQCCJZxGKWEMVSlrGcFaxkFatZQzRrWcd6NrCRTWwmhi1sZRvb2cFbjMOg vQ== "]], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{"3", "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == 3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ]}}], AspectRatio->1, Axes->True, Epilog->LineBox[{{-3, 4}, {4, -3}}], PlotRange->{{-3, 4}, {-4, 4}}, PlotRangeClipping->True, PlotRangePadding->{ Scaled[0.02], Scaled[0.02]}]], "Output", CellChangeTimes->{3.4214677702787347`*^9, 3.4214692715443597`*^9}] }, Open ]], Cell[TextData[{ "To find the intersection points numerically, one can use ", StyleBox["NSolve", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423471002431961*^9, 3.4234710054788556`*^9}}], Cell[BoxData[ RowBox[{"NSolve", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "==", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", " ", "x"}], "+", "3"}]}], ",", RowBox[{"y", "==", RowBox[{ RowBox[{"-", "x"}], "+", "1"}]}]}], "}"}], ",", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"x", "\[Rule]", RowBox[{"-", "1.618033988749893`"}]}], ",", RowBox[{"y", "\[Rule]", "2.618033988749893`"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"x", "\[Rule]", "1.9999999999999976`"}], ",", RowBox[{"y", "\[Rule]", RowBox[{"-", "0.9999999999999976`"}]}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"x", "\[Rule]", "0.6180339887498947`"}], ",", RowBox[{"y", "\[Rule]", "0.3819660112501053`"}]}], "}"}]}], "}"}]], "Output", CellChangeTimes->{3.4214677922631097`*^9}], Cell[TextData[{ "When the curve is defined over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], " we can find the intersection points of a line with the curve by means of \ the ", StyleBox["Solve", FontVariations->{"Underline"->True}], " function as follows." }], "Text", CellChangeTimes->{3.42339559521124*^9}], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "11"}], ";", RowBox[{"Solve", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "==", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", " ", "x"}], "+", "3"}]}], ",", RowBox[{"y", "==", RowBox[{"x", "-", " ", "1"}]}], ",", " ", RowBox[{"Modulus", "==", " ", "p"}]}], "}"}], ",", " ", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "1"}], ",", RowBox[{"x", "\[Rule]", "2"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "2"}], ",", RowBox[{"x", "\[Rule]", "3"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "11"}], ",", RowBox[{"y", "\[Rule]", "6"}], ",", RowBox[{"x", "\[Rule]", "7"}]}], "}"}]}], "}"}]], "Output", CellChangeTimes->{3.4214678128099847`*^9}], Cell[TextData[{ "A different way to find the intersection points of a line ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{ RowBox[{"u", ".", "x"}], "+", "v"}]}], TraditionalForm]]], " with an elliptic curve is to substitute ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{ RowBox[{"u", ".", "x"}], "+", "v"}]}], TraditionalForm]]], " in ", ButtonBox["(10.1)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], ", obtain a third degree equation in ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " and find its factorization. " }], "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"], "Suppose that we are working over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "11"], TraditionalForm]]], ". To find the intersection points of", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{ RowBox[{"4", "x"}], "+", "1"}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", "x"}], "+", "1"}]}], TraditionalForm]]], ", we factor ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"4", "x"}], "+", "1"}], ")"}], "2"], "-", RowBox[{"(", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", "x"}], "+", "1"}], ")"}]}], TraditionalForm]]], " with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Factor", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.423454691957016*^9, 3.4234546931913834`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "11"}], ";"}], "\n", RowBox[{ RowBox[{"Clear", "[", "x", "]"}], ";"}], "\n", RowBox[{ RowBox[{"ec", "=", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", "x"}], "+", "3"}]}], ";"}], "\n", RowBox[{ RowBox[{"il", "=", RowBox[{ RowBox[{"4", "x"}], "+", "1"}]}], ";"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{ SuperscriptBox["il", "2"], "-", "ec"}], ",", RowBox[{"Modulus", "->", "p"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"10", " ", RowBox[{"(", RowBox[{"2", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"7", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"8", "+", "x"}], ")"}]}]], "Output"], Cell[TextData[{ "We get as ", Cell[BoxData[ FormBox["x", TraditionalForm]]], "-values of the intersection points: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"-", "2"}], ",", RowBox[{"-", "7"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"-", "8"}], TraditionalForm]]], ". From ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{ RowBox[{"4", "x"}], "+", "1"}]}], TraditionalForm]]], " we find the solutions ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"9", ",", "4"}], ")"}], ",", RowBox[{"(", RowBox[{"4", ",", "6"}], ")"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"3", ",", "2"}], ")"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"x", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"-", "2"}], ",", RowBox[{"-", "7"}], ",", RowBox[{"-", "8"}]}], "}"}], ",", "p"}], "]"}]}], "\n", RowBox[{"y", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"4", "*", "x"}], "+", "1"}], ",", "p"}], "]"}]}]}], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"9", ",", "4", ",", "3"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"4", ",", "6", ",", "2"}], "}"}]], "Output"], Cell[CellGroupData[{ Cell["A Line Through Two Distinct Points", "Subsubsection", TextAlignment->Left, TextJustification->0, CellTags->"SubsubsEllip two points"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "2"], "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "2"], ",", SubscriptBox["y", "2"]}], ")"}]}], TraditionalForm]]], " be two distinct points on an elliptic curve \[ScriptCapitalE] (both not at \ infinity). Let \[ScriptCapitalL] be the line through ", Cell[BoxData[ FormBox[ SubscriptBox["P", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "2"], TraditionalForm]]], ". How do we find the third point on the intersection of \[ScriptCapitalL] \ with \[ScriptCapitalE]? If ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "1"], "=", SubscriptBox["x", "2"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "1"], "=", RowBox[{"-", SubscriptBox["y", "2"]}]}], TraditionalForm]]], " the point ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " will be defined as this third point.\nSo, let us consider the case that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "1"], "\[NotEqual]", SubscriptBox["x", "2"]}], TraditionalForm]]], ". The line \[ScriptCapitalL] though ", Cell[BoxData[ FormBox[ SubscriptBox["P", "1"], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "2"], TraditionalForm]]], " is given by: " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"y", "-", SubscriptBox["y", "1"]}], "=", RowBox[{"\[Lambda]", "(", RowBox[{"x", "-", SubscriptBox["x", "1"]}], ")"}]}], TraditionalForm]]], ",\twith \[Lambda]=", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{ SubscriptBox["y", "2"], "-", SubscriptBox["y", "1"]}], RowBox[{ SubscriptBox["x", "2"], "-", SubscriptBox["x", "1"]}]], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip lambda"], Cell["We discuss two cases.", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"p", "\[NotEqual]", "2"}], TraditionalForm]], FontWeight->"Bold"], "\n", "Assume that the elliptic curve is already in reduced form (see ", ButtonBox["(10.2)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Red Weier"], "). Substitution of (10.6) into this relation yields ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ FormBox[ RowBox[{"\[Lambda]", "(", RowBox[{"x", "-", SubscriptBox["x", "1"]}], ")"}], TraditionalForm], "+", SubscriptBox["y", "1"]}], ")"}], "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", ".", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", ".", "x"}], "+", "c"}]}], TraditionalForm]]], ". Since we know two roots of this third degree equation, there must be a \ third one (to be called ", Cell[BoxData[ FormBox[ SubscriptBox["x", "3"], TraditionalForm]]], "). So, the same equation can also be written as ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "-", SubscriptBox["x", "1"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SubscriptBox["x", "2"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SubscriptBox["x", "3"]}], ")"}]}], "=", "0"}], TraditionalForm]]], ". Comparing the coefficient of ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]]], " in both notations, we get" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "3"], "=", RowBox[{ SuperscriptBox["\[Lambda]", "2"], "-", "a", "-", SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellTags->"FormEllip x3 p>2"], Cell["and, by (10.6),", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "3"], "=", RowBox[{ RowBox[{"\[Lambda]", "(", RowBox[{ SubscriptBox["x", "3"], "-", SubscriptBox["x", "1"]}], ")"}], "+", SubscriptBox["y", "1"]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip y3 p>2"], 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 elliptic curve", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"11", SuperscriptBox["x", "2"]}], "+", RowBox[{"17", "x"}], "+", "25"}]}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "31"], TraditionalForm]]], ". The points ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], "=", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}], "=", RowBox[{"(", RowBox[{"2", ",", "7"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "2"], "=", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["x", "2"], ",", SubscriptBox["y", "2"]}], ")"}], "=", RowBox[{"(", RowBox[{"23", ",", "9"}], ")"}]}]}], TraditionalForm]]], " lie on \[ScriptCapitalE] as can be verified with the ", StyleBox["Mod", FontVariations->{"Underline"->True}], " function as follows:" }], "Example", CellChangeTimes->{3.4233961876369066`*^9}], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "31"}], ";", RowBox[{"a", "=", "11"}], ";", RowBox[{"b", "=", "17"}], ";", RowBox[{"c", "=", "25"}], ";", RowBox[{"x1", "=", "2"}], ";", RowBox[{"y1", "=", "7"}], ";", RowBox[{"x2", "=", "23"}], ";", RowBox[{"y2", "=", "9"}], ";", RowBox[{ RowBox[{"F", "[", RowBox[{"x_", ",", "y_"}], "]"}], ":=", RowBox[{ SuperscriptBox["y", "2"], "-", RowBox[{"(", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", "*", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", "*", "x"}], "+", "c"}], ")"}]}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"F", "[", RowBox[{"x1", ",", "y1"}], "]"}], ",", "p"}], "]"}], "==", "0"}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"F", "[", RowBox[{"x2", ",", "y2"}], "]"}], ",", "p"}], "]"}], "==", "0"}]}], "Input", CellChangeTimes->{3.4234710332915335`*^9}], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"], Cell[TextData[{ "The slope \[Lambda] of the line \[ScriptCapitalL] through ", Cell[BoxData[ FormBox[ SubscriptBox["P", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "2"], TraditionalForm]]], " is given by ", ButtonBox["(10.6)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip lambda"], ": ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "=", RowBox[{ FractionBox[ RowBox[{"9", "-", "7"}], RowBox[{"23", "-", "2"}]], "=", RowBox[{ RowBox[{"2", "\[Times]", "3"}], "=", "6"}]}]}], TraditionalForm]]], ". Here we use the ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " function to get the multiplicative inverse of 21 modulo 31." }], "Text", CellChangeTimes->{{3.4234608095043745`*^9, 3.4234608106293817`*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"21", ",", RowBox[{"-", "1"}], ",", "p"}], "]"}]], "Input"], Cell[BoxData["3"], "Output"], Cell[TextData[{ "The coordinates ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["x", "3"], ",", SubscriptBox["y", "3"]}], ")"}], TraditionalForm]]], " of the third intersection point of \[ScriptCapitalL] with \ \[ScriptCapitalE] are given by ", ButtonBox["(10.7)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip x3 p>2"], " and ", ButtonBox["(10.8)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip y3 p>2"], ":" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"lam", "=", "6"}], ";"}], "\n", RowBox[{"x3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["lam", "2"], "-", "a", "-", "x1", "-", "x2"}], ",", "p"}], "]"}]}], "\n", RowBox[{"y3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"lam", RowBox[{"(", RowBox[{"x3", "-", "x1"}], ")"}]}], "+", "y1"}], ",", "p"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["0"], "Output"], Cell[BoxData["26"], "Output"], Cell[TextData[{ "That the point ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "3"], "=", RowBox[{"(", RowBox[{"0", ",", "26"}], ")"}]}], TraditionalForm]]], " indeed lies on \[ScriptCapitalE] can be verified with the calculation" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"F", "[", RowBox[{"x3", ",", "y3"}], "]"}], ",", "p"}], "]"}], "==", "0"}]], "Input"], Cell[BoxData["True"], "Output"], Cell[TextData[{ StyleBox["p=2", FontWeight->"Bold", FontSlant->"Italic"], "\nWe now assume reduced form ", ButtonBox["(10.4)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weier Red p=2"], ". As above, we substitute ", ButtonBox["(10.6)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip lambda"], " into (10.4) and look at the coefficient of ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]]], ". We get " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "3"], "=", RowBox[{"a", "-", SuperscriptBox["\[Lambda]", "2"], "-", "\[Lambda]", "-", SubscriptBox["x", "1"], "-", SubscriptBox["x", "2"]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellTags->"FormEllip x3 p=2"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "3"], "=", RowBox[{ RowBox[{"\[Lambda]", "(", RowBox[{ SubscriptBox["x", "3"], "-", SubscriptBox["x", "1"]}], ")"}], "+", SubscriptBox["y", "1"]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip y3 p=2"], Cell[TextData[{ "Note that all minus signs can be replaced by plus signs, when ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]]], "." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["A Tangent Line", "Subsubsection", TextAlignment->Left, TextJustification->0, CellTags->"SubsubsEllip tangent"], Cell[TextData[{ "There is one more possibility that we want to discuss, namely that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], "=", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}], "=", SubscriptBox["P", "2"]}]}], TraditionalForm]]], ". Let \[ScriptCapitalL] be the ", StyleBox["tangent line", FontSlant->"Italic"], " to \[ScriptCapitalE] though ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ". This means that \[ScriptCapitalL] meets \[ScriptCapitalE] in ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}]}], TraditionalForm]]], ", and that the slope of \[ScriptCapitalL] is the same as the derivative of \ \[ScriptCapitalE] in ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ". One usually views ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " as point of intersection with multiplicity two. " }], "Text", CellTags->"DefEllip tangent"], Cell["\<\ Over \[DoubleStruckCapitalR] this situation looks like:\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContourPlot", "[", " ", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "==", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", "x"}], "-", "3"}]}], ",", " ", RowBox[{"{", RowBox[{"x", ",", " ", RowBox[{"-", "3"}], ",", " ", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"y", ",", RowBox[{"-", "4"}], ",", "4"}], "}"}], ",", RowBox[{"Frame", "\[Rule]", "False"}], ",", RowBox[{"Axes", "\[Rule]", "True"}], ",", RowBox[{"Epilog", "->", " ", RowBox[{"Line", "[", " ", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"-", "3"}], ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", RowBox[{"-", "4"}]}], "}"}]}], "}"}], "]"}]}]}], "]"}]], "Input", CellChangeTimes->{{3.4215740431438007`*^9, 3.4215740822844257`*^9}}], Cell[BoxData[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 7xscP1/Q+0g7uY+A8n30v4s6HmE= "], {{}, {}, {Hue[0.67, 0.6, 0.6], TagBox[ TooltipBox[ LineBox[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99}], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ RowBox[{"-", "3"}], "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == -3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ], TagBox[ TooltipBox[ LineBox[{100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269}], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ RowBox[{"-", "3"}], "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == -3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ]}}], AspectRatio->1, Axes->True, Epilog->LineBox[{{-3, 3}, {4, -4}}], PlotRange->{{-3, 4}, {-4, 4}}, PlotRangeClipping->True, PlotRangePadding->{ Scaled[0.02], Scaled[0.02]}]], "Output", CellChangeTimes->{{3.4215740755969257`*^9, 3.4215740830031757`*^9}}] }, Open ]], Cell["\<\ At this moment we exclude the possibility that \[ScriptCapitalL] is a double \ tangent line to \[ScriptCapitalE] (meaning that its multiplicity is 3). If it \ were, the tangent line already intersects \[ScriptCapitalE] in a point with \ multiplicity 3.\ \>", "Text"], Cell[TextData[{ "In the sequel, when we speak of taking a ", StyleBox["derivative", FontSlant->"Italic"], " of a polynomial over a finite field we mean to take the formal derivative \ and then reduce the coefficients modulo the characteristic of the field. \n\ For instance, in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["3", "m"], ")"}], TraditionalForm]]], " the derivative of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "4"], "+", RowBox[{"2", SuperscriptBox["x", "3"]}], "+", SuperscriptBox["x", "2"], "+", "1"}], TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"4", SuperscriptBox["x", "3"]}], "+", RowBox[{"6", SuperscriptBox["x", "2"]}], "+", RowBox[{"2", "x"}]}], TraditionalForm]]], ", which reduces to ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"2", "x"}]}], TraditionalForm]]], ". " }], "Text", CellTags->"DefEllip derivative"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"p", "\[NotEqual]", "2"}], TraditionalForm]], FontWeight->"Bold"], "\nThe slope of the tangent line through a point ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}]}], TraditionalForm]]], " on the curve ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", "a"}]}], TraditionalForm], ".", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", ".", "x"}], "+", "c"}], TraditionalForm]]], " (see ", ButtonBox["(10.2)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Red Weier"], ") is given by the value of ", Cell[BoxData[ FormBox[ RowBox[{"y", "'"}], TraditionalForm]]], " determined through implicit differentiation, so ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", RowBox[{ SubscriptBox["y", "1"], ".", RowBox[{"y", "'"}]}]}], "=", RowBox[{ RowBox[{"3", SubsuperscriptBox["x", "1", "2"]}], "+", RowBox[{"2", RowBox[{"a", ".", SubscriptBox["x", "1"]}]}], "+", "b"}]}], TraditionalForm]]], ". We conclude that the tangent line through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " is given by" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"y", "-", SubscriptBox["y", "1"]}], "=", RowBox[{"\[Lambda]", "(", RowBox[{"x", "-", SubscriptBox["x", "1"]}], ")"}]}], TraditionalForm]]], ",\twith \[Lambda]=", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{ RowBox[{"3", SubsuperscriptBox["x", "1", "2"]}], "+", RowBox[{"2", RowBox[{"a", ".", SubscriptBox["x", "1"]}]}], "+", "b"}], RowBox[{"2", SubscriptBox["y", "1"]}]], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip lambda tang p>2"], Cell[TextData[{ "To find the third point of the line \[ScriptCapitalL] through \ \[ScriptCapitalE] we can still use ", ButtonBox["(10.7)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip x3 p>2"], " and ", ButtonBox["(10.8)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip y3 p>2"], "." }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]], FontWeight->"Bold"], "\nThe slope of the tangent line through a point ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}]}], TraditionalForm]]], " on the curve ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "+", RowBox[{"x", ".", "y"}]}], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", ".", SuperscriptBox["x", "2"]}], "+", "c"}]}], TraditionalForm]]], " (see ", ButtonBox["(10.4)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weier Red p=2"], ") is given by the value of ", Cell[BoxData[ FormBox[ RowBox[{"y", "'"}], TraditionalForm]]], " determined from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"2", RowBox[{ SubscriptBox["y", "1"], ".", RowBox[{"y", "'"}]}]}], "+", SubscriptBox["y", "1"], "+", RowBox[{ SubscriptBox["x", "1"], ".", RowBox[{"y", "'"}]}]}], "=", RowBox[{ RowBox[{"3", SubsuperscriptBox["x", "1", "2"]}], "+", RowBox[{"2", RowBox[{"a", ".", SubscriptBox["x", "1"]}]}]}]}], TraditionalForm]]], ", i.e. by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["y", "1"], "+", RowBox[{ SubscriptBox["x", "1"], ".", RowBox[{"y", "'"}]}]}], "=", SubsuperscriptBox["x", "1", "2"]}], TraditionalForm]]], ". Hence, the tangent line through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " is given by" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"y", "-", SubscriptBox["y", "1"]}], "=", RowBox[{"\[Lambda]", "(", RowBox[{"x", "-", SubscriptBox["x", "1"]}], ")"}]}], TraditionalForm]]], ",\twith \[Lambda]=", Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{ SubsuperscriptBox["x", "1", "2"], "+", SubscriptBox["y", "1"]}], SubscriptBox["x", "1"]], "=", RowBox[{ SubscriptBox["x", "1"], "+", FractionBox[ SubscriptBox["y", "1"], SubscriptBox["x", "1"]]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip lambda tang p=2"], Cell[TextData[{ "To find the third point on \[ScriptCapitalL] through \[ScriptCapitalE] we \ observe that ", ButtonBox["(10.9)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip x3 p=2"], " (take ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "2"], "=", SubscriptBox["x", "1"]}], TraditionalForm]]], ") reduces to" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "3"], "="}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "-", SuperscriptBox["\[Lambda]", "2"], "-", "\[Lambda]"}], "=", RowBox[{"a", "+", SubsuperscriptBox["x", "1", "2"], "+", SuperscriptBox[ RowBox[{"(", FractionBox[ SubscriptBox["y", "1"], SubscriptBox["x", "1"]], ")"}], "2"], "+", SubscriptBox["x", "1"], "+", FractionBox[ SubscriptBox["y", "1"], SubscriptBox["x", "1"]]}]}], TraditionalForm]]], " =\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"a", "+", SubsuperscriptBox["x", "1", "2"], "+", SubscriptBox["x", "1"], "+", FractionBox[ RowBox[{ SubsuperscriptBox["y", "1", "2"], "+", RowBox[{ SubscriptBox["x", "1"], SubscriptBox["y", "1"]}]}], SubsuperscriptBox["x", "1", "2"]]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ OverscriptBox["=", ButtonBox[ RowBox[{"(", "10.4", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weier Red p=2"]], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"a", "+", SubsuperscriptBox["x", "1", "2"], "+", SubscriptBox["x", "1"], "+", FractionBox[ RowBox[{ SubsuperscriptBox["x", "1", "3"], "+", RowBox[{"a", ".", SubsuperscriptBox["x", "1", "2"]}], "+", "c"}], SubsuperscriptBox["x", "1", "2"]]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell["i.e.", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "3"], "=", RowBox[{ SubsuperscriptBox["x", "1", "2"], "+", FractionBox["c", SubsuperscriptBox["x", "1", "2"]]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellTags->"FormEllip 2x1 p=2"], Cell[TextData[{ "and that ", ButtonBox["(10.10)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip y3 p=2"], " reduces to" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "3"], "=", RowBox[{ SubsuperscriptBox["x", "1", "2"], "+", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], "+", FractionBox[ SubscriptBox["y", "1"], SubscriptBox["x", "1"]]}], ")"}], SubscriptBox["x", "3"]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormEllip 2y1 p=2"], 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 elliptic curve ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "+", RowBox[{"x", ".", "y"}]}], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{ SuperscriptBox["\[Alpha]", "9"], SuperscriptBox["x", "2"]}], "+", "\[Alpha]"}]}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "16", ")"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "4"], "=", RowBox[{"\[Alpha]", "+", "1"}]}], TraditionalForm]]], ". The point ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["\[Alpha]", "2"], ",", SuperscriptBox["\[Alpha]", "12"]}], ")"}], TraditionalForm]]], " lies on this curve, as can be easily checked, once we have loaded the ", StyleBox["Mathematica", FontSlant->"Italic"], " package ", StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.4234548917369876`*^9, 3.423454894002598*^9}}], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input", GeneratedCell->True], Cell[BoxData[{ RowBox[{ RowBox[{"f16", "=", RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"a", "=", RowBox[{"f16", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], "}"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"EC", "[", RowBox[{"x_", ",", "y_"}], "]"}], "=", RowBox[{ SuperscriptBox["y", "2"], "+", RowBox[{"x", "*", "y"}], "-", SuperscriptBox["x", "3"], "-", RowBox[{ SuperscriptBox["a", "9"], "*", SuperscriptBox["x", "2"]}], "-", "a"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x1", ",", "y1"}], "}"}], "=", RowBox[{"{", RowBox[{ SuperscriptBox["a", "2"], ",", SuperscriptBox["a", "12"]}], "}"}]}], ";"}], "\n", RowBox[{"EC", "[", RowBox[{"x1", ",", "y1"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["0"], "Output"], Cell[TextData[{ "The tangent through ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["\[Alpha]", "2"], ",", SuperscriptBox["\[Alpha]", "12"]}], ")"}], TraditionalForm]]], " has slope \[Lambda] given by ", ButtonBox["(10.12)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip lambda tang p=2"], ". So," }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"lam", "=", RowBox[{"x1", "+", RowBox[{"y1", "/", "x1"}]}]}]], "Input"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0}[2]], Editable->False]], "Output"], Cell[TextData[{ "which is ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "4"], TraditionalForm]]], ". To find the other point where the tangent intersects \[ScriptCapitalE], \ we use ", ButtonBox["(10.13)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip 2x1 p=2"], " and ", ButtonBox["(10.14)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip 2y1 p=2"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"x3", "=", RowBox[{ SuperscriptBox["x1", "2"], "+", RowBox[{"a", "/", SuperscriptBox["x1", "2"]}]}]}], "\n", RowBox[{"y3", "=", RowBox[{ SuperscriptBox["x1", "2"], "+", RowBox[{ RowBox[{"(", RowBox[{"x1", "+", RowBox[{"y1", "/", "x1"}]}], ")"}], "x3"}]}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 1, 1}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 0, 1, 0}[2]], Editable->False]], "Output"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["x", "3"], ",", SubscriptBox["y", "3"]}], ")"}], "=", RowBox[{"(", RowBox[{ SuperscriptBox["\[Alpha]", "6"], ",", SuperscriptBox["\[Alpha]", "2"]}], ")"}]}], TraditionalForm]]], ". This can all be checked easily. " }], "Text", FontSlant->"Italic"], Cell[BoxData[{ SuperscriptBox["a", "6"], "\n", SuperscriptBox["a", "2"], "\n", RowBox[{"EC", "[", RowBox[{"x3", ",", "y3"}], "]"}]}], "Input"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 1, 1}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 0, 1, 0}[2]], Editable->False]], "Output"], Cell[BoxData["0"], "Output"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tAddition of Points on Elliptic Curves" }], "Section", CellTags->"SectEllip Addition"], Cell[TextData[{ "In the previous section, we have shown how the line through two points on \ an ", ButtonBox["elliptic curve", BaseStyle->"Hyperlink", ButtonData:>"DefEllip elliptic curve"], " \[ScriptCapitalE] intersects that curve in a third point and how that \ point can be computed efficiently. The same holds for a line that is ", ButtonBox["tangent", BaseStyle->"Hyperlink", ButtonData:>"DefEllip tangent"], " to \[ScriptCapitalE], with the understanding that the tangent point is \ counted twice.\nWe are now ready to define an addition on \[ScriptCapitalE]. \ The geometric idea behind the formulas below is the following. First of all, \ if ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"(", RowBox[{"x", ",", "y"}], ")"}]}], TraditionalForm]]], " is a point on an elliptic curve \[ScriptCapitalE] determined by ", ButtonBox["(10.1)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], ", then" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"-", "P"}], "=", RowBox[{"(", RowBox[{"x", ",", RowBox[{ RowBox[{"-", "y"}], "-", RowBox[{"u", ".", "x"}], "-", "v"}]}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"v", "=", "0"}]}], TraditionalForm]]], ", like in ", ButtonBox["(10.2)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Red Weier"], ", this reduces to " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"-", "P"}], "=", RowBox[{"(", RowBox[{"x", ",", RowBox[{"-", "y"}]}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Geometrically, this can be described as follows: compute the line \ \[ScriptCapitalL] through ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ". It intersects \[ScriptCapitalE] in a third point, namely ", Cell[BoxData[ FormBox[ RowBox[{"-", "P"}], TraditionalForm]]], ". As noted before, the point ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " at infinity should be interpreted as the intersection point of all \ vertical lines." }], "Text"], Cell[TextData[{ "To add points ", Cell[BoxData[ FormBox[ SubscriptBox["P", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "2"], TraditionalForm]]], ", both not at infinity, execute the following two steps:" }], "Text"], Cell[TextData[{ "1) Compute the line \[ScriptCapitalL] through ", Cell[BoxData[ FormBox[ SubscriptBox["P", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "2"], TraditionalForm]]], " (or tangent line though ", Cell[BoxData[ FormBox[ SubscriptBox["P", "1"], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], "=", SubscriptBox["P", "2"]}], TraditionalForm]]], ") and find the third point of intersection with \[ScriptCapitalE]. Let this \ be ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "2) The sum ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], "+", SubscriptBox["P", "2"]}], TraditionalForm]]], " is defined as ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "3"], ":=", RowBox[{"-", "Q"}]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "The point ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " serves as ", ButtonBox["unit element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB unit element"], " of this addition and is its own inverse." }], "Text", GeneratedCell->True], 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["addition", FontWeight->"Bold", FontSlant->"Italic"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " be a point on an elliptic curve \[ScriptCapitalE] (so, it defined by ", ButtonBox["(10.1)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], "), with ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " as point at infinity. Then we define the sums\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"P", "+", "O"}], "=", RowBox[{ RowBox[{"O", "+", "P"}], "=", "P"}]}], TraditionalForm]]], ".\n\t\t\nFurther, let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "2"], "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "2"], ",", SubscriptBox["y", "2"]}], ")"}]}], TraditionalForm]]], " be two points on \[ScriptCapitalE], both not ", Cell[BoxData[ FormBox["O", TraditionalForm]]], ". Then the ", StyleBox["sum", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], "+", SubscriptBox["P", "2"]}], TraditionalForm]]], " is defined by \n\ni) ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "3"], "=", RowBox[{"-", "Q"}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"if", " ", SubscriptBox["x", "1"]}], "\[NotEqual]", SubscriptBox["x", "2"]}], TraditionalForm]]], ".\n\t\t\tHere, ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " is the third point of intersection of \[ScriptCapitalE] with of the line \ \[ScriptCapitalL] \n\t\t\tthrough ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["y", "1"]}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["x", "2"], ",", SubscriptBox["y", "2"]}], ")"}], TraditionalForm]]], ".\n\t\t\t\nii) ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "3"], "=", RowBox[{"-", "Q"}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"if", " ", SubscriptBox["P", "1"]}], "=", SubscriptBox["P", "2"]}], TraditionalForm]]], " and the tangent line through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " is a single tangent.\n\t\t\tHere, ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " is the third point of intersection of \[ScriptCapitalE] with the tangent \ \[ScriptCapitalL] \n\t\t\tthrough ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ".\n\t\t\t\niii) ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "3"], "=", RowBox[{"-", SubscriptBox["P", "1"]}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"if", " ", SubscriptBox["P", "1"]}], "=", SubscriptBox["P", "2"]}], TraditionalForm]]], " and the tangent line through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " is a double tangent.\n\niv) ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "3"], "=", "O"}], TraditionalForm]]], "\t\tif ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], "=", RowBox[{"-", SubscriptBox["P", "2"]}]}], TraditionalForm]]], "." }], "Definition", TextJustification->1, CellTags->"DefEllip Addition"], Cell["\<\ Note that possibility iii) can be interpreted as a special case of ii).\ \>", "Text"], Cell[TextData[{ "We shall depict the two most typical cases, namely i) and ii), by means of \ elliptic curves over the reals (we use again the ", StyleBox["ContourPlot", FontVariations->{"Underline"->True}], " function). " }], "Text", CellChangeTimes->{ 3.4214691791693597`*^9, {3.423471099776334*^9, 3.423471116479566*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContourPlot", "[", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", " ", "x"}], "+", "3"}]}], ",", RowBox[{"{", RowBox[{"x", ",", RowBox[{"-", "3"}], ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"y", ",", RowBox[{"-", "6"}], ",", "6"}], "}"}], ",", RowBox[{"Frame", "\[Rule]", "False"}], ",", RowBox[{"Axes", "\[Rule]", "True"}], ",", RowBox[{"Epilog", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"Line", "[", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"-", "3"}], ",", RowBox[{"-", "2"}]}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "5"}], "}"}]}], "}"}], "]"}], ",", RowBox[{"Line", "[", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", RowBox[{"-", "6"}]}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "6"}], "}"}]}], "}"}], "]"}], ",", RowBox[{"Text", "[", RowBox[{ RowBox[{"Style", "[", RowBox[{"\"\\"", ",", RowBox[{"FontColor", "\[Rule]", RowBox[{"RGBColor", "[", RowBox[{"0", ",", "0", ",", "1"}], "]"}]}]}], "]"}], ",", RowBox[{"{", RowBox[{"2.3`", ",", RowBox[{"-", "4"}]}], "}"}]}], "]"}], ",", RowBox[{"Text", "[", RowBox[{ RowBox[{"Style", "[", RowBox[{"\"\\"", ",", RowBox[{"FontColor", "\[Rule]", RowBox[{"RGBColor", "[", RowBox[{"0", ",", "0", ",", "1"}], "]"}]}]}], "]"}], ",", RowBox[{"{", RowBox[{ RowBox[{"-", "2.4`"}], ",", RowBox[{"-", "2.1`"}]}], "}"}]}], "]"}], ",", RowBox[{"Text", "[", RowBox[{ RowBox[{"Style", "[", RowBox[{"\"\\"", ",", RowBox[{"FontColor", "\[Rule]", RowBox[{"RGBColor", "[", RowBox[{"0", ",", "0", ",", "1"}], "]"}]}]}], "]"}], ",", RowBox[{"{", RowBox[{"0.35`", ",", "1.9`"}], "}"}]}], "]"}], ",", RowBox[{"Text", "[", RowBox[{"\"\<\[FilledSmallCircle]\>\"", ",", RowBox[{"{", RowBox[{ RowBox[{"-", "2.31`"}], ",", RowBox[{"-", "1.4`"}]}], "}"}]}], "]"}], ",", RowBox[{"Text", "[", RowBox[{"\"\<\[FilledSmallCircle]\>\"", ",", RowBox[{"{", RowBox[{"0.28`", ",", "1.26`"}], "}"}]}], "]"}], ",", RowBox[{"Text", "[", RowBox[{"\"\<\[FilledSmallCircle]\>\"", ",", RowBox[{"{", RowBox[{"3.01`", ",", RowBox[{"-", "3.9`"}]}], "}"}]}], "]"}]}], "}"}]}]}], "]"}]], "Input", CellChangeTimes->{{3.4214691555599847`*^9, 3.4214691875131097`*^9}, { 3.4215741419563007`*^9, 3.4215741481750507`*^9}}], Cell[BoxData[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 "], {{}, {}, {Hue[0.67, 0.6, 0.6], TagBox[ TooltipBox[ LineBox[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130}], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{"3", "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == 3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ], TagBox[ TooltipBox[LineBox[CompressedData[" 1:eJwl0/efDwQcBvDvyZaRFRGOZO+ZsrcIZ2/OzqYo2XfH3dlbVvbee2+yV8ne e2SnQvH28sP7+fwBz/MJDu0S0jkoEAjEF2FuOBEMZgiRRBHNUIYxnBGMZBSj GcNYxjGeCUxkEj8zmSlMZRrT+YUZzGQWs5nDXOYxnwUsZBGLWcJSlrGcFaxk FatZw1rWsZ4NbGQTm9nCVraxnR3sZBe72cNe9vEr+znAQQ5xmCMc5RjHOcFJ fuN3TvEHpznDWc5xngtc5BKXucJVrnGdG9zkFre5w13ucZ8H/MlDHvGYJzzl Gc/5ixf8zT/8y0te8Zr/+J83BPQeRAw+ICaxiE0c4hIv6P0+EvAhCUlEYpLw EUlJRnJSkJKPSUVqPiENafmUdKQnA8FkJBOfkZnPyUJWspGdHOQkF7nJQ17y kZ8CFKQQhSlCUb6gGF/yFcUpQUlKUZoylKUc5alARSpRmSp8TVWq8Q3VqUFN QqhFbepQl3rUpwENaURjmtCUZjSnBaG0pBWtaUNb2tGeb+lARzrx7mm70JVu dKcH3/E9PenFD/xIb36iD33pR38GMJBBhBFOBIMZQiRRRDOUYbwF+lWHFw== "]], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{"3", "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == 3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ]}}], AspectRatio->1, Axes->True, Epilog->{ LineBox[{{-3, -2}, {4, 5}}], LineBox[{{3, -6}, {3, 6}}], InsetBox[ FormBox[ StyleBox[ "\"P+Q\"", FontColor -> RGBColor[0, 0, 1], StripOnInput -> False], TraditionalForm], {2.3, -4}], InsetBox[ FormBox[ StyleBox[ "\"P\"", FontColor -> RGBColor[0, 0, 1], StripOnInput -> False], TraditionalForm], {-2.4, -2.1}], InsetBox[ FormBox[ StyleBox[ "\"Q\"", FontColor -> RGBColor[0, 0, 1], StripOnInput -> False], TraditionalForm], {0.35, 1.9}], InsetBox[ FormBox["\"\[FilledSmallCircle]\"", TraditionalForm], {-2.31, -1.4}], InsetBox[ FormBox["\"\[FilledSmallCircle]\"", TraditionalForm], {0.28, 1.26}], InsetBox[ FormBox["\"\[FilledSmallCircle]\"", TraditionalForm], {3.01, -3.9}]}, PlotRange->{{-3, 4}, {-6, 6}}, PlotRangeClipping->True, PlotRangePadding->{ Scaled[0.02], Scaled[0.02]}]], "Output", CellChangeTimes->{3.4214691881849847`*^9, 3.4215741492531757`*^9}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 nPnrr3PX2Z7LEwDSF/5IXei5pyS55v8BulhPHw==\ \>"]] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContourPlot", "[", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ SuperscriptBox["x", "3"], "-", RowBox[{"5", " ", "x"}], "-", "3"}]}], ",", RowBox[{"{", RowBox[{"x", ",", RowBox[{"-", "3"}], ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"y", ",", RowBox[{"-", "6"}], ",", "6"}], "}"}], ",", RowBox[{"Frame", "\[Rule]", "False"}], ",", RowBox[{"Axes", "\[Rule]", "True"}], ",", RowBox[{"Epilog", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"Line", "[", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", RowBox[{"-", "6"}]}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "6"}], "}"}]}], "}"}], "]"}], ",", RowBox[{"Line", "[", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"-", "3"}], ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", RowBox[{"-", "4"}]}], "}"}]}], "}"}], "]"}], ",", RowBox[{"Text", "[", RowBox[{ RowBox[{"Style", "[", RowBox[{"\"\\"", ",", RowBox[{"FontColor", "\[Rule]", RowBox[{"RGBColor", "[", RowBox[{"0", ",", "0", ",", "1"}], "]"}]}]}], "]"}], ",", RowBox[{"{", RowBox[{ RowBox[{"-", "1.1`"}], ",", "1.65`"}], "}"}]}], "]"}], ",", RowBox[{"Text", "[", RowBox[{ RowBox[{"Style", "[", RowBox[{"\"\<2P\>\"", ",", RowBox[{"FontColor", "\[Rule]", RowBox[{"RGBColor", "[", RowBox[{"0", ",", "0", ",", "1"}], "]"}]}]}], "]"}], ",", RowBox[{"{", RowBox[{"2.8`", ",", "3.5`"}], "}"}]}], "]"}], ",", RowBox[{"Text", "[", RowBox[{"\"\<\[FilledSmallCircle]\>\"", ",", RowBox[{"{", RowBox[{ RowBox[{"-", "1.1`"}], ",", "1.1`"}], "}"}]}], "]"}], ",", RowBox[{"Text", "[", RowBox[{"\"\<\[FilledSmallCircle]\>\"", ",", RowBox[{"{", RowBox[{"3.01`", ",", RowBox[{"+", "3"}]}], "}"}]}], "]"}]}], "}"}]}]}], "]"}]], "Input", CellChangeTimes->{{3.4215740971594257`*^9, 3.4215741272375507`*^9}}], Cell[BoxData[ GraphicsBox[GraphicsComplexBox[CompressedData[" 1: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 /tL9//t/9F9mRm6U "], {{}, {}, {Hue[0.67, 0.6, 0.6], TagBox[ TooltipBox[ LineBox[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108}], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ RowBox[{"-", "3"}], "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == -3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ], TagBox[ TooltipBox[ LineBox[{109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}], RowBox[{ SuperscriptBox["y", "2"], "\[Equal]", RowBox[{ RowBox[{"-", "3"}], "-", RowBox[{"5", " ", "x"}], "+", SuperscriptBox["x", "3"]}]}]], Annotation[#, $CellContext`y^2 == -3 - 5 $CellContext`x + $CellContext`x^3, "Tooltip"]& ]}}], AspectRatio->1, Axes->True, Epilog->{ LineBox[{{3, -6}, {3, 6}}], LineBox[{{-3, 3}, {4, -4}}], InsetBox[ FormBox[ StyleBox[ "\"P\"", FontColor -> RGBColor[0, 0, 1], StripOnInput -> False], TraditionalForm], {-1.1, 1.65}], InsetBox[ FormBox[ StyleBox[ "\"2P\"", FontColor -> RGBColor[0, 0, 1], StripOnInput -> False], TraditionalForm], {2.8, 3.5}], InsetBox[ FormBox["\"\[FilledSmallCircle]\"", TraditionalForm], {-1.1, 1.1}], InsetBox[ FormBox["\"\[FilledSmallCircle]\"", TraditionalForm], {3.01, 3}]}, PlotRange->{{-3, 4}, {-6, 6}}, PlotRangeClipping->True, PlotRangePadding->{ Scaled[0.02], Scaled[0.02]}]], "Output", CellChangeTimes->{3.4215741279719257`*^9}] }, Open ]], Cell[TextData[{ "The points on an elliptic curve together with the addition defined above \ form an ", ButtonBox["additive", BaseStyle->"Hyperlink", ButtonData:>"DefAppB additive group"], " ", ButtonBox["group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], ". We shall not prove that here. The reader is referred to ", ButtonBox["[Mene93]", BaseStyle->"Hyperlink", ButtonData:>"RefMene98"], " or ", ButtonBox["[SilT92]", BaseStyle->"Hyperlink", ButtonData:>"RefSilT92"], ". Note that the only non-trivial part to verify is the ", ButtonBox["associativity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], " of the addition. " }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe points on an elliptic curve \[ScriptCapitalE] together with the \ addition defined in ", ButtonBox["Definition 10.2", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Addition"], " form an additive group. The zero element is given by ", Cell[BoxData[ FormBox["O", TraditionalForm]]], "." }], "Theorem", CellTags->"TheoEllip Additive Group"], Cell[TextData[{ "With the following ", ButtonBox["Module", BaseStyle->"MainBookLink"], " one can compute the sum of two points (the point ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " at infinity will be denoted by ", Cell[BoxData[ FormBox[ RowBox[{"{", "O", "}"}], TraditionalForm]]], ") on an elliptic curve over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " with characteristic ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "2"}], TraditionalForm]]], ". We make use of formulas ", ButtonBox["(10.6)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip lambda"], ", ", ButtonBox["(10.7)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip x3 p>2"], ", ", ButtonBox["(10.8)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip y3 p>2"], " and ", ButtonBox["(10.11)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip lambda tang p>2"], ". and use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Which", FontVariations->{"Underline"->True}], " with the same order of cases as in ", ButtonBox["Definition 10.2", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Addition"], "." }], "Text", CellChangeTimes->{{3.423456191779834*^9, 3.423456193061149*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"EllipticAdd", "[", RowBox[{ "p_", ",", "a_", ",", "b_", ",", "c_", ",", "P_List", ",", "Q_List"}], "]"}], ":=", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"lam", ",", "x3", ",", "y3", ",", "P3"}], "}"}], ",", "\n", " ", RowBox[{"Which", "[", "\[IndentingNewLine]", RowBox[{ StyleBox[ RowBox[{"P", "==", RowBox[{"{", "O", "}"}]}], FontColor->RGBColor[0, 0, 1]], ",", StyleBox["Q", FontFamily->"Courier", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], ",", "\[IndentingNewLine]", StyleBox[ RowBox[{"Q", "==", RowBox[{"{", "O", "}"}]}], FontColor->RGBColor[0, 0, 1]], ",", StyleBox["P", FontFamily->"Courier", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], ",", "\[IndentingNewLine]", StyleBox[ RowBox[{ RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "!=", RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}]}], FontColor->RGBColor[0, 0, 1]], ",", "\n", "\t\t ", RowBox[{ RowBox[{"lam", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Q", "[", RowBox[{"[", "2", "]"}], "]"}], "-", RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}]}], ")"}], RowBox[{"PowerMod", "[", RowBox[{ RowBox[{ RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}], "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}]}], ",", RowBox[{"p", "-", "2"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}]}], ";", "\n", "\t\t ", RowBox[{"x3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["lam", "2"], "-", "a", "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "-", RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}]}], ",", "p"}], "]"}]}], ";", "\n", "\t\t ", RowBox[{"y3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"-", RowBox[{"(", RowBox[{ RowBox[{"lam", RowBox[{"(", RowBox[{"x3", "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}]}], ")"}]}], "+", RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}]}], ")"}]}], ",", "p"}], "]"}]}], ";", "\n", "\t\t ", StyleBox[ RowBox[{"{", RowBox[{"x3", ",", "y3"}], "}"}], FontFamily->"Courier", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]]}], ",", "\[IndentingNewLine]", StyleBox[ RowBox[{ RowBox[{"(", RowBox[{"P", "==", "Q"}], ")"}], "\[And]", RowBox[{"(", RowBox[{ RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}], "==", "0"}], ")"}]}], FontColor->RGBColor[0, 0, 1]], ",", StyleBox[ RowBox[{"{", "O", "}"}], FontFamily->"Courier", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox[",", FontFamily->"Courier", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], "\[IndentingNewLine]", StyleBox[ RowBox[{ RowBox[{"(", RowBox[{"P", "==", "Q"}], ")"}], "\[And]", RowBox[{"(", RowBox[{"P", "!=", RowBox[{"{", "O", "}"}]}], ")"}]}], FontColor->RGBColor[0, 0, 1]], ",", "\n", "\t\t ", RowBox[{ RowBox[{"lam", "=", RowBox[{"Mod", "[", " ", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"3", "*", SuperscriptBox[ RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "2"]}], "+", RowBox[{"2", "a", "*", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}]}], "+", "b"}], ")"}], RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"2", RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}]}], ",", RowBox[{"p", "-", "2"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}]}], ";", "\[IndentingNewLine]", " \t ", RowBox[{"x3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["lam", "2"], "-", "a", "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "-", RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}]}], ",", "p"}], "]"}]}], ";", "\n", "\t\t ", RowBox[{"y3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"-", RowBox[{"(", RowBox[{ RowBox[{"lam", RowBox[{"(", RowBox[{"x3", "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}]}], ")"}]}], "+", RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}]}], ")"}]}], ",", "p"}], "]"}]}], ";", "\n", "\t\t ", StyleBox[ RowBox[{"{", RowBox[{"x3", ",", "y3"}], "}"}], FontFamily->"Courier", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]]}], ",", "\[IndentingNewLine]", StyleBox[ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "==", RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}]}], ")"}], "\[And]", RowBox[{"(", RowBox[{ RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}], "!=", RowBox[{"Q", "[", RowBox[{"[", "2", "]"}], "]"}]}], ")"}]}], FontColor->RGBColor[0, 0, 1]], ",", StyleBox[ RowBox[{"{", "O", "}"}], FontFamily->"Courier", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]]}], "]"}]}], "]"}]}]], "Input", InitializationCell->True, CellTags->"InputEllip addition"], Cell["Below, we show the addition of points in a number of cases.", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "11"}], ";", RowBox[{"a", "=", "0"}], ";", RowBox[{"b", "=", "6"}], ";", RowBox[{"c", "=", "3"}], ";", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"{", RowBox[{"4", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]}], "]"}]}], "\n", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]}], "]"}], "\n", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"{", RowBox[{"4", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "6"}], "}"}]}], "]"}], "\n", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"{", RowBox[{"4", ",", "6"}], "}"}], ",", RowBox[{"{", "O", "}"}]}], "]"}], "\n", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"{", RowBox[{"4", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "5"}], "}"}]}], "]"}], "\n", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"{", "O", "}"}], ",", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"3", ",", "9"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"7", ",", "6"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"4", ",", "5"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"4", ",", "6"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", "O", "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]], "Output"], Cell[TextData[{ "Observe that the tangent through ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"4", ",", "6"}], ")"}], TraditionalForm]]], " is a double tangent, so by ", ButtonBox["Definition 10.2, iii)", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Addition"], " " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"4", ",", "6"}], ")"}], "+", RowBox[{"(", RowBox[{"4", ",", "6"}], ")"}]}], "=", RowBox[{ RowBox[{"-", RowBox[{"(", RowBox[{"4", ",", "6"}], ")"}]}], "=", RowBox[{"(", RowBox[{"4", ",", "5"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "As is common in additive groups, ", Cell[BoxData[ FormBox[ RowBox[{"2", "P"}], TraditionalForm]]], " will stand for ", Cell[BoxData[ FormBox[ RowBox[{"P", "+", "P"}], TraditionalForm]]], ", similarly ", Cell[BoxData[ FormBox[ RowBox[{"3", "P"}], TraditionalForm]]], " stands for ", Cell[BoxData[ FormBox[ RowBox[{"P", "+", "P", "+", "P"}], TraditionalForm]]], ", etc. Similarly, ", Cell[BoxData[ FormBox[ RowBox[{"0", "P"}], TraditionalForm]]], " stands for ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{"n", ".", "P"}]}], TraditionalForm]]], " stands for ", Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{"(", RowBox[{"n", ".", "P"}], ")"}]}], TraditionalForm]]], ". These multiples of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " are often called the ", StyleBox["scalar multiples", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ".\nThe ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " is the smallest positive integer ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", ".", "P"}], "=", "O"}], TraditionalForm]]], ". Since \[ScriptCapitalE] is a finite group, this notion is well defined. \ The set ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"O", ",", "P", ",", RowBox[{"2", "P"}], ",", "\[Ellipsis]", ",", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "P"}]}], "}"}], TraditionalForm]]], " is a ", ButtonBox["cyclic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " ", ButtonBox["subgroup", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subgroup"], " of \[ScriptCapitalE]. It follows that ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalE]", "|"}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ")." }], "Text", GeneratedCell->True, CellTags->"DefEllip order"], Cell[TextData[{ "Now that we have the Module ", StyleBox["EllipticAdd,", FontSlant->"Italic"], " defined above, it is quite easy to compute ", Cell[BoxData[ FormBox[ RowBox[{"n", ".", "P"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[GreaterEqual]", "1"}], TraditionalForm]]], ", recursively as follows:" }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "11"}], ";", RowBox[{"a", "=", "0"}], ";", RowBox[{"b", "=", "6"}], ";", RowBox[{"c", "=", "3"}], ";", RowBox[{"P", "=", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]}], ";", RowBox[{ RowBox[{"f", "[", "1", "]"}], "=", "P"}], ";", RowBox[{ RowBox[{"f", "[", "n_", "]"}], ":=", RowBox[{ RowBox[{"f", "[", "n", "]"}], "=", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", "P", ",", RowBox[{"f", "[", RowBox[{"n", "-", "1"}], "]"}]}], "]"}]}]}], ";", RowBox[{"Column", "[", RowBox[{"Table", "[", RowBox[{ RowBox[{"f", "[", "n", "]"}], ",", RowBox[{"{", RowBox[{"n", ",", "1", ",", "5"}], "}"}]}], "]"}], "]"}]}]], "Input", CellChangeTimes->{{3.423393849903195*^9, 3.4233938551688538`*^9}}], Cell[BoxData[ InterpretationBox[GridBox[{ { RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]}, { RowBox[{"{", RowBox[{"7", ",", "6"}], "}"}]}, { RowBox[{"{", RowBox[{"7", ",", "5"}], "}"}]}, { RowBox[{"{", RowBox[{"9", ",", "7"}], "}"}]}, { RowBox[{"{", "O", "}"}]} }, BaselinePosition->{Baseline, {1, 1}}, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}], ColumnForm[{{9, 4}, {7, 6}, {7, 5}, {9, 7}, {O}}], Editable->False]], "Output"], Cell[TextData[{ "So, on the curve ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"6", "x"}], "+", "3"}]}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "11"], TraditionalForm]]], ", the point ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"(", RowBox[{"9", ",", "4"}], ")"}]}], TraditionalForm]]], " has order 5." }], "Text"], Cell[TextData[{ "In the next section, it will be important to have points available on an \ elliptic curve \[ScriptCapitalE] that have a very large order. If the \ cardinality of \[ScriptCapitalE] is known and of a special form, for instance \ ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalE]", "|"}], TraditionalForm]]], " is a small multiple of a large prime factor, then it is quite easy to find \ points on \[ScriptCapitalE] with a known large order. " }], "Text"], Cell[TextData[{ "As an example, consider ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalE]", "|"}], "=", RowBox[{ RowBox[{"3", "\[Times]", "7919"}], "=", "23757."}], " "}], TraditionalForm]]], "Suppose that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"3", "P"}], "\[NotEqual]", "O"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " has order 7919 or 23757. If ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"7919", "P"}], "=", "0"}], TraditionalForm]]], " then ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " has order 7919, otherwise ", Cell[BoxData[ FormBox[ RowBox[{"3", "P"}], TraditionalForm]]], " will have this order. To check these assertions, apply ", ButtonBox["Lemma B.4", BaseStyle->"Hyperlink", ButtonData:>"LemAppB order a^k"], " and ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], " (rewrite the multiplicative notation in the additive notation that we use \ here). " }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tCryptosystems Defined over Elliptic Curves" }], "Section", CellTags->"SectEllip EC-cryptosystems"], Cell[TextData[{ "Most notions in this section can be viewed as direct translations of \ notions introduced in ", ButtonBox["Chapter 8", BaseStyle->"Hyperlink", ButtonData:>"Chap Discr"], ", but now using ", ButtonBox["addition", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Addition"], " over an ", ButtonBox["elliptic curve", BaseStyle->"Hyperlink", ButtonData:>"DefEllip elliptic curve"], " as principal operation instead of modular multiplication. Modular \ exponentiation will translate into scalar multiplication.\nFor the above \ reason, it will often suffice to just present the new formulations without \ copying all the proofs.\nIn ", ButtonBox["[Demy94]", BaseStyle->"Hyperlink", ButtonData:>"RefDemy94"], " one can find a ", ButtonBox["RSA", BaseStyle->"Hyperlink", ButtonData:>"SectRSA RSA"], "-like cryptosystem defined over elliptic curves. However, to break the \ system it is sufficient to factor its modulus. Since the original RSA system \ had the same security restriction and is faster in its calculations, there \ seems to be little reason to use this generalization of RSA to elliptic \ curves." }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Discrete Logarithm Problem over Elliptic Curves" }], "Subsection", CellTags->"SubsElip discr log problem"], Cell[TextData[{ "We have seen in ", ButtonBox["Section 10.3", BaseStyle->"Hyperlink", ButtonData:>"SectEllip Addition"], " how to add points on an elliptic curve \[ScriptCapitalE]. This is an \ operation with relatively low complexity. To compute ", ButtonBox["scalar multiples", BaseStyle->"Hyperlink", ButtonData:>"DefEllip order"], " of a point ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ", say ", Cell[BoxData[ FormBox[ RowBox[{"n", ".", "P"}], TraditionalForm]]], " for some integer ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", we can use repeated addition, but it is much more efficient to copy the \ ideas of ", ButtonBox["Subsection 8.1.1", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Log Problem"], "." }], "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"], "\nTake n=171. Its binary expansion is 10101011, as follows from the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["IntegerDigits", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.4234559668082323`*^9, 3.4234559680269747`*^9}}], Cell[BoxData[ RowBox[{"IntegerDigits", "[", RowBox[{"171", ",", "2"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "So, to compute ", Cell[BoxData[ FormBox[ RowBox[{"171", "P"}], TraditionalForm]]], ", it suffices to compute " }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "P"}], "=", RowBox[{"P", "+", "P"}]}], TraditionalForm]]], ", \n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"4", "P"}], "=", RowBox[{ RowBox[{"2", "P"}], "+", RowBox[{"2", "P"}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"8", "P"}], "=", RowBox[{ RowBox[{"4", "P"}], "+", RowBox[{"4", "P"}]}]}], TraditionalForm]]], "\n ", Cell[BoxData[ FormBox["\[VerticalEllipsis]", TraditionalForm]]], "\n ", Cell[BoxData[ FormBox["\[AliasDelimiter]", TraditionalForm]]], " \n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"128", "P"}], "=", RowBox[{ RowBox[{"64", "P"}], "+", RowBox[{"64", "P"}]}]}], TraditionalForm]]], " " }], "DisplayFormula", FontSlant->"Italic"], Cell["\<\ and add the suitable terms. This can be done on the fly as follows:\ \>", "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", "P", "]"}], ";", RowBox[{ RowBox[{"2", RowBox[{"(", RowBox[{ RowBox[{"2", RowBox[{"(", RowBox[{"2", RowBox[{"(", RowBox[{ RowBox[{"2", RowBox[{"(", RowBox[{"2", RowBox[{"(", RowBox[{ RowBox[{"2", RowBox[{"(", RowBox[{"2", "P"}], ")"}]}], "+", "P"}], ")"}]}], ")"}]}], "+", "P"}], ")"}]}], ")"}]}], "+", "P"}], ")"}]}], "+", "P"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"171", " ", "P"}]], "Output"], Cell[TextData[{ "Note that we only added partial results to themselves or to ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ". (The reader may want to look at ", ButtonBox["Example 8.3", BaseStyle->"Hyperlink", ButtonData:>"ExamDiscr Exp 171"], " for the analogous modular arithmetic problem.)" }], "Text", FontSlant->"Italic"], Cell[TextData[{ "Of course, ", ButtonBox["addition chains", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr addition chain"], " may further reduce the complexity of these calculations." }], "Text"], Cell["\<\ The opposite problem of computing scalar multiples of a point is the \ following:\ \>", "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 \[ScriptCapitalE] be an elliptic curve. Let ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " be a point on \[ScriptCapitalE] and let ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " be a scalar multiple of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ".\nThe ", StyleBox["discrete logarithm problem", FontSlant->"Italic"], " over an elliptic curve is the problem of determining ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " for given ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " from the relation" }], "Definition", CellTags->"DefEllip Discr Log Prob"], Cell[TextData[{ "\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", ".", "P"}], "=", "Q"}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.500008, 1, 0.900008]], Cell[TextData[{ "Although we shall see more efficient ways to solve (10.15) than by simply \ trying ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "=", "1"}], ",", "2", ",", "\[Ellipsis]"}], TraditionalForm]]], ", all the methods have a complexity of the form ", Cell[BoxData[ FormBox[ SuperscriptBox["n", "\[Alpha]"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", ">", "0"}], TraditionalForm]]], ", and so they are exponentially slower than the (logarithmic) complexity of \ computing ", Cell[BoxData[ FormBox[ RowBox[{"n", ".", "P"}], TraditionalForm]]], " out of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ". " }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Discrete Logarithm System over Elliptic Curves" }], "Subsection", CellTags->"SubsElip discr log system"], Cell[TextData[{ "Now that we have formulated the discrete logarithm problem over elliptic \ curves, we can describe the analogue of the ", ButtonBox["Diffie-Hellman", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], " key exchange protocol (see Subsection 8.1.2). " }], "Text"], Cell[TextData[{ "As system parameters one needs an ", ButtonBox["elliptic curve", BaseStyle->"Hyperlink", ButtonData:>"DefEllip elliptic curve"], " \[ScriptCapitalE] over a finite field ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " and a point ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " on the curve of high ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefEllip order"], ", say the order ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " is 150-180 digits long. \nEach user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " of the system, selects a secret scalar ", Cell[BoxData[ FormBox[ SubscriptBox["m", "U"], TraditionalForm]]], ", computes the point ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Q", "U"], "=", RowBox[{ SubscriptBox["m", "U"], "P"}]}], TraditionalForm]]], " and makes ", Cell[BoxData[ FormBox[ SubscriptBox["Q", "U"], TraditionalForm]]], " public. Alice and Bob can now agree on the common key ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["K", RowBox[{"A", ",", "B"}]], "=", RowBox[{ SubscriptBox["m", "A"], SubscriptBox["m", "B"], "P"}]}], TraditionalForm]]], ". Alice can find this common key by computing ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "A"], SubscriptBox["Q", "B"]}], TraditionalForm]]], " with her secret scalar ", Cell[BoxData[ FormBox[ SubscriptBox["m", "A"], TraditionalForm]]], " and Bob's public ", Cell[BoxData[ FormBox[ SubscriptBox["Q", "B"], TraditionalForm]]], ". Bob can do likewise.\nThis system is summarized in the following table." }], "Text"], Cell[TextData[{ "\n", Cell[BoxData[GridBox[{ { RowBox[{"system", " ", "\n", "parameters"}], RowBox[{ RowBox[{ "elliptic", " ", "curve", " ", "\[ScriptCapitalE]", " ", "over", " ", "GF", RowBox[{"(", StyleBox["q", FontSlant->"Italic"], ")"}]}], "\n", RowBox[{"point", " ", StyleBox["P", FontSlant->"Italic"], " ", "on", " ", "\[ScriptCapitalE]", " ", "of", " ", "high", " ", "order"}], " "}]}, {" ", " "}, { StyleBox[ RowBox[{" ", RowBox[{"secret", " ", "key", " ", "of", " ", StyleBox["U", FontSlant->"Italic"]}]}], CellFrame->{{0, 0}, {0, 2}}], StyleBox[ SubscriptBox["m", "U"], FontSlant->"Italic"]}, { RowBox[{"public", " ", "key", " ", "of", " ", StyleBox["U", FontSlant->"Italic"]}], StyleBox[ RowBox[{ SubscriptBox["Q", "U"], "=", RowBox[{ SubscriptBox[ StyleBox["m", FontSlant->"Italic"], "U"], "P"}]}], FontSlant->"Italic"]}, {" ", " "}, { RowBox[{" ", RowBox[{"common", " ", "key", " ", "of", " ", StyleBox["A", FontSlant->"Italic"], " ", "and", " ", StyleBox["B", FontSlant->"Italic"]}]}], StyleBox[ RowBox[{ SubscriptBox["K", RowBox[{"A", ",", "B"}]], "=", RowBox[{ SubscriptBox["m", "A"], SubscriptBox["m", "B"], "P"}]}], FontSlant->"Italic"]}, { RowBox[{"Ann", " ", "computes"}], StyleBox[ RowBox[{ SubscriptBox["m", "A"], SubscriptBox["Q", "B"]}], FontSlant->"Italic"]}, { RowBox[{"Bob", " ", "computes"}], StyleBox[ RowBox[{ SubscriptBox["m", "B"], SubscriptBox["Q", "A"]}], FontSlant->"Italic"]} }]]] }], "DisplayFormula", CellTags->"TableEllip Diffie Hellman"], Cell[TextData[{ "The ", StyleBox["Diffie-Hellman Key Exchange System", FontSlant->"Italic"], " over Elliptic Curves" }], "NumberedTable", CellMargins->{{20, 0}, {Inherited, Inherited}}, PageBreakAbove->False], 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 elliptic curve \[ScriptCapitalE] over", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "863"], TraditionalForm]]], " defined by ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"100", SuperscriptBox["x", "2"]}], "+", RowBox[{"10", "x"}], "+", "1"}]}], TraditionalForm]]], ". The point ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"{", RowBox[{"121", ",", "517"}], "}"}]}], TraditionalForm]]], " lies on it as can be checked with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Mod", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{3.4233962048088913`*^9}, CellTags->"ExamEllip Key Exchange"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "863"}], ";", RowBox[{"a", "=", "100"}], ";", RowBox[{"b", "=", "10"}], ";", RowBox[{"c", "=", "1"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "=", "121"}], ";", RowBox[{"y", "=", "517"}], ";", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "-", RowBox[{"(", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", "*", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", "*", "x"}], "+", "c"}], ")"}]}], ",", "p"}], "]"}], "==", "0"}]}]}], "Input", CellChangeTimes->{3.4234711544954343`*^9}], Cell[BoxData["True"], "Output"], Cell[TextData[{ "The order of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " is 432. To show this, we check that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"432", "P"}], "=", "O"}], TraditionalForm]]], " and that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"432", "/", "p"}], ")"}], "P"}], "\[NotEqual]", "O"}], TraditionalForm]]], " for the prime divisors of 432. We make use the binary expansion of these \ coefficients (to be found with the function ", StyleBox["IntegerDigits", FontVariations->{"Underline"->True}], "). We also use of the ", ButtonBox["EllipticAdd", BaseStyle->"Hyperlink", ButtonData:>"InputEllip addition"], " function defined in Section 10.3 and the ", StyleBox["Do", FontVariations->{"Underline"->True}], " function." }], "Text", CellChangeTimes->{ 3.423392252580472*^9, {3.4234559731519413`*^9, 3.4234559751831784`*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"FactorInteger", "[", "432", "]"}], "\n", RowBox[{"IntegerDigits", "[", RowBox[{"432", ",", "2"}], "]"}], "\n", RowBox[{"IntegerDigits", "[", RowBox[{ RowBox[{"432", "/", "2"}], ",", "2"}], "]"}], "\n", RowBox[{"IntegerDigits", "[", RowBox[{ RowBox[{"432", "/", "3"}], ",", "2"}], "]"}]}], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "3"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "863"}], ";", RowBox[{"P", "=."}], ";"}], "\n", RowBox[{ RowBox[{"a", "=", "100"}], ";", RowBox[{"b", "=", "10"}], ";", RowBox[{"c", "=", "1"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"P", "[", "0", "]"}], "=", RowBox[{"{", RowBox[{"121", ",", "517"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"P", "[", "i_", "]"}], " ", ":=", " ", RowBox[{ RowBox[{"P", "[", "i", "]"}], " ", "=", " ", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"P", "[", RowBox[{"i", "-", "1"}], "]"}], ",", RowBox[{"P", "[", RowBox[{"i", "-", "1"}], "]"}]}], "]"}]}]}], ";"}], "\n", RowBox[{"Q", "=", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"P", "[", "8", "]"}], ",", RowBox[{"P", "[", "7", "]"}]}], "]"}], ",", " ", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"P", "[", "5", "]"}], ",", RowBox[{"P", "[", "4", "]"}]}], "]"}]}], "]"}]}], "\n", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"P", "[", "7", "]"}], ",", RowBox[{"P", "[", "6", "]"}]}], "]"}], ",", "\t", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"P", "[", "4", "]"}], ",", RowBox[{"P", "[", "3", "]"}]}], "]"}]}], "]"}], "\n", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"P", "[", "7", "]"}], ",", RowBox[{"P", "[", "4", "]"}]}], "]"}]}], "Input", CellChangeTimes->{{3.4234711872300186`*^9, 3.423471188792529*^9}, { 3.4234712421522455`*^9, 3.4234712450116386`*^9}}], Cell[BoxData[ RowBox[{"{", "O", "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"19", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"341", ",", "175"}], "}"}]], "Output"], Cell[TextData[{ "Let Alice choose ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "A"], "=", "130"}], TraditionalForm]]], " and Bob ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "B"], "=", "288"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Q", "A"], "=", RowBox[{"(", RowBox[{"162", ",", "663"}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Q", "B"], "=", RowBox[{"(", RowBox[{"341", ",", "688"}], ")"}]}], TraditionalForm]]], ", as can be checked as follows (note that we have chosen very friendly \ secret scalars)." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"QAlice", "=", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"P", "[", "7", "]"}], ",", RowBox[{"P", "[", "1", "]"}]}], "]"}]}], "\n", RowBox[{"QBob", "=", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"P", "[", "8", "]"}], ",", RowBox[{"P", "[", "5", "]"}]}], "]"}]}]}], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"162", ",", "663"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"341", ",", "688"}], "}"}]], "Output"], Cell[TextData[{ "Alice", " can compute the common key ", Cell[BoxData[ FormBox[ SubscriptBox["K", RowBox[{"A", ",", "B"}]], TraditionalForm]]], " with the calculation ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["K", RowBox[{"A", ",", "B"}]], "=", RowBox[{ SubscriptBox["m", "A"], SubscriptBox["Q", "B"]}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "A"], "=", "130"}], TraditionalForm]]], " is her secret key. She finds " }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"QA", "[", "0", "]"}], "=", RowBox[{"{", RowBox[{"341", ",", "688"}], "}"}]}], ";", RowBox[{ RowBox[{"QA", "[", "i_", "]"}], ":=", RowBox[{ RowBox[{"QA", "[", "i", "]"}], "=", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"QA", "[", RowBox[{"i", "-", "1"}], "]"}], ",", RowBox[{"QA", "[", RowBox[{"i", "-", "1"}], "]"}]}], "]"}]}]}], ";", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"QA", "[", "7", "]"}], ",", RowBox[{"QA", "[", "1", "]"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"341", ",", "688"}], "}"}]], "Output"], Cell[TextData[{ "Likewise, Bob can compute the common key ", Cell[BoxData[ FormBox[ SubscriptBox["K", RowBox[{"A", ",", "B"}]], TraditionalForm]]], " with the calculation ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["K", RowBox[{"A", ",", "B"}]], "=", RowBox[{ SubscriptBox["m", "B"], SubscriptBox["Q", "A"]}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "B"], "=", "288"}], TraditionalForm]]], " is his secret key. He also finds " }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"QB", "[", "0", "]"}], "=", RowBox[{"{", RowBox[{"162", ",", "663"}], "}"}]}], ";", RowBox[{ RowBox[{"QB", "[", "i_", "]"}], ":=", RowBox[{ RowBox[{"QB", "[", "i", "]"}], "=", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"QB", "[", RowBox[{"i", "-", "1"}], "]"}], ",", RowBox[{"QB", "[", RowBox[{"i", "-", "1"}], "]"}]}], "]"}]}]}], ";", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"QB", "[", "8", "]"}], ",", RowBox[{"QB", "[", "5", "]"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"341", ",", "688"}], "}"}]], "Output"], Cell[TextData[{ "Now that the Diffie-Hellman key exchange system over elliptic curves has \ been described, it really is a straightforward exercise to show that the \ ElGamal protocol and the other systems, described in ", ButtonBox["Section 8.2", BaseStyle->"Hyperlink", ButtonData:>"SectDiscr Other Log Systems"], ", can be rewritten in the language of elliptic curves." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Security of Discrete Logarithm Based EC Systems" }], "Subsection", CellTags->"SubsElip security"], Cell[TextData[{ "In Section 8.3, various methods are described to take the discrete \ logarithm over a finite field. The ", ButtonBox["Pohlig-Hellman", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Pohlig Hellman"], " algorithm, the ", ButtonBox["baby-step giant-step", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Baby Step"], " method, and the ", ButtonBox["Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"], ButtonBox["\[Rho]", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"], " method can all be directly translated into elliptic curve terminology: \ just replace modular exponentiations by scalar multiplication on the elliptic \ curve." }], "Text"], Cell[TextData[{ "At the time of this writing, the ", ButtonBox["index-calculus", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Index Calc"], " method has defeated any attempt to transfer it efficiently to the elliptic \ curve setting (see ", ButtonBox["[Mill86]", BaseStyle->"Hyperlink", ButtonData:>"RefMill86"], "). That is of great cryptographic significance, because the index-calculus \ method was the only one with a subexponential complexity. This means that in \ regular discrete-logarithm-like systems the index-calculus method is the \ governing factor in determining the size of its parameters (to keep the \ system computationally secure). Since the index-calculus method is no longer \ around in the elliptic curve setting, one can afford much smaller parameters \ to achieve the same level of security.\nAt the time of this writing, the ", StyleBox["XEDNI method", FontSlant->"Italic"], " has been proposed ", ButtonBox["[Silv98]", BaseStyle->"Hyperlink", ButtonData:>"RefSilv98"], " as an alternative to solve the elliptic curve discrete logarithm problem. \ Further analysis is needed to determine the implications of this method." }], "Text", GeneratedCell->True, CellTags->"DefEllip Xedni"], Cell[TextData[{ "There are special attacks on discrete logarithm based elliptic curve \ cryptosystems. These attacks make it necessary to avoid special classes of \ elliptic curves. In particular, one should ", StyleBox["not", FontWeight->"Bold"], " use" }], "Text"], Cell["\<\ singular curves, supersingular curves, anomalous curves. \ \>", "DisplayFormula"], Cell[TextData[{ "We shall not describe these attacks (see ", ButtonBox["[MeOkV93]", BaseStyle->"Hyperlink", ButtonData:>"RefMeOkV93"], ", ", ButtonBox["[SatA98]", BaseStyle->"Hyperlink", ButtonData:>"RefSatA98"], ", and [", ButtonBox["Smar98]", BaseStyle->"Hyperlink", ButtonData:>"RefSmar98"], ". In each case the logarithm problem over an elliptic curve can be \ translated to the logarithm problem over a finite field (or an even simpler \ problem). We shall explain in one case that one can counter these attacks by \ simply avoiding these special curves." }], "Text", GeneratedCell->True], Cell[TextData[{ "Before we do so, we need to introduce a new notion. We ", StyleBox["homogenize", FontSlant->"Italic"], " the Weierstrass equation ", ButtonBox["(10.1)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], ". This means that we multiply each term in it with the smallest power of ", Cell[BoxData[ FormBox["z", TraditionalForm]]], " in such a way that all terms have the same degree:" }], "Text", CellTags->"DefEllip homogenize"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"F", "(", RowBox[{"x", ",", "y", ",", "z"}], ")"}], "=", RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "z"}], "+", RowBox[{"u", ".", "x", ".", "y", ".", "z"}], "+", RowBox[{"v", ".", "y", ".", SuperscriptBox["z", "2"]}], "-", SuperscriptBox["x", "3"], "-", RowBox[{ RowBox[{"a", ".", SuperscriptBox["x", "2"]}], "z"}], "-", RowBox[{"b", ".", "x", ".", "z"}], "-", RowBox[{"c", ".", SuperscriptBox["z", "3"]}]}], "=", "0"}]}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "Note that if ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"x", ",", "y", ",", "z"}], ")"}], TraditionalForm]]], " satisfies (10.16), then so does ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "(", RowBox[{"x", ",", "y", ",", "z"}], ")"}], TraditionalForm]]], ". For that reason, one often normalizes solutions to (10.16) by requiring \ the right-most non zero coordinate to be equal to 1.\nPoints ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"x", ",", "y"}], ")"}], TraditionalForm]]], " that satisfy ", ButtonBox["(10.1)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], " now lead to solutions ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"x", ",", "y", ",", "1"}], ")"}], TraditionalForm]]], " of (10.16). The (somewhat mysterious) point ", Cell[BoxData[ FormBox["O", TraditionalForm]]], " at infinity can be represented by ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "1", ",", "0"}], ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "A point on a curve \[ScriptCapitalE] is a called ", StyleBox["singular", FontSlant->"Italic"], " if all partial derivatives ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PartialD]", "F"}], "/", RowBox[{"\[PartialD]", "x"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PartialD]", "F"}], "/", RowBox[{"\[PartialD]", "y"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PartialD]", "F"}], "/", RowBox[{"\[PartialD]", "z"}]}], TraditionalForm]]], " are zero. An elliptic curve can not contain two singular points. If a \ curve \[ScriptCapitalE] contains a singular point then it is called a ", StyleBox["singular curve", FontSlant->"Italic"], ", otherwise it is called a ", StyleBox["non-singular curve", FontSlant->"Italic"], ". " }], "Text", CellTags->"DefEllip singular"], Cell[TextData[{ "With some effort one can show that ", ButtonBox["(10.2)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Red Weier"], " defines a non-singular curve if and only if the cubic expression on its \ right side has no multiple roots. For ", ButtonBox["(10.3)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weier Red p>3"], " with ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[NotEqual]", "0"}], TraditionalForm]]], ", this is equivalent to the condition ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"4", SuperscriptBox["b", "3"]}], "+", RowBox[{"27", SuperscriptBox["c", "2"]}]}], "\[NotCongruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". \nWhen ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]]], ", ", ButtonBox["(10.4)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weier Red p=2"], " gives non-singular curves when ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[NotEqual]", "0"}], TraditionalForm]]], " and ", ButtonBox["(10.5)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weier Red p=2 super"], " when ", Cell[BoxData[ FormBox[ RowBox[{"v", "\[NotEqual]", "0"}], TraditionalForm]]], ". " }], "Text"], Cell["\<\ The above means, that it is quite simple to test if a curve is non-singular \ or not. \ \>", "Text"], Cell[TextData[{ "We shall not give a definition of what ", StyleBox["supersingular", FontSlant->"Italic"], " means. Here it suffices to know that curves defined by ", ButtonBox["(10.5)", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weier Red p=2 super"], " are supersingular and need to be avoided. Again, it is easy to avoid these \ curves." }], "Text", CellTags->"DefEllip supersingular"], Cell[TextData[{ "Finally, ", StyleBox["anomalous", FontSlant->"Italic"], " curves are elliptic curves \[ScriptCapitalE] over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], " with the property that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalE]", "|"}], "=", "p"}], TraditionalForm]]], ". " }], "Text", CellTags->"DefEllip anomalous"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectEllip Problems"], 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]]], "\nHow many points lie on the elliptic curve defined in ", ButtonBox["Example 10.1", BaseStyle->"Hyperlink", ButtonData:>"ExamEllip point on EC?"], "?" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nFind the intersection points over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "31"], TraditionalForm]]], " of the lines ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{ RowBox[{"4", "x"}], "+", "20"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"y", "=", RowBox[{ RowBox[{"4", "x"}], "+", "21"}]}], TraditionalForm]]], " with the elliptic curve ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"25", "x"}], "+", "10"}]}], TraditionalForm]]], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nFind the line that is ", ButtonBox["tangent", BaseStyle->"Hyperlink", ButtonData:>"DefEllip tangent"], " to the elliptic curve ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"11", SuperscriptBox["x", "2"]}], "+", RowBox[{"17", "x"}], "+", "25"}]}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "31"], TraditionalForm]]], " in the point ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"2", ",", "7"}], ")"}], TraditionalForm]]], ". Where else does this line intersect the curve?" }], "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]]], "\nConsider the elliptic curve \[ScriptCapitalE] defined by ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"11", SuperscriptBox["x", "2"]}], "+", RowBox[{"17", "x"}], "+", "25"}]}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "31"], TraditionalForm]]], ".\nCheck that the points ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"{", RowBox[{"12", ",", "10"}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"Q", "=", RowBox[{"{", RowBox[{"25", ",", "14"}], "}"}]}], TraditionalForm]]], " lie on \[ScriptCapitalE]. What is ", Cell[BoxData[ FormBox[ RowBox[{"-", "P"}], TraditionalForm]]], "? Compute the ", ButtonBox["sum", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Addition"], " of ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " without using the ", StyleBox["Mathematica ", FontSlant->"Italic"], "procedure presented in Subsection 10.3. " }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nConsider an elliptic curve \[ScriptCapitalE]. Let ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " on \[ScriptCapitalE] have ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefEllip order"], " ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". What is the order of ", Cell[BoxData[ FormBox[ RowBox[{"-", "P"}], TraditionalForm]]], "?" }], "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]]], "\nConsider (again) the elliptic curve \[ScriptCapitalE] defined by ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"11", SuperscriptBox["x", "2"]}], "+", RowBox[{"17", "x"}], "+", "25"}]}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "31"], TraditionalForm]]], ".\nDetermine the orders of ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", RowBox[{"{", RowBox[{"27", ",", "10"}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"Q", "=", RowBox[{"{", RowBox[{"24", ",", "28"}], "}"}]}], TraditionalForm]]], ". What can you conclude about the cardinality of \[ScriptCapitalE] (hint: \ use ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ")?\nWhat is the cardinality of \[ScriptCapitalE] (hint: use ", ButtonBox["Theorem 10.1", BaseStyle->"Hyperlink", ButtonData:>"TheoEllip Hasse"], ")? \nConstruct a point of maximal order from ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], "." }], "Problem", GeneratedCell->True], 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 10.6", BaseStyle->"Hyperlink", ButtonData:>"ExamEllip Key Exchange"], " for the elliptic curve \[ScriptCapitalE] over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "523"], TraditionalForm]]], " defined by the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"111", SuperscriptBox["x", "2"]}], "+", RowBox[{"11", "x"}], "+", "1"}]}], TraditionalForm]]], ". Use for ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " a point of order at least one hundred." }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tCoding Theory Based Systems" }], "Chapter", CellTags->"Chap McEl"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tIntroduction to Goppa codes" }], "Section", CellTags->"SectMcEl Goppa"], Cell[TextData[{ "In this chapter it is assumed that the reader is familiar with algebraic \ coding theory. A reader without this background can freely skip this chapter \ and continue with Chapter 12. From ", ButtonBox["[MacWS77]", BaseStyle->"Hyperlink", ButtonData:>"RefMacW77"], " we recall the following facts about Goppa codes." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"G", "(", "x", ")"}], TraditionalForm]]], " be any irreducible polynomial of degree ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], RowBox[{"(", SuperscriptBox["2", "m"], ")"}]}], TraditionalForm]]], ". Then the set" }], "Theorem", GeneratedCell->True, CellTags->"TheoMcEl Goppa"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{"G", "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}]}], ")"}], "=", RowBox[{"{", " ", RowBox[{ RowBox[{ SubscriptBox[ RowBox[{"(", SubscriptBox["c", "\[Omega]"], ")"}], RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}]}]], "\[Element]", SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "n"]}], " ", "|", RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}]}]], FractionBox[ SubscriptBox["c", "\[Omega]"], RowBox[{"x", "-", "\[Omega]"}]]}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"G", "(", "x", ")"}]}], ")"}]}]}]}], StyleBox[" ", SpanMaxSize->DirectedInfinity[1]], StyleBox["}", SpanMaxSize->DirectedInfinity[1]]}]}], TraditionalForm]], CellTags->"FormMcEl Goppa"]], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormMcEl Goppa"], Cell[TextData[{ "defines a binary ", StyleBox["Goppa code", FontSlant->"Italic"], " of ", StyleBox["length", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", SuperscriptBox["2", "m"]}], TraditionalForm]]], ", ", StyleBox["dimension", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", RowBox[{"n", "-", RowBox[{"t", ".", "m"}]}]}], TraditionalForm]]], " and ", StyleBox["minimum distance", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"d", "\[GreaterEqual]", RowBox[{ RowBox[{"2", "t"}], "+", "1"}]}], TraditionalForm]]], ". \nA fast ", StyleBox["decoding algorithm", FontSlant->"Italic"], " with running time ", Cell[BoxData[ FormBox[ RowBox[{"n", ".", "t"}], TraditionalForm]]], ", exists (see ", ButtonBox["[Patt75]", BaseStyle->"Hyperlink", ButtonData:>"RefPatt75"], "). " }], "Theorem", GeneratedCell->True, CounterIncrements->"None", Background->RGBColor[0.839994, 1, 0.2], CellTags->"DefMcEl Goppa code"], Cell[TextData[{ "Note that we have used the elements in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}], TraditionalForm]]], " as an index set for the coordinates of the vectors in ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "n"], TraditionalForm]]], ". The notions used above mean that the elements in ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{"G", "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}]}], ")"}], TraditionalForm]]], " (which are called ", StyleBox["codewords", FontSlant->"Italic"], ") form a linear subspace in ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "n"], TraditionalForm]]], " of dimension at least ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", RowBox[{"t", ".", "m"}]}], TraditionalForm]]], " and that different codewords differ in at least ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "t"}], "+", "1"}], TraditionalForm]]], "coordinates (one says that the ", StyleBox["Hamming distance", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["d", "H"], "(", RowBox[{ StyleBox["c", FontSlant->"Italic", FontVariations->{"Underline"->True}], ",", RowBox[{ StyleBox["c", FontSlant->"Italic", FontVariations->{"Underline"->True}], "'"}]}], ")"}], TraditionalForm]]], " between different codewords is at least ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "t"}], "+", "1"}], TraditionalForm]]], "). \nA decoding algorithm will map any word in ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "n"], TraditionalForm]]], " that differs in at most ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " coordinates from a codeword ", StyleBox["c", FontSlant->"Italic", FontVariations->{"Underline"->True}], " (which is unique by the triangle inequality) to that codeword. Hence, if a \ codeword ", StyleBox["c", FontSlant->"Italic", FontVariations->{"Underline"->True}], " is transmitted and the received word ", Cell[BoxData[ FormBox[ StyleBox["r", FontSlant->"Italic", FontVariations->{"Underline"->True}], TraditionalForm]]], " differs from ", Cell[BoxData[ FormBox[ StyleBox["c", FontSlant->"Italic", FontVariations->{"Underline"->True}], TraditionalForm]]], " in no more than ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " coordinates (", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["d", "H"], "(", RowBox[{ StyleBox["c", FontSlant->"Italic", FontVariations->{"Underline"->True}], ",", StyleBox["r", FontSlant->"Italic", FontVariations->{"Underline"->True}]}], ")"}], "\[LessEqual]", "t"}], TraditionalForm]]], "), the receiver is able to recover ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], " from ", Cell[BoxData[ FormBox["r", TraditionalForm]], FontVariations->{"Underline"->True}], ". For this reason, ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " is called the ", StyleBox["error-correcting capability", FontSlant->"Italic"], " of the code ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{"G", "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}]}], ")"}], TraditionalForm]]], ".\nAny ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Times]", "n"}], TraditionalForm]]], " matrix of which the rows span a particular linear code is called a ", StyleBox["generator matrix", FontSlant->"Italic"], " of that code. It follows from this definition that the code can be \ described by" }], "Text", CellTags->"DefMcEl codeword"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", " ", RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", "G"}], " ", "|", " ", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "\[Element]", SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "k"]}]}], " ", "}"}], "."}], TraditionalForm]]]], "NumberedEquation"], 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 \[Alpha] be the primitive element in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}], TraditionalForm]]], " satisfying ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "4"], "+", SuperscriptBox["\[Alpha]", "3"], "+", "1"}], "=", "0"}], TraditionalForm]]], ". After having loaded the ", StyleBox["Mathematica", FontSlant->"Italic"], " package ", StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], " we can generate the ", ButtonBox["log table", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Log Table"], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}], TraditionalForm]]], " with the functions ", StyleBox["MatrixForm", FontVariations->{"Underline"->True}], " and ", StyleBox["PowerList", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{ 3.423397063470637*^9, {3.423454901643174*^9, 3.4234549039400344`*^9}, { 3.423460117658117*^9, 3.423460119001875*^9}}, CellTags->"ExamMcEl Goppa"], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input", GeneratedCell->True, CellTags->"S5.2.1"], Cell[BoxData[ RowBox[{"MatrixForm", "[", RowBox[{"PowerList", "[", RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}]}], "]"}], "]"}], "]"}]], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", "0", "0", "0"}, {"0", "1", "0", "0"}, {"0", "0", "1", "0"}, {"0", "0", "0", "1"}, {"1", "0", "0", "1"}, {"1", "1", "0", "1"}, {"1", "1", "1", "1"}, {"1", "1", "1", "0"}, {"0", "1", "1", "1"}, {"1", "0", "1", "0"}, {"0", "1", "0", "1"}, {"1", "0", "1", "1"}, {"1", "1", "0", "0"}, {"0", "1", "1", "0"}, {"0", "0", "1", "1"} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.7]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], Function[BoxForm`e$, MatrixForm[BoxForm`e$]]]], "Output", CellChangeTimes->{3.4233753615986753`*^9}], Cell[TextData[{ "Consider the binary Goppa code ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{"G", "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}], ")"}], TraditionalForm]]], " of length 16 defined by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"G", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "\[Alpha]"}]}], TraditionalForm]]], ". That ", Cell[BoxData[ FormBox[ RowBox[{"G", "(", "x", ")"}], TraditionalForm]]], " is indeed an irreducible polynomial over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}], TraditionalForm]]], " can easily be checked with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["GF", FontVariations->{"Underline"->True}], ", ", StyleBox["Table", FontVariations->{"Underline"->True}], ", and ", StyleBox["TableForm", FontVariations->{"Underline"->True}], " because it suffices to show that ", Cell[BoxData[ FormBox[ RowBox[{"G", "(", "x", ")"}], TraditionalForm]]], " has no linear factors." }], "Text", CellChangeTimes->{ 3.4233938593563805`*^9, {3.423464133637309*^9, 3.423464135418605*^9}, { 3.423471304621395*^9, 3.423471308246418*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"f16", "=", RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"x", "=", RowBox[{"f16", "[", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"a", "=", RowBox[{"f16", "[", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"G", "[", "x_", "]"}], ":=", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "a"}]}], ";"}], "\n", RowBox[{"G", "[", "0", "]"}], "\n", RowBox[{ RowBox[{"Table", "[", RowBox[{ RowBox[{"{", RowBox[{"i", ",", RowBox[{"G", "[", SuperscriptBox["x", "i"], "]"}]}], "}"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "14"}], "}"}]}], "]"}], " ", "//", "TableForm"}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 0, 0}[2]], Editable->False]], "Output"], Cell[BoxData[ TagBox[GridBox[{ {"0", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 0, 0}[2]], Editable->False]}, {"1", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 0, 1, 0}[2]], Editable->False]}, {"2", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 1, 1}[2]], Editable->False]}, {"3", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0}[2]], Editable->False]}, {"4", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0}[2]], Editable->False]}, {"5", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0}[2]], Editable->False]}, {"6", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 1, 1, 1}[2]], Editable->False]}, {"7", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {1, 0, 0, 1}[2]], Editable->False]}, {"8", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 1, 1, 1}[2]], Editable->False]}, {"9", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 1, 1}[2]], Editable->False]}, {"10", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0}[2]], Editable->False]}, {"11", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1}[2]], Editable->False]}, {"12", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 0, 1, 0}[2]], Editable->False]}, {"13", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {1, 0, 0, 1}[2]], Editable->False]}, {"14", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1}[2]], Editable->False]} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[2.0999999999999996`]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], TableForm[#]& ]], "Output"], Cell[TextData[{ "To determine the inverses ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", RowBox[{"(", RowBox[{"x", "-", "\[Omega]"}], ")"}]}], TraditionalForm]]], " (mod ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "\[Alpha]"}], TraditionalForm]]], ") in ", ButtonBox["(11.1)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Goppa"], " we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PolynomialExtendedGCD", FontVariations->{"Underline"->True}], ". For instance, ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "3"]}], ")"}]}], TraditionalForm]]], " (mod ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "\[Alpha]"}], TraditionalForm]]], ") can be found by" }], "Text", CellChangeTimes->{{3.4214693376224847`*^9, 3.4214693438099847`*^9}, { 3.4234713262621584`*^9, 3.423471336152847*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"x", "=."}], ";", RowBox[{"PolynomialExtendedGCD", "[", RowBox[{ RowBox[{"x", "-", SuperscriptBox["a", "3"]}], ",", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "a"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 1, 0, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 1, 1}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 1, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Output"], Cell["\<\ With the logarithm table above we can rewrite these coefficients as follows:\ \>", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"0.1", "+", RowBox[{"1.", "\[Alpha]"}], "+", RowBox[{"0.", "\[Alpha]"}], "+", RowBox[{"1", SuperscriptBox["\[Alpha]", "3"]}]}], "=", SuperscriptBox["\[Alpha]", "10"]}], TraditionalForm]]], ", \n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1.1", "+", RowBox[{"1.", "\[Alpha]"}], "+", RowBox[{"1.", SuperscriptBox["\[Alpha]", "2"]}], "+", RowBox[{"1.", SuperscriptBox["\[Alpha]", "3"]}]}], "=", SuperscriptBox["\[Alpha]", "6"]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "It follows from ", ButtonBox["(A.8)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA gcd=ua+vb"], " that " }], "Text", GeneratedCell->True, FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "3"]}], ")"}], ".", RowBox[{"(", RowBox[{ SuperscriptBox["\[Alpha]", "10"], "+", RowBox[{ SuperscriptBox["\[Alpha]", "6"], "x"}]}], ")"}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"+", RowBox[{ SuperscriptBox["\[Alpha]", "6"], ".", RowBox[{"G", "(", "x", ")"}]}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"=", "1"}], TraditionalForm]]], ", " }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "i.e. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "/", RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "3"]}], ")"}]}], "=", RowBox[{ SuperscriptBox["\[Alpha]", "10"], "+", RowBox[{ SuperscriptBox["\[Alpha]", "6"], "x"}]}]}], TraditionalForm]]], ". This can be checked with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}] }], "Text", CellChangeTimes->{3.423394633283209*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", "x", "]"}], ";", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["a", "3"]}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["a", "10"], "+", RowBox[{ SuperscriptBox["a", "6"], "x"}]}], ")"}]}], ",", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "a"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 0, 0}[2]], Editable->False]], "Output"], Cell[TextData[{ "We express all the inverses ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", RowBox[{"(", RowBox[{"x", "-", "\[Omega]"}], ")"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}], TraditionalForm]]], ", in this way as polynomials ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["g", "0", RowBox[{"(", "\[Omega]", ")"}]], "+", RowBox[{ SubsuperscriptBox["g", "1", RowBox[{"(", "\[Omega]", ")"}]], "x"}]}], TraditionalForm]]], ", by means of " }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "x", "]"}], ";", RowBox[{"PolynomialExtendedGCD", "[", RowBox[{"x", ",", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "a"}]}], "]"}]}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{"Print", "[", RowBox[{"PolynomialExtendedGCD", "[", RowBox[{ RowBox[{"x", "-", SuperscriptBox["a", "i"]}], ",", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "a"}]}], "]"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "14"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 1, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 1, 1}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 1, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 1, 1}[2]], Editable->False]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 1, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 1, 0, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 1, 0, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 1, 1}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 1, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 1, 1}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 1, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1}[2]], Editable->False]}], "+", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 0, 0}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 1, 0}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 1, 0}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 0, 1, 1}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 0, 1, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 1, 0}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 1, 0}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0}[2]], Editable->False]}], "+", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 0, 1, 1}[2]], Editable->False]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1}[2]], Editable->False]}], "+", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 1, 1, 1}[2]], Editable->False]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 0, 1, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 1, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 0, 1, 1}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 0, 1, 1}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {0, 1, 1, 1}[2]], Editable->False], "+", RowBox[{"x", " ", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0}[2]], Editable->False]}]}], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0}[2]], Editable->False]}], "}"}]}], "}"}]], "Print"], Cell[TextData[{ "and put them as columns ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { SubsuperscriptBox["g", "0", RowBox[{"(", "\[Omega]", ")"}]]}, { SubsuperscriptBox["g", "1", RowBox[{"(", "\[Omega]", ")"}]]} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], " in a ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[Cross]", "16"}], TraditionalForm]]], " matrix ", Cell[BoxData[ FormBox["H", TraditionalForm]]], ". Note that ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "3"]}], ")"}]}], TraditionalForm]]], " appears as ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { SuperscriptBox["\[Alpha]", "10"]}, { SuperscriptBox["\[Alpha]", "6"]} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], " in column 5, because the first column corresponds to ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", "0"}], TraditionalForm]]], ", the second column has index ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", "1"}], TraditionalForm]]], ", etc." }], "Text", FontSlant->"Italic"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"H", "=", RowBox[{"(", GridBox[{ { SuperscriptBox["\[Alpha]", "14"], "0", SuperscriptBox["\[Alpha]", "10"], SuperscriptBox["\[Alpha]", "3"], SuperscriptBox["\[Alpha]", "10"], SuperscriptBox["\[Alpha]", "9"], SuperscriptBox["\[Alpha]", "13"], "1", SuperscriptBox["\[Alpha]", "9"], SuperscriptBox["\[Alpha]", "13"], SuperscriptBox["\[Alpha]", "11"], SuperscriptBox["\[Alpha]", "8"], SuperscriptBox["\[Alpha]", "11"], SuperscriptBox["\[Alpha]", "14"], SuperscriptBox["\[Alpha]", "3"], SuperscriptBox["\[Alpha]", "8"]}, { SuperscriptBox["\[Alpha]", "14"], SuperscriptBox["\[Alpha]", "14"], SuperscriptBox["\[Alpha]", "13"], SuperscriptBox["\[Alpha]", "9"], SuperscriptBox["\[Alpha]", "6"], SuperscriptBox["\[Alpha]", "6"], SuperscriptBox["\[Alpha]", "3"], SuperscriptBox["\[Alpha]", "7"], SuperscriptBox["\[Alpha]", "11"], SuperscriptBox["\[Alpha]", "7"], SuperscriptBox["\[Alpha]", "9"], SuperscriptBox["\[Alpha]", "3"], SuperscriptBox["\[Alpha]", "12"], SuperscriptBox["\[Alpha]", "13"], SuperscriptBox["\[Alpha]", "11"], SuperscriptBox["\[Alpha]", "12"]} }], ")"}]}], TraditionalForm]]]], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "Here, we have made use of the log table of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}], TraditionalForm]]], ", computed earlier.\nThe defining equation in ", ButtonBox["(11.1)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Goppa"], " can be rewritten as " }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}]], RowBox[{ SubscriptBox["c", "\[Omega]"], "(", RowBox[{ SubsuperscriptBox["g", "0", RowBox[{"(", "\[Omega]", ")"}]], "+", RowBox[{ SubsuperscriptBox["g", "1", RowBox[{"(", "\[Omega]", ")"}]], "x"}]}], ")"}]}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "2"]}], "+", "x", "+", "\[Alpha]"}], ")"}]}]}], TraditionalForm]]], ", " }], "DisplayFormula", FontSlant->"Italic"], Cell["or, equivalently, as", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}]], RowBox[{ SubscriptBox["c", "\[Omega]"], SubsuperscriptBox["g", "0", RowBox[{"(", "\[Omega]", ")"}]]}]}], ")"}], "+", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}]], RowBox[{ SubscriptBox["c", "\[Omega]"], SubsuperscriptBox["g", "1", RowBox[{"(", "\[Omega]", ")"}]]}]}], ")"}], "x"}]}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", SuperscriptBox["x", "2"]}], "+", "x", "+", "\[Alpha]"}], ")"}]}]}], TraditionalForm]]], ". " }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "So, we have two linear equations for ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "=", SubscriptBox[ RowBox[{"(", SubscriptBox["c", "\[Omega]"], ")"}], RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}]]}], TraditionalForm]]], ":" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}]], RowBox[{ SubscriptBox["c", "\[Omega]"], SubsuperscriptBox["g", "0", RowBox[{"(", "\[Omega]", ")"}]]}]}], "=", "0"}], TraditionalForm]]], "\t\tand \t ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}]], RowBox[{ SubscriptBox["c", "\[Omega]"], SubsuperscriptBox["g", "1", RowBox[{"(", "\[Omega]", ")"}]]}]}], "=", "0."}], TraditionalForm]]] }], "DisplayFormula", FontSlant->"Italic"], Cell["These two equations can be efficiently denoted by", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", ".", SuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "T"]}], " ", "=", " ", SuperscriptBox[ StyleBox["0", FontVariations->{"Underline"->True}], "T"]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "Expressing each power of \[Alpha] as binary linear combination of ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Alpha]", ",", SuperscriptBox["\[Alpha]", "2"]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "3"], TraditionalForm]]], " (or using the output of the ", StyleBox["PolynomialExtendedGCD", FontVariations->{"Underline"->True}], "-calculations directly) gives the 8\[Cross]16 binary matrix ", Cell[BoxData[ FormBox[ RowBox[{"H", "'"}], TraditionalForm]]], ":" }], "Text", CellChangeTimes->{{3.4234713599811244`*^9, 3.423471363262395*^9}}, FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "'"}], "=", RowBox[{"(", GridBox[{ {"0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "0"}, {"0", "0", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "0", "0", "1"}, {"1", "0", "0", "0", "0", "1", "1", "0", "1", "1", "1", "1", "1", "1", "0", "1"}, {"1", "0", "1", "1", "1", "0", "0", "0", "0", "0", "1", "1", "1", "1", "1", "1"}, {"0", "0", "0", "1", "1", "1", "0", "1", "1", "1", "1", "0", "1", "0", "1", "1"}, {"0", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "1", "0", "1"}, {"1", "1", "1", "1", "1", "1", "0", "1", "1", "1", "1", "0", "0", "1", "1", "0"}, {"1", "1", "0", "0", "1", "1", "1", "0", "1", "0", "0", "1", "0", "0", "1", "0"} }], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "So, another way to describe ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "\[Alpha]"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}], ")"}], TraditionalForm]]], " is" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"C", "=", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "\[Element]", SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "16"]}], "|", RowBox[{ RowBox[{"H", "'"}], ".", SuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "T"]}]}], StyleBox[" ", FontVariations->{"Underline"->True}], "=", " ", SuperscriptBox[ StyleBox["0", FontSlant->"Italic", FontVariations->{"Underline"->True}], "T"]}]}]}], TraditionalForm]]], "}." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "It is not difficult to check that ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " is a binary, linear code of length 16, dimension 7 and minimum distance \ 5." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "We call a matrix ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " whose nullspace is a particular linear code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " a ", StyleBox["parity check matrix", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox["C", TraditionalForm]]], ". We write" }], "Text", CellTags->"DefMcEl parity ch ma"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"C", "=", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "\[Element]", SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "n"]}], " ", "|", " ", RowBox[{"H", ".", SuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "T"]}]}], "=", SuperscriptBox[ StyleBox["0", FontSlant->"Italic", FontVariations->{"Underline"->True}], "T"]}], " ", "}"}], "."}]}], TraditionalForm]]]], "NumberedEquation", CellTags->"FormMcEl Hc=0"], Cell[TextData[{ "The ", StyleBox["syndrome", FontSlant->"Italic"], " of a received vector ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " is defined by: ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ StyleBox["s", FontVariations->{"Underline"->True}], "T"], "=", RowBox[{"H", ".", SuperscriptBox[ StyleBox["r", FontVariations->{"Underline"->True}], "T"]}]}], TraditionalForm]]], "." }], "Text", CellTags->"DefMcEl Syndrome"], Cell[TextData[{ "The number of irreducible polynomials of degree ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}], TraditionalForm]]], " is about ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", RowBox[{"m", ".", "t"}]], "/", "t"}], TraditionalForm]]], " (see ", ButtonBox["Corollary B.18", BaseStyle->"Hyperlink", ButtonData:>"CorAppB Iq(n)~~"], "). So, a randomly selected polynomial of degree ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}], TraditionalForm]]], " will be irreducible with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "t"}], TraditionalForm]]], ". Since fast algorithms for testing irreducibility (see ", ButtonBox["[Berl68]", BaseStyle->"Hyperlink", ButtonData:>"RefBer68"], ", Ch. 6 or ", ButtonBox["[Rabi80]", BaseStyle->"Hyperlink", ButtonData:>"RefRabi80"], ") exist, one can find an irreducible polynomial of degree ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}], TraditionalForm]]], ", just like in ", ButtonBox["Algorithm 9.3", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA generate prime"], ", by repeatedly guessing and testing. " }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe McEliece Cryptosystem" }], "Section", CellTags->"SectMcEl McEliece"], Cell[TextData[{ "Based on the theory of error-correcting codes, McEliece ", ButtonBox["[McEl78]", BaseStyle->"Hyperlink", ButtonData:>"RefMcEl78"], " proposed the following secrecy system. " }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe System" }], "Subsection", CellTags->"SubsMcEl System"], Cell[CellGroupData[{ Cell["Setting Up the System", "Subsubsection", CellTags->"SubsubsMcEl setting it up"], Cell[TextData[{ "1) Each user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " chooses a suitable ", ButtonBox["Goppa code", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], " of length ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "U"], "=", SuperscriptBox["2", SubscriptBox["m", "U"]]}], TraditionalForm]]], " and with ", ButtonBox["error-correcting capability", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], " ", Cell[BoxData[ FormBox[ SubscriptBox["t", "U"], TraditionalForm]]], ". To this end, user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " selects a random, irreducible polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox[ SubscriptBox["t", "U"], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", SubscriptBox["m", "U"]], ")"}], TraditionalForm]]], " and makes a ", ButtonBox["generator matrix", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], " ", Cell[BoxData[ FormBox[ SubscriptBox["G", "U"], TraditionalForm]]], " of the corresponding Goppa code ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", SubscriptBox["m", "U"]], ")"}]}], ")"}], TraditionalForm]]], ". The size of ", Cell[BoxData[ FormBox[ SubscriptBox["G", "U"], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["k", "U"], "\[Times]", SubscriptBox["n", "U"]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "2) User ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " chooses a random, dense ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["k", "U"], "\[Times]", SubscriptBox["k", "U"]}], TraditionalForm]]], " nonsingular matrix ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], " and a random ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "U"], "\[Times]", SubscriptBox["n", "U"]}], TraditionalForm]]], " permutation matrix ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " and computes" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["G", "U", "*"], "=", RowBox[{ SubscriptBox["S", "U"], SubscriptBox["G", "U"], SubscriptBox["P", "U"]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormMcEl G*=SGP"], Cell[TextData[{ "3) User ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " makes ", Cell[BoxData[ FormBox[ SubsuperscriptBox["G", "U", "*"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["t", "U"], TraditionalForm]]], " public, but keeps ", Cell[BoxData[ FormBox[ SubscriptBox["G", "U"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " secret." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Encryption", "Subsubsection", CellTags->"SubsubsMcEl encryption"], Cell[TextData[{ "Suppose that user Alice wants to send a message to user Bob. She looks up \ Bob's publicly known parameters ", Cell[BoxData[ FormBox[ SubsuperscriptBox["G", "B", "*"], TraditionalForm]]], " (of size ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["k", "B"], "\[Times]", SubscriptBox["n", "B"]}], TraditionalForm]]], ") and ", Cell[BoxData[ FormBox[ SubscriptBox["t", "B"], TraditionalForm]]], " represents her message as a binary string ", StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["k", "B"], TraditionalForm]]], ". Next Alice chooses a random vector ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " (error pattern) of length ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], " with at most ", Cell[BoxData[ FormBox[ SubscriptBox["t", "B"], TraditionalForm]]], " coordinates are equal to 1. As encryption of ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " Alice sends to Bob" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], "=", RowBox[{ RowBox[{ StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], ".", SubsuperscriptBox["G", "B", "*"]}], "+", StyleBox["e", FontSlant->"Italic", FontVariations->{"Underline"->True}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormMcEl enc McE"], Cell[TextData[{ "(One usually says: the weight of ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " is at most ", Cell[BoxData[ FormBox[ SubscriptBox["t", "B"], TraditionalForm]]], ", denoted by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["w", "H"], "(", StyleBox["e", FontVariations->{"Underline"->True}], ")"}], "\[LessEqual]", SubscriptBox["t", "B"]}], TraditionalForm]]], ", where the ", StyleBox["weight", FontSlant->"Italic"], " function ", Cell[BoxData[ FormBox["w", TraditionalForm]]], " counts the number of non-zero coordinates in a vector.)" }], "Text", CellTags->"DefMcEl weight"] }, Closed]], Cell[CellGroupData[{ Cell["Decryption", "Subsubsection", CellTags->"SubsubsMcEl decryption"], Cell[TextData[{ "Upon receiving ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], ", Bob computes with his secret permutation matrix ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]] }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], ".", SuperscriptBox[ SubscriptBox["P", "B"], RowBox[{"-", "1"}]]}], OverscriptBox["=", ButtonBox[ RowBox[{"(", "11.5", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormMcEl enc McE"]], " ", RowBox[{ RowBox[{ StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], ".", SuperscriptBox[ RowBox[{ SubsuperscriptBox["G", "B", "*"], "(", SubscriptBox["P", "B"], ")"}], RowBox[{"-", "1"}]]}], "+", SuperscriptBox[ RowBox[{ StyleBox["e", FontSlant->"Italic", FontVariations->{"Underline"->True}], "(", SubscriptBox["P", "B"], ")"}], RowBox[{"-", "1"}]]}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ OverscriptBox["=", ButtonBox[ RowBox[{"(", "11.4", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormMcEl G*=SGP"]], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", SubscriptBox["S", "B"]}], SubscriptBox["G", "B"], SubscriptBox["P", "B"], SuperscriptBox[ SubscriptBox["P", "B"], RowBox[{"-", "1"}]]}], "+", RowBox[{ StyleBox["e", FontVariations->{"Underline"->True}], "'"}]}], TraditionalForm]]], " = ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", SubscriptBox["S", "B"]}], ")"}], SubscriptBox["G", "B"]}], "+", RowBox[{ RowBox[{ StyleBox["e", FontVariations->{"Underline"->True}], "'"}], "."}]}], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["e", FontVariations->{"Underline"->True}], "'"}], "=", RowBox[{ StyleBox["e", FontVariations->{"Underline"->True}], ".", SuperscriptBox[ SubscriptBox["P", "B"], RowBox[{"-", "1"}]]}]}], TraditionalForm]]], " is a permutation of ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], ", so it also has weight ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"(", RowBox[{"\[LessEqual]", "t"}], ")"}], "B"], TraditionalForm]]], ". With the decoding algorithm of the Goppa code ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", SubscriptBox["m", "U"]], ")"}]}], ")"}], TraditionalForm]]], " Bob can efficiently decode ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], ".", SuperscriptBox[ SubscriptBox["P", "B"], RowBox[{"-", "1"}]]}], TraditionalForm]]], ". He will find ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["e", FontVariations->{"Underline"->True}], "'"}], TraditionalForm]]], " as error pattern and can retrieve ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", SubscriptBox["S", "B"]}], TraditionalForm]]], ". Multiplication of this expression on the right with ", Cell[BoxData[ FormBox[ SuperscriptBox[ SubscriptBox["S", "B"], RowBox[{"-", "1"}]], TraditionalForm]]], " (known to Bob) yields the originally transmitted message ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "\[Element]", SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], SubscriptBox["k", "B"]]}], TraditionalForm]]], "." }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tDiscussion" }], "Subsection", CellTags->"SubsMcEl Discussion"], Cell[CellGroupData[{ Cell["Summary and Proposed Parameters", "Subsubsection", CellTags->"SubsubsMcEl summary"], Cell["\<\ The McEliece cryptosystem introduced in the previous section can be \ summarized as follows.\ \>", "Text"], Cell[TextData[Cell[BoxData[GridBox[{ {"Public", RowBox[{ RowBox[{ SubsuperscriptBox["G", "U", "*"], " ", "and", " ", SubscriptBox["t", "U"], " ", "of", " ", "all", " ", "users", " ", "U"}], "\n", RowBox[{ SubsuperscriptBox["G", "U", "*"], " ", "has", " ", "size", " ", SubscriptBox["k", "U"], "\[Times]", SubscriptBox["n", "U"]}]}]}, {"Secret", RowBox[{ RowBox[{ SubscriptBox["p", "U"], RowBox[{"(", "x", ")"}]}], ",", SubscriptBox["S", "U"], ",", RowBox[{"and", " ", SubscriptBox["P", "U"], " ", "by", " ", "each", " ", "user", " ", "U", " "}]}]}, {" ", " "}, {"Property", RowBox[{ RowBox[{ SuperscriptBox[ SubscriptBox["S", "U"], RowBox[{"-", "1"}]], SubsuperscriptBox["G", "U", "*"], SubscriptBox["P", "U"], " ", "is", " ", "the", " ", "generator"}], " ", "\n", RowBox[{"matrix", " ", "of", " ", "the", " ", "Goppa", " ", "code"}], " ", "\n", RowBox[{"defined", " ", "by", " ", SubscriptBox["p", "U"], RowBox[{"(", "x", ")"}], " ", "of", " ", "degree", " ", SubscriptBox["t", "U"]}]}]}, {" ", " "}, { RowBox[{ RowBox[{"Format", " ", "of", " ", "message"}], "\n", "\t", RowBox[{"of", " ", "Ann", " ", "to", " ", "Bob"}]}], RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "\[Element]", SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], SubscriptBox["k", "B"]]}]}, {" ", " "}, {"Encryption", RowBox[{ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "=", RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", SubsuperscriptBox["G", "B", "*"]}], "+", StyleBox["e", FontVariations->{"Underline"->True}]}]}], ",", "\n", RowBox[{ RowBox[{"weight", " ", "of", " ", StyleBox["e", FontVariations->{"Underline"->True}], " ", "is"}], " ", "\[LessEqual]", SubscriptBox["t", "B"]}], "\t"}]}, {"Decryption", RowBox[{ RowBox[{ RowBox[{"compute", " ", RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "'"}]}], "=", RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], ".", SuperscriptBox[ SubscriptBox["P", "B"], RowBox[{"-", "1"}]]}]}], "\n", RowBox[{ RowBox[{"decode", " ", RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "'"}], " ", "to", " ", "find", " ", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}]}], "=", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", SubscriptBox["S", "B"]}]}], "\n", RowBox[{ RowBox[{"compute", " ", RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}], ".", SuperscriptBox[ SubscriptBox["S", "B"], RowBox[{"-", "1"}]]}]}], "=", StyleBox["m", FontVariations->{"Underline"->True}]}]}]} }]]]], "DisplayFormula"], Cell["The McEliece cryptosystem", "NumberedTable", CellTags->"TableMcEl McEliece"], Cell[TextData[{ "The reason that an error pattern ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " is introduced in ", ButtonBox["(11.5)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl enc McE"], ", is of course to make it impossible for the cryptanalist to retrieve ", StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], " from ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], " by a straightforward Gaussian elimination process." }], "Text"], Cell[TextData[{ "McEliece suggests in his original proposal ", ButtonBox["[McEl78]", BaseStyle->"Hyperlink", ButtonData:>"RefMcEl81"], " to take ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "B"], "=", "10"}], TraditionalForm]]], " (so ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "B"], "=", "1024"}], TraditionalForm]]], ") and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["t", "B"], "=", "50"}], TraditionalForm]]], " (so ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["k", "B"], "\[TildeTilde]", RowBox[{"1025", "-", RowBox[{"50", "\[Times]", "10"}]}]}], "=", "524"}], TraditionalForm]]], "). " }], "Text", GeneratedCell->True, CellTags->"PropMcEl parameters"] }, Closed]], Cell[CellGroupData[{ Cell["Heuristics of the Scheme", "Subsubsection", CellTags->"SubsubsMcEl heuristics"], Cell[TextData[{ "The heuristics behind this scheme are not difficult to guess. Take a \ sufficiently long, binary, linear block code, that can correct a large \ number, say ", Cell[BoxData[ FormBox["t", TraditionalForm]]], ", of errors and for which an efficient decoding algorithm exists. The code \ should belong to a large class of codes, making it impossible to guess which \ particular code has been selected. Let ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be the length of the code and ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " its dimension. Manipulate the generator matrix to such an extent, that the \ resulting matrix looks like a random ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Times]", "n"}], TraditionalForm]]], " matrix of full rank. The decoding complexity of a randomly generated code \ with these parameters should be infeasible. In the next section the \ complexity of several decoding methods will be discussed." }], "Text"], Cell[TextData[{ "In ", ButtonBox["[BerMT77]", BaseStyle->"Hyperlink", ButtonData:>"RefBerMT78"], " it is shown that the general decoding problem of linear codes, i.e. how to \ find the closest codeword to any word of length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", is ", StyleBox["NP-complete", FontSlant->"Italic"], ". We shall not explain what this notion means exactly. We refer the \ interested reader to ", ButtonBox["[GarJ79]", BaseStyle->"Hyperlink", ButtonData:>"RefGarJ79"], ". \nHere, it suffices to know that this characterization implies that no \ known algorithm can decode an arbitrary word to its closest codeword neighbor \ in a running time that depends in a polynomial way on the size of the input. \ \nMoreover, if one were to find such an algorithm, it could be adapted to \ solve a large class of equally hard problems. " }], "Text", GeneratedCell->True, CellTags->"DefMcEl NP-complete"] }, Closed]], Cell[CellGroupData[{ Cell["Not a Signature Scheme", "Subsubsection", CellTags->"SubsubsMcEl no sign"], Cell[TextData[{ "The encryption function of the McEliece cryptosystem maps binary ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-tuples to binary ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-tuples. This mapping is not surjective. Indeed, for the proposed parameter \ set the number of vectors of length 1024 at distance ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", "50"}], TraditionalForm]]], " to a codeword is" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["2", "k"], RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "50"], RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"i"} }], "\[NegativeThinSpace]", ")"}]}]}], "\[TildeTilde]", RowBox[{ SuperscriptBox["2", "524"], RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "50"], RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"1024"}, {"i"} }], "\[NegativeThinSpace]", ")"}]}]}], "\[TildeTilde]", RowBox[{ SuperscriptBox["2", "808.4"], "."}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "which is an ignorable fraction of the total number of 1024-length words. \ So, the (secret) function ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], " mentioned in Property ", ButtonBox["PK4", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK4"], " (in Subsection 7.1.1) is not defined for most words in ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "n"], TraditionalForm]]], ". Consequently, the McEliece system can not be turned into a signature \ scheme. See, also ", ButtonBox["Table 7.2", BaseStyle->"Hyperlink", ButtonData:>"TablePubl Signature"], "." }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tSecurity Aspects" }], "Subsection", CellTags->"SubsMcEl Security"], Cell[TextData[{ "We shall now discuss the security of the McEliece cryptosystem by analyzing \ four possible attacks on the specific parameters that ", ButtonBox["McEliece", BaseStyle->"Hyperlink", ButtonData:>"PropMcEl parameters"], " suggests. (The most powerful attack at this moment seems to be ", ButtonBox["[CanS98]", BaseStyle->"Hyperlink", ButtonData:>"RefCanS98"], ".)" }], "Text", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "1024"}], ";", RowBox[{"k", "=", "524"}], ";", RowBox[{"t", "=", "50"}], ";"}]], "Input"], Cell[CellGroupData[{ Cell[TextData[{ "Guessing ", Cell[BoxData[ FormBox[ SubscriptBox["S", "B"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]] }], "Subsubsection", CellTags->"SubsubsMcEl guessing S and P"], Cell[TextData[{ "As a cryptanalist, one may try to guess ", Cell[BoxData[ FormBox[ SubscriptBox["S", "B"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]], " to calculate ", Cell[BoxData[ FormBox[ SubscriptBox["G", "B"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ SubsuperscriptBox["G", StyleBox["B", FontWeight->"Bold"], "*"], TraditionalForm]]], " by means of ", ButtonBox["(11.4)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl G*=SGP"], ". Once ", Cell[BoxData[ FormBox[ SubscriptBox["G", "B"], TraditionalForm]]], " has been recovered, it is not so difficult for the cryptanalist to find \ the defining Goppa polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], TraditionalForm]]], " of the ", ButtonBox["Goppa code", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], " ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", SubscriptBox["m", "U"]], ")"}]}], ")"}], TraditionalForm]]], " that has ", Cell[BoxData[ FormBox[ SubscriptBox["G", "B"], TraditionalForm]]], " as generator polynomial. One can now follow the decryption algorithm of \ Bob to find the transmitted message ", StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], ". " }], "Text"], Cell[TextData[{ "However the number of invertible matrices ", Cell[BoxData[ FormBox[ SubscriptBox["S", "B"], TraditionalForm]]], " and permutation matrices ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]], " is so astronomical (", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "0"}], RowBox[{"k", "-", "1"}]], RowBox[{"(", RowBox[{ SuperscriptBox["2", "k"], "-", SuperscriptBox["2", "i"]}], ")"}]}], TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox[ RowBox[{"n", "!"}], TraditionalForm]]], "), that the probability of success of this attack is smaller than the \ probability of correctly guessing vector ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " directly." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Exhaustive Codewords Comparison", "Subsubsection", CellTags->"SubsubsMcEl exhaustive"], Cell[TextData[{ "The cryptanalist can compare the received vector ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " with all ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "k"], TraditionalForm]]], " codewords in the code generated by ", Cell[BoxData[ FormBox[ SubsuperscriptBox["G", "B", "*"], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], " be the closest codeword. It is at distance ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", "t"}], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " (by the encryption rule ", ButtonBox["(11.5)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl enc McE"], ") and is unique because the minimum distance of the code is at least ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "t"}], "+", "1"}], TraditionalForm]]], ". It also follows from (11.5) that ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "=", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", SubsuperscriptBox["G", "B", "*"]}]}], TraditionalForm]]], ". With a simple Gaussian elimination process one can now retrieve the \ transmitted message ", StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], " from ", StyleBox["c", FontSlant->"Italic", FontVariations->{"Underline"->True}], "." }], "Text"], Cell["This approach involves the following number of comparisons!", "Text"], Cell[BoxData[ RowBox[{"N", "[", RowBox[{ SuperscriptBox["2", "k"], ",", "5"}], "]"}]], "Input"], Cell[BoxData[ StyleBox["5.49183812810448834`*^157", StyleBoxAutoDelete->True, PrintPrecision->5]], "Output"], 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"], "\nConsider the binary code of length ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "7"}], TraditionalForm]]], " and dimension ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "4"}], TraditionalForm]]], ", generated by" }], "Example", CellTags->"ExamMcEl Hamming"], Cell[BoxData[ RowBox[{ RowBox[{"G", "=", RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "1", "1", "0"}, {"0", "1", "0", "0", "1", "0", "1"}, {"0", "0", "1", "0", "0", "1", "1"}, {"0", "0", "0", "1", "1", "1", "1"} }], ")"}]}], ";"}]], "Input"], Cell[TextData[{ "and suppose that ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{ "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], ")"}]}], TraditionalForm]]], " is a intercepted ciphertext which is a codeword ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], " plus an error vector of weight at most 1 (so ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "1"}], TraditionalForm]]], "). \nWe shall compare ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " with two codewords (instead of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "k"], "=", "16"}], TraditionalForm]]], ") and use again the ", StyleBox["Mod", FontVariations->{"Underline"->True}], " function:" }], "Text", CellChangeTimes->{3.4233962104339275`*^9}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"r", "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], ";", RowBox[{"i1", "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}]}], ";", RowBox[{"c", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"i1", ".", "G"}], ",", "2"}], "]"}]}]}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "-", "c"}], ",", "2"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "=", RowBox[{ SubscriptBox[ StyleBox["i", FontVariations->{"Underline"->True}], "1"], ".", "G"}]}], TraditionalForm]]], " lies at distance \[GreaterEqual]2 from ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], ", which is too much." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"i2", "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{"c", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"i2", ".", "G"}], ",", "2"}], "]"}]}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "-", "c"}], ",", "2"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "Now ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "=", RowBox[{ SubscriptBox[ StyleBox["i", FontVariations->{"Underline"->True}], "2"], ".", "G"}]}], TraditionalForm]]], " lies at distance 1 from ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " and we conclude that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], ")"}], TraditionalForm]]], " was the transmitted information." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell["Syndrome Decoding", "Subsubsection", CellTags->"SubsubsMcEl syndrome"], Cell[TextData[{ "The cryptanalist may compute the ", ButtonBox["parity check matrix", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl parity ch ma"], " ", Cell[BoxData[ FormBox[ SubsuperscriptBox["H", StyleBox["B", FontWeight->"Bold"], "*"], TraditionalForm]]], " corresponding to ", Cell[BoxData[ FormBox[ SubsuperscriptBox["G", "B", "*"], TraditionalForm]]], " from the equation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox["H", StyleBox["B", FontWeight->"Bold"], "*"], ".", SubsuperscriptBox["G", "B", "*"]}], "=", "O"}], TraditionalForm]]], " (see ", ButtonBox["(11.3)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Hc=0"], "). It has rank ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "k"}], TraditionalForm]]], ". Next, generate all error vectors ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " of weight at most ", Cell[BoxData[ FormBox["t", TraditionalForm]]], ", compute the ", ButtonBox["syndrome", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl Syndrome"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["H", "B", "*"], SuperscriptBox[ StyleBox["e", FontVariations->{"Underline"->True}], "T"]}], TraditionalForm]]], " for each of them, and put these in a table.\nFor the intercepted vector ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " one first computes the syndrome ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ StyleBox["s", FontVariations->{"Underline"->True}], "T"], "=", RowBox[{"H", ".", SuperscriptBox[ StyleBox["r", FontVariations->{"Underline"->True}], "T"]}]}], TraditionalForm]]], ". From the table one can find the corresponding error vector ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], ". Subtracting ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " one gets the codeword ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "=", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", SubsuperscriptBox["G", "B", "*"]}]}], TraditionalForm]]], " (see ", ButtonBox["(11.5)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl enc McE"], "). With a simple Gaussian elimination process one can now retrieve the \ transmitted message ", StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], " from this vector ", StyleBox["c", FontSlant->"Italic", FontVariations->{"Underline"->True}], "." }], "Text"], Cell[TextData[{ "The work load of this attack is ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "50"], RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"i"} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], ":" }], "Text"], Cell[BoxData[ RowBox[{"N", "[", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "50"], RowBox[{"Binomial", "[", RowBox[{"n", ",", "i"}], "]"}]}], ",", "5"}], "]"}]], "Input"], Cell[BoxData[ StyleBox["3.36230893411112052`*^85", StyleBoxAutoDelete->True, PrintPrecision->5]], "Output"], Cell[TextData[{ "Example 11.2 (Part 2)\n", StyleBox["The parity check matrix of the code introduced in ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 11.2", BaseStyle->"Hyperlink", ButtonData:>"ExamMcEl Hamming"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" is given by", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", FontWeight->"Bold"], Cell[BoxData[ RowBox[{ RowBox[{"H", "=", RowBox[{"(", GridBox[{ {"1", "1", "0", "1", "1", "0", "0"}, {"1", "0", "1", "1", "0", "1", "0"}, {"0", "1", "1", "1", "0", "0", "1"} }], ")"}]}], ";", RowBox[{"MatrixForm", "[", "H", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "1", "0", "1", "1", "0", "0"}, {"1", "0", "1", "1", "0", "1", "0"}, {"0", "1", "1", "1", "0", "0", "1"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "as can be checked with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Transpose", FontVariations->{"Underline"->True}], " (and ", StyleBox["MatrixForm", FontVariations->{"Underline"->True}], ") as follows" }], "Text", CellChangeTimes->{3.423395170427271*^9, 3.423397070595682*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"U", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"G", ".", RowBox[{"Transpose", "[", "H", "]"}]}], ",", "2"}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "U", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"0", "0", "0"}, {"0", "0", "0"}, {"0", "0", "0"}, {"0", "0", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "Next, we generate all error vectors ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " of weight ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", "1"}], TraditionalForm]]], " and compute their ", ButtonBox["syndrome", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl Syndrome"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["H", "B", "*"], SuperscriptBox[ StyleBox["e", FontVariations->{"Underline"->True}], "T"]}], TraditionalForm]]], ". We put these in a table. Apart from the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", ", StyleBox["Do", FontVariations->{"Underline"->True}], ", and ", StyleBox["Print", FontVariations->{"Underline"->True}], ", we also make use of ", StyleBox["ReplacePart", FontVariations->{"Underline"->True}], ", which replaces the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th coordinate of ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " by the specified value (here its compliment)." }], "Text", CellChangeTimes->{ 3.42339226237741*^9, 3.423392468769356*^9, 3.4233962160589633`*^9, { 3.423471523919674*^9, 3.423471546310442*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"e", "=", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"Print", "[", RowBox[{"e", ",", "\"\< \>\"", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"H", ".", "e"}], ",", "2"}], "]"}]}], "]"}], ";"}], "\n", RowBox[{"Do", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"er", "=", RowBox[{"ReplacePart", "[", RowBox[{"e", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"e", "[", RowBox[{"[", "i", "]"}], "]"}], "+", "1"}], ",", "2"}], "]"}], ",", "i"}], "]"}]}], ",", "\t\t ", RowBox[{"Print", "[", RowBox[{"er", ",", "\"\< \>\"", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"H", ".", "er"}], ",", "2"}], "]"}]}], "]"}]}], "}"}], ",", "\t ", RowBox[{"{", RowBox[{"i", ",", "1", ",", "7"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[{0, 0, 0, 0, 0, 0, 0}, " ", {0, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[{1, 0, 0, 0, 0, 0, 0}, " ", {1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[{0, 1, 0, 0, 0, 0, 0}, " ", {1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[{0, 0, 1, 0, 0, 0, 0}, " ", {0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}], "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[{0, 0, 0, 1, 0, 0, 0}, " ", {1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[{0, 0, 0, 0, 1, 0, 0}, " ", {1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}], "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[{0, 0, 0, 0, 0, 1, 0}, " ", {0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}], "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[{0, 0, 0, 0, 0, 0, 1}, " ", {0, 0, 1}], Editable->False]], "Print"], Cell[TextData[{ "With this table it is now easy to find a codeword at distance ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", "1"}], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"r", "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], ";", RowBox[{"Mod", "[", RowBox[{ RowBox[{"H", ".", "r"}], ",", "2"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "This is the syndrome corresponding to ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["e", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{ "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], ")"}]}], TraditionalForm]]], ", so the closest codeword is given by" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"e", "=", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], ";", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "-", "e"}], ",", "2"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "Since the generator matrix ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " in this ", ButtonBox["example", BaseStyle->"Hyperlink", ButtonData:>"ExamMcEl Hamming"], " has the form ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["I", "4"], "|", "P"}], ")"}], TraditionalForm]]], ", we can recover the transmitted information ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " from the first four coordinates in ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], ": " }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "Guessing ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " Correct and Independent Coordinates" }], "Subsubsection", CellTags->"SubsubsMcEl guessing k correct"], Cell[TextData[{ "The cryptanalist selects ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " random positions and hopes that they are not in error, i.e. he hopes that \ ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " is zero on these ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " positions. If the restriction of matrix ", Cell[BoxData[ FormBox[ SubsuperscriptBox["G", "B", "*"], TraditionalForm]]], " to these ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " positions still has rank ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ", one can find a candidate ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], "' for the information vector ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " with a Gaussian elimination process. \nIf the rank is less than ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " it will very likely still be close to ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " (see ", ButtonBox["Problem 11.2", BaseStyle->"Hyperlink", ButtonData:>"ProbMcEl rank"], "). So, the Gaussian elimination process will either lead to only a few \ possibilities for ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], "' or to no solution at all. \nFor each possible candidate ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], "' compute ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}], ".", SubsuperscriptBox["G", "b", "*"]}], TraditionalForm]]], " and check if it lies at distance ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", "t"}], TraditionalForm]]], " from the intercepted vector ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], ". If so, one has found the correct ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "The probability that the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " positions are correct is about ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "-", RowBox[{"t", "/", "n"}]}], ")"}], "k"], TraditionalForm]]], ". The Gaussian elimination process involves ", Cell[BoxData[ FormBox[ SuperscriptBox["k", "3"], TraditionalForm]]], " steps. So, the expected workload of this method is" }], "Text"], Cell[BoxData[ RowBox[{"N", "[", RowBox[{ RowBox[{ SuperscriptBox["k", "3"], SuperscriptBox[ RowBox[{"(", RowBox[{"1", "-", RowBox[{"t", "/", "n"}]}], ")"}], RowBox[{"-", "k"}]]}], ",", "5"}], "]"}]], "Input"], Cell[BoxData[ StyleBox["3.55040368640032477`*^19", StyleBoxAutoDelete->True, PrintPrecision->5]], "Output"], Cell["\<\ Although this attack is the most efficient thus far, it is still not a \ feasible attack.\ \>", "Text"], Cell[TextData[{ "Example 11.2 (Part 3)\n", StyleBox["Guessing that coordinates ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"2", ",", "4", ",", "5"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", and 7 are error-free in ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 11.2", BaseStyle->"Hyperlink", ButtonData:>"ExamMcEl Hamming"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" we use the Mathematica functions ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["Transpose", FontFamily->"Times New Roman", FontSize->11, FontWeight->"Plain", FontVariations->{"Underline"->True}], StyleBox[" and ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["MatrixForm", FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"Underline"->True}], StyleBox[" to get the restriction ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox["G", TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox["' of the generator matrix ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox["G", TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" to this guess and the restriction ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox["' of the intercepted vector ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" of ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 11.2", BaseStyle->"Hyperlink", ButtonData:>"ExamMcEl Hamming"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" to this guess.", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", CellChangeTimes->{3.4233951750366755`*^9, 3.4233970750332108`*^9}, FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"G", "=", RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "1", "1", "0"}, {"0", "1", "0", "0", "1", "0", "1"}, {"0", "0", "1", "0", "0", "1", "1"}, {"0", "0", "0", "1", "1", "1", "1"} }], ")"}]}], ";", RowBox[{"Guess", "=", RowBox[{"{", RowBox[{"2", ",", "4", ",", "5", ",", "7"}], "}"}]}]}], "\n", RowBox[{ RowBox[{"RestrG", "=", " ", RowBox[{ RowBox[{"Transpose", "[", "G", "]"}], " ", "[", RowBox[{"[", " ", "Guess", "]"}], "]"}]}], " ", ";"}], "\n", RowBox[{"MatrixForm", "[", RowBox[{"Transpose", "[", "RestrG", "]"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"2", ",", "4", ",", "5", ",", "7"}], "}"}]], "Output"], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"0", "0", "1", "0"}, {"1", "0", "1", "1"}, {"0", "0", "0", "1"}, {"0", "1", "1", "1"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[BoxData[{ RowBox[{ RowBox[{"r", " ", "=", " ", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{"rRestr", "=", RowBox[{"r", "[", RowBox[{"[", "Guess", "]"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["LinearSolve", FontVariations->{"Underline"->True}], ", ", StyleBox["NullSpace", FontVariations->{"Underline"->True}], ", and ", StyleBox["Transpose", FontVariations->{"Underline"->True}], " to see if the equation " }], "Text", CellChangeTimes->{3.4233950470358562`*^9, 3.4233952163963156`*^9, 3.423396781671958*^9}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"LinearSolve", "[", RowBox[{"RestrG", ",", "rRestr", ",", " ", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"NullSpace", "[", RowBox[{"RestrG", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", "}"}]], "Output"], Cell[TextData[{ "has a solution.\nApparently the restriction of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " to the four coordinates has full rank. The solution ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], ")"}], TraditionalForm]]], " gives rise to a codeword that has distance ", Cell[BoxData[ FormBox[ RowBox[{"\[GreaterEqual]", "2"}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], "." }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"m1", "=", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "-", RowBox[{"m1", ".", "G"}]}], ",", "2"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell["Let us now try another guess.", "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"Guess", "=", RowBox[{"{", RowBox[{"1", ",", "3", ",", "6", ",", "7"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"RestrG", "=", " ", RowBox[{ RowBox[{"Transpose", "[", "G", "]"}], " ", "[", RowBox[{"[", " ", "Guess", "]"}], "]"}]}], " ", ";"}], "\n", RowBox[{"MatrixForm", "[", RowBox[{"Transpose", "[", "RestrG", "]"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "0", "1", "0"}, {"0", "0", "0", "1"}, {"0", "1", "1", "1"}, {"0", "0", "1", "1"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[BoxData[{ RowBox[{ RowBox[{"r", " ", "=", " ", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{"rRestr", "=", RowBox[{"r", "[", RowBox[{"[", "Guess", "]"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[BoxData[{ RowBox[{"LinearSolve", "[", RowBox[{"RestrG", ",", "rRestr", ",", " ", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"NullSpace", "[", RowBox[{"RestrG", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", "}"}]], "Output"], Cell[TextData[{ "The solution ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], ")"}], TraditionalForm]]], " now turns out to generate a codeword at distance ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", "1"}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}]}], ";", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "-", RowBox[{"m", ".", "G"}]}], ",", "2"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], ")"}], TraditionalForm]]], " was the transmitted information." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "To let ", StyleBox["Mathematica", FontSlant->"Italic"], " make guesses one can use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["RandomKSubset", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4214693954818597`*^9, 3.4214694053099847`*^9}, { 3.4234716306391068`*^9, 3.423471642576683*^9}}], Cell[BoxData[ RowBox[{"RandomKSubset", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6", ",", "7"}], "}"}], ",", "4"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"2", ",", "3", ",", "4", ",", "6"}], "}"}]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["Multiple Encryptions of the Same Message ", "Subsubsection", CellTags->"SubsubsMcEl multiple"], Cell[TextData[{ "It is not safe to encrypt the same message several times with the same \ encryption matrix ", Cell[BoxData[ FormBox[ SubscriptBox["G", "B"], TraditionalForm]]], ". To see this, let us consider two different encryptions of the same \ message ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], ", say ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], "=", RowBox[{ RowBox[{ StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], ".", SubsuperscriptBox["G", "B", "*"]}], "+", StyleBox["e", FontSlant->"Italic", FontVariations->{"Underline"->True}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"r", "'"}], FontVariations->{"Underline"->True}], "=", RowBox[{ RowBox[{ StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], ".", SubsuperscriptBox["G", "B", "*"]}], "+", StyleBox[ RowBox[{"e", "'"}], FontSlant->"Italic", FontVariations->{"Underline"->True}]}]}], TraditionalForm]]], " (see ", ButtonBox["(11.5)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl enc McE"], "). On the coordinates where ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"r", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], " disagree, we know for sure that either ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"e", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], " has a 1. On the coordinates where ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"r", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], " agree, we know almost for sure that both ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"r", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], " are error-free.\nTo be more precise, if the error vectors ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"e", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], " are truly randomly chosen, as they should be, one expects the following \ values" }], "Text"], Cell[BoxData[GridBox[{ { StyleBox[ RowBox[{"(", RowBox[{ SubscriptBox["e", "i"], ",", RowBox[{ SubscriptBox["e", "i"], "'"}]}], ")"}], FontSlant->"Italic"], RowBox[{"#", " ", "coordinates"}]}, { RowBox[{"(", RowBox[{"0", ",", "0"}], ")"}], StyleBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"n", "-", "t"}], ")"}], "2"], "/", "n"}], FontSlant->"Italic"]}, { RowBox[{ RowBox[{"(", RowBox[{"0", ",", "1"}], ")"}], " ", "or", " ", RowBox[{"(", RowBox[{"1", ",", "0"}], ")"}]}], StyleBox[ RowBox[{"2", "t", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "t"}], ")"}], "/", "n"}]}], FontSlant->"Italic"]}, { RowBox[{"(", RowBox[{"1", ",", "1"}], ")"}], StyleBox[ RowBox[{ SuperscriptBox["t", "2"], "/", "n"}], FontSlant->"Italic"]} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell[TextData[{ "For instance, when the parameters are ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "1024"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "50"}], TraditionalForm]]], ", one expects ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "i"], "=", RowBox[{ RowBox[{ SubscriptBox["e", "i"], "'"}], "=", "1"}]}], TraditionalForm]]], " on roughly ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["50", "2"], "/", "1024"}], "\[TildeTilde]", "2.44"}], TraditionalForm]]], " coordinates.\nAlso, one expects " }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "1024"}], ";", RowBox[{"t", "=", "50"}], ";"}], "\[IndentingNewLine]", RowBox[{"N", "[", RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"n", "-", "t"}], ")"}], "2"], "/", "n"}], ",", "3"}], "]"}]}], "Input", CellChangeTimes->{3.4234718998752046`*^9}], Cell[BoxData[ StyleBox["926.441406250000021`", StyleBoxAutoDelete->True, PrintPrecision->3]], "Output"], Cell[TextData[{ "coordinates where ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"r", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], " agree. At most three of these coordinates are likely to be corrupted." }], "Text"], Cell[TextData[{ "By removing in every possible way ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["t", "2"], "/", "n"}], TraditionalForm]]], " coordinates from the coordinate set where ", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm], " ", "and", " ", FormBox[ StyleBox[ RowBox[{"r", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]}], " "}], TraditionalForm]]], "agree, one almost surely finds a coordinate set that is error free and on \ which the matrix ", Cell[BoxData[ FormBox[ SubsuperscriptBox["G", "B", "*"], TraditionalForm]]], " still has full rank (see ", ButtonBox["Problem 11.2", BaseStyle->"Hyperlink", ButtonData:>"ProbMcEl rank"], "). With a simple Gaussian elimination process one recover ", Cell[BoxData[ FormBox[ StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ StyleBox["r", FontSlant->"Italic", FontVariations->{"Underline"->True}], TraditionalForm]]], "." }], "Text"], Cell["\<\ When the same message has been encrypted more than two times, it is \ correspondingly easier to break the system.\ \>", "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tA Small Example of the McEliece System " }], "Subsection", CellTags->"SubsMcEl Example"], Cell[TextData[{ "Example 11.1 (Part 2)\n", StyleBox["The Goppa code ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "\[Alpha]"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}], ")"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" of ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 11.1", BaseStyle->"Hyperlink", ButtonData:>"ExamMcEl Goppa"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" has a ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["generator matrix", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox["G", TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" that can be computed from the ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["parity check matrix", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl parity ch ma"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox["H", TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" by means of the Mathematica function ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["NullSpace", FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"Underline"->True}], StyleBox[".", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", CellChangeTimes->{{3.42339711939287*^9, 3.4233971283148017`*^9}}, FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"H", "=", RowBox[{"(", GridBox[{ {"0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "0"}, {"0", "0", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "0", "0", "1"}, {"1", "0", "0", "0", "0", "1", "1", "0", "1", "1", "1", "1", "1", "1", "0", "1"}, {"1", "0", "1", "1", "1", "0", "0", "0", "0", "0", "1", "1", "1", "1", "1", "1"}, {"0", "0", "0", "1", "1", "1", "0", "1", "1", "1", "1", "0", "1", "0", "1", "1"}, {"0", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "1", "0", "1"}, {"1", "1", "1", "1", "1", "1", "0", "1", "1", "1", "1", "0", "0", "1", "1", "0"}, {"1", "1", "0", "0", "1", "1", "1", "0", "1", "0", "0", "1", "0", "0", "1", "0"} }], ")"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"G", "=", RowBox[{"NullSpace", "[", RowBox[{"H", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "G", "]"}]}]}], "Input", CellChangeTimes->{3.4234719171721907`*^9}], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1"}, {"1", "0", "1", "0", "1", "1", "0", "1", "0", "0", "0", "0", "0", "0", "1", "0"}, {"1", "0", "0", "1", "1", "1", "1", "1", "0", "0", "0", "0", "0", "1", "0", "0"}, {"0", "0", "1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0"}, {"0", "1", "1", "1", "1", "0", "1", "0", "0", "0", "0", "1", "0", "0", "0", "0"}, {"0", "1", "1", "0", "0", "0", "1", "1", "0", "0", "1", "0", "0", "0", "0", "0"}, {"0", "1", "1", "1", "0", "1", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0"}, {"1", "0", "1", "0", "0", "1", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "The generator matrix ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "\[Alpha]"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}], ")"}], TraditionalForm]]], " will be transformed into ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["G", "*"], "=", RowBox[{"S", ".", "G", ".", "P"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is an invertible matrix and ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " a permutation matrix, as follows:" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"S", "=", RowBox[{"(", GridBox[{ {"1", "1", "1", "1", "1", "1", "1", "1"}, {"0", "1", "1", "1", "1", "1", "1", "1"}, {"0", "0", "1", "1", "1", "1", "1", "1"}, {"0", "0", "0", "1", "1", "1", "1", "1"}, {"0", "0", "0", "0", "1", "1", "1", "1"}, {"0", "0", "0", "0", "0", "1", "1", "1"}, {"0", "0", "0", "0", "0", "0", "1", "1"}, {"0", "0", "0", "0", "0", "0", "0", "1"} }], ")"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"P", "=", RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"}, {"0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"}, {"0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"}, {"0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"}, {"0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"}, {"0", "0", "0", "1", "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", "0", "0", "0"}, {"0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0"}, {"0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0"}, {"0", "0", "0", "0", "0", "0", "1", "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", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0"}, {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0"}, {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0"}, {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1"}, {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0"} }], ")"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"Gstar", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"S", ".", "G", ".", "P"}], ",", "2"}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "Gstar", "]"}]}]}], "Input", CellChangeTimes->{{3.42347192568787*^9, 3.423471929187892*^9}}], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"0", "1", "0", "1", "1", "0", "1", "0", "0", "1", "1", "1", "1", "1", "1", "1"}, {"1", "0", "1", "1", "0", "0", "1", "0", "0", "1", "0", "1", "1", "1", "1", "1"}, {"0", "1", "1", "0", "0", "1", "1", "0", "1", "1", "0", "1", "1", "1", "1", "0"}, {"1", "1", "1", "1", "1", "0", "1", "1", "0", "1", "0", "1", "1", "1", "0", "0"}, {"1", "0", "1", "0", "0", "1", "1", "1", "0", "1", "0", "1", "1", "0", "0", "0"}, {"1", "1", "0", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "0", "0", "0"}, {"1", "0", "1", "0", "1", "0", "1", "1", "1", "1", "0", "0", "0", "0", "0", "0"}, {"1", "1", "0", "1", "0", "0", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "A possible encoding of the information sequence ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1"}], ")"}], TraditionalForm]]], " is given by" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"err", "=", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{"cw", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"m", ".", "Gstar"}], "+", "err"}], ",", "2"}], "]"}]}]}], "Input",\ GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "Note that errors have been introduced at coordinates 5 and 9.\nAn \ eavesdropper has no efficient algorithm to find the information vector ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " from the word ", StyleBox["cw", FontSlant->"Italic", FontVariations->{"Underline"->True}], ".\nThe legitimate receiver will first compute ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["cd", FontSlant->"Italic", FontVariations->{"Underline"->True}], "=", RowBox[{ StyleBox["cw", FontSlant->"Italic", FontVariations->{"Underline"->True}], ".", SuperscriptBox["P", RowBox[{"-", "1"}]]}]}], TraditionalForm]]], " with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["Inverse", BaseStyle->"Link", ButtonData->"paclet:ref/Inverse"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"PInv", "=", RowBox[{"Inverse", "[", RowBox[{"P", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], ";"}], "\n", RowBox[{"cd", "=", RowBox[{"cw", ".", "PInv"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "Next, this vector has to be decoded with a decoding algorithm of the Goppa \ code ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "\[Alpha]"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}], ")"}], TraditionalForm]]], ". Such a method has not been discussed here. The outcome turns out to be \ the vector ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], "=", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]}], TraditionalForm]]], ". This can be checked by computing ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "'"}], ".", "G"}], TraditionalForm]]], " and compare that with ", StyleBox["cd", FontSlant->"Italic", FontVariations->{"Underline"->True}], ". The difference is an error vector ", StyleBox["err", FontSlant->"Italic", FontVariations->{"Underline"->True}], "' of weight 2 which is exactly", StyleBox[" ", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ StyleBox["err", FontSlant->"Italic", FontVariations->{"Underline"->True}], ".", SuperscriptBox["P", RowBox[{"-", "1"}]]}], TraditionalForm]]], StyleBox[".", FontSlant->"Italic"] }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"mpr", "=", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{"errpr", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"mpr", ".", "G"}], "-", "cd"}], ",", "2"}], "]"}]}], "\n", RowBox[{"err", ".", "PInv"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "To find ", StyleBox["m", FontSlant->"Italic", FontVariations->{"Underline"->True}], ", the legitimate receiver computes ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}], ".", SuperscriptBox["S", RowBox[{"-", "1"}]]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"mpr", "=", RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"InvS", "=", RowBox[{"Inverse", "[", RowBox[{"S", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], ";"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"mpr", ".", "InvS"}], ",", "2"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]], "Output"], Cell["This is indeed the original message.", "Text", FontSlant->"Italic"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tAnother Technique to Decode Linear Codes" }], "Section", CellTags->"SectMcEl Other technique"], Cell[TextData[{ "A large research effort has been made in the past to find decoding \ algorithms for general linear codes. The ", ButtonBox["McEliece cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"SectMcEl McEliece"], " has only intensified this quest. Most of these algorithms are of the type \ that was discussed before: find ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " coordinates where the generator matrix has full rank and where the \ received vector is error free. Such a technique is called ", StyleBox["information set decoding", FontSlant->"Italic"], ".\nHere we describe a technique introduced by Van Tilburg ", ButtonBox["[vTbu88]", BaseStyle->"Hyperlink", ButtonData:>"RefvTbu88"], " (see also ", ButtonBox["[LeeB88]", BaseStyle->"Hyperlink", ButtonData:>"RefLeeB88"], ")." }], "Text", GeneratedCell->True, CellTags->"DefMcEl Inf Set Dec"], 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["Bit Swapping Technique", FontSlant->"Italic"], "\nLet ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " be the generator matrix of a binary code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " of length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", dimension ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ", and minimum distance ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ". \nLet ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], "=", RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "+", StyleBox["e", FontVariations->{"Underline"->True}]}]}], TraditionalForm]]], " be a received vector, where ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "\[Element]", "C"}], TraditionalForm]]], " (say ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "=", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", "G"}]}], TraditionalForm]]], ") and ", StyleBox["e", FontSlant->"Italic", FontVariations->{"Underline"->True}], " has weight at most ", Cell[BoxData[ FormBox["t", TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"2", "t"}], "+", "1"}], "\[LessEqual]", "d"}], TraditionalForm]]], " .\n\n", StyleBox["Step 1", FontWeight->"Bold"], ": Apply suitable elementary row operations and a column permutation to ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " to bring ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " in so-called standard form i.e. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", ".", "G", ".", "P"}], "=", RowBox[{"(", RowBox[{ SubscriptBox["I", "k"], "|", "A"}], ")"}]}], TraditionalForm]]], ". \nPut ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"r", "'"}], FontVariations->{"Underline"->True}], "=", RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], ".", "P"}]}], TraditionalForm]]], " and write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], "'"}], "=", RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox[ StyleBox["r", FontVariations->{"Underline"->True}], "1"], "'"}], ",", RowBox[{ SubscriptBox[ StyleBox["r", FontVariations->{"Underline"->True}], "2"], "'"}]}], ")"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["r", FontVariations->{"Underline"->True}], "1"], "'"}], TraditionalForm]]], " has length ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ".\nNote that ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], "=", RowBox[{ RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", "G", ".", "P"}], "+", RowBox[{ StyleBox["e", FontVariations->{"Underline"->True}], ".", "P"}]}], "=", RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", RowBox[{ SuperscriptBox["S", RowBox[{"-", "1"}]], "(", RowBox[{ SubscriptBox["I", "k"], "|", "A"}], ")"}]}], "+", RowBox[{ StyleBox["e", FontVariations->{"Underline"->True}], "'"}]}]}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], "' have the same weight.\n\n", StyleBox["Step 2", FontWeight->"Bold"], ": Put ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "'"}], "=", RowBox[{ RowBox[{ SubscriptBox[ StyleBox["r", FontVariations->{"Underline"->True}], "1"], "'"}], ".", RowBox[{"(", RowBox[{ SubscriptBox["I", "k"], "|", "A"}], ")"}]}]}], TraditionalForm]]], ". The first ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " coordinates of ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], "' and ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], "' are identical.\n\n", StyleBox["Step 3", FontWeight->"Bold"], ": If ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], "' and ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], "' differ in at most ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " coordinates, conclude that the first ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " coordinates are error-free. Compute ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["r", FontVariations->{"Underline"->True}], "'"}], "=", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ".", SuperscriptBox["S", RowBox[{"-", "1"}]]}]}], TraditionalForm]]], " with Gaussian elimination.\nLet the algorithm terminate.\n\n", StyleBox["Step 4", FontWeight->"Bold"], ": If ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], "' and ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], "' differ in more than ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " coordinates, pick a random row index ", Cell[BoxData[ FormBox[ RowBox[{"i", ",", " ", RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}]}], TraditionalForm]]], ", and column index ", Cell[BoxData[ FormBox[ RowBox[{"j", ",", " ", RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"n", "-", "k"}]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["A", RowBox[{"i", ",", "j"}]], "\[NotEqual]", "0"}], TraditionalForm]]], ". Construct a new matrix ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["I", "k"], "|", "A"}], ")"}], TraditionalForm]]], " by interchanging the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th and the ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"k", "+", "j"}], ")"}], TraditionalForm]]], "-th column of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " (the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th column of ", Cell[BoxData[ FormBox[ SubscriptBox["I", "k"], TraditionalForm]]], " is swapped with the ", Cell[BoxData[ FormBox["j", TraditionalForm]]], "-th column of ", Cell[BoxData[ FormBox["A", TraditionalForm]]], "). \nReturn to Step 1, but use there only elementary row operations with \ the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th row to bring the matrix in standard form again. " }], "Theorem", CellTags->"AlgMcEl Bit Swap"], Cell[TextData[{ "Let us demonstrate one cycle of the above algorithm. We continue with ", ButtonBox["Example 11.2", BaseStyle->"Hyperlink", ButtonData:>"ExamMcEl Hamming"], "." }], "Text"], Cell["Example 11.2 (Part 4)", "Text", FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"G", "=", RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "1", "1", "0"}, {"0", "1", "0", "0", "1", "0", "1"}, {"0", "0", "1", "0", "0", "1", "1"}, {"0", "0", "0", "1", "1", "1", "1"} }], ")"}]}], ";", RowBox[{"MatrixForm", "[", "G", "]"}]}], "\n", RowBox[{"r", "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "1", "1", "0"}, {"0", "1", "0", "0", "1", "0", "1"}, {"0", "0", "1", "0", "0", "1", "1"}, {"0", "0", "0", "1", "1", "1", "1"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "The matrix ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " is already in standard form. We also see that the first four coordinates \ of ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], " lead to a codeword ", Cell[BoxData[ FormBox[ StyleBox["c", FontVariations->{"Underline"->True}], TraditionalForm]]], "' that has distance 2 to ", Cell[BoxData[ FormBox[ StyleBox["r", FontVariations->{"Underline"->True}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"r1", "=", RowBox[{"Take", "[", RowBox[{"r", ",", "4"}], "]"}]}], "\n", RowBox[{"cc", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r1", ".", "G"}], ",", "2"}], "]"}]}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "-", "cc"}], ",", "2"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "To make a swap we pick ", Cell[BoxData[ FormBox[ SubscriptBox["G", RowBox[{"2", ",", "5"}]], TraditionalForm]]], " as non-zero entry from columns 5-7 in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ". We perform a swap of the 2-nd and 5-th column of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ", by using the function:" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"ColumnSwap", "[", RowBox[{"B_", ",", "i_", ",", "j_"}], "]"}], ":=", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"U", ",", "V"}], "}"}], ",", RowBox[{ RowBox[{"U", "=", RowBox[{"Transpose", "[", "B", "]"}]}], ";", RowBox[{"V", "=", RowBox[{"U", "[", RowBox[{"[", "i", "]"}], "]"}]}], ";", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "i", "]"}], "]"}], "=", RowBox[{"U", "[", RowBox[{"[", "j", "]"}], "]"}]}], ";", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "j", "]"}], "]"}], "=", "V"}], ";", RowBox[{"Transpose", "[", "U", "]"}]}]}], "]"}]}]], "Input"], Cell["\<\ G1=ColumnSwap[G,2,5]; MatrixForm[G1]\ \>", "Input", CellTags->"S5.52.1"], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "1", "0", "0", "0", "1", "0"}, {"0", "1", "0", "0", "1", "0", "1"}, {"0", "0", "1", "0", "0", "1", "1"}, {"0", "1", "0", "1", "0", "1", "1"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "To bring this in systematic form we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["RowReduce", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423471987375765*^9, 3.4234719958133183`*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"G2", "=", RowBox[{"RowReduce", "[", RowBox[{"G1", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "G2", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "1", "1", "1"}, {"0", "1", "0", "0", "1", "0", "1"}, {"0", "0", "1", "0", "0", "1", "1"}, {"0", "0", "0", "1", "1", "1", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "In order to analyze the complexity of the bit-swapping algorithm, we let ", Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "+", "u"}], "|", "l"}], ")"}], TraditionalForm]]], " denote the conditional probability that exactly ", Cell[BoxData[ FormBox[ RowBox[{"l", "+", "u"}], TraditionalForm]]], " of the first ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " positions of ", Cell[BoxData[ FormBox[ StyleBox["e", FontVariations->{"Underline"->True}], TraditionalForm]]], " are in error after a swap given that precisely ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " were in error before the swap (", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "=", RowBox[{"-", "1"}]}], ",", "0", ",", "1"}], TraditionalForm]]], "). \nLet ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"min", RowBox[{"{", RowBox[{"t", ",", "k"}], "}"}]}]}], TraditionalForm]]], ". Then the following straightforward relations hold:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "1"}], "|", "l"}], ")"}], "=", RowBox[{ FractionBox["l", "k"], "\[Times]", FractionBox[ RowBox[{"n", "-", "k", "-", "t", "+", "l"}], RowBox[{"n", "-", "k"}]]}]}], ","}], TraditionalForm]]], "\t\t\tif ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "\[LessEqual]", "l", "\[LessEqual]", "a"}], ","}], TraditionalForm]]] }], "NumberedEquation", CellTags->"FormMcEl Pr(l-1|l)"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "+", "1"}], "|", "l"}], ")"}], "=", RowBox[{ FractionBox[ RowBox[{"k", "-", "l"}], "k"], "\[Times]", FractionBox[ RowBox[{"t", "-", "l"}], RowBox[{"n", "-", "k"}]]}]}], ","}], TraditionalForm]]], "\t\t\tif ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "\[LessEqual]", "l", "\[LessEqual]", RowBox[{"a", "-", "1"}]}], ","}], TraditionalForm]]] }], "NumberedEquation", CellTags->"FormMcEl Pr(l+1|l)"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{"l", "|", "l"}], ")"}], TraditionalForm]]], "=", Cell[BoxData[ FormBox[ RowBox[{"{", GridBox[{ { RowBox[{ RowBox[{"1", "-", RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "1"}], "|", "l"}], ")"}], "-", RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "+", "1"}], "|", "l"}], ")"}]}], ","}]}, { RowBox[{ RowBox[{"1", "-", RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "1"}], "|", "l"}], ")"}]}], ","}]} }]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", "1"}], "\[LessEqual]", "l", "\[LessEqual]", RowBox[{"a", "-", "1"}]}], ","}]}, { RowBox[{ RowBox[{"if", " ", "l"}], "=", RowBox[{"a", "."}]}]} }], TraditionalForm]]] }], "NumberedEquation", CellTags->"FormMcEl Pr(l|l)"], 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"], "\nConsider a (binary) code with parameters ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "23"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "12"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "3"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{ RowBox[{"min", RowBox[{"{", RowBox[{"k", ",", "t"}], "}"}]}], "=", "3."}]}], TraditionalForm]]], " The values of ", Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "1"}], "|", "l"}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "+", "1"}], "|", "l"}], ")"}], TraditionalForm]]], " can be computed (and printed) from ", ButtonBox["(11.6)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Pr(l-1|l)"], " and ", ButtonBox["(11.7)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Pr(l+1|l)"], " with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Min", FontVariations->{"Underline"->True}], ", ", StyleBox["Do", FontVariations->{"Underline"->True}], ", and ", StyleBox["Print", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{ 3.423392268752451*^9, 3.4233924765194054`*^9, {3.4234720290635314`*^9, 3.4234720305010405`*^9}}, CellTags->"ExamMcEl Golay"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "23"}], ";", RowBox[{"k", "=", "12"}], ";", RowBox[{"t", "=", "3"}], ";", RowBox[{"a", "=", RowBox[{"Min", "[", RowBox[{"k", ",", "t"}], "]"}]}], ";", RowBox[{ RowBox[{"PrDown", "[", "l_", "]"}], ":=", RowBox[{"l", "*", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "k", "-", "t", "+", "l"}], ")"}], "/", RowBox[{"(", RowBox[{"k", "*", RowBox[{"(", RowBox[{"n", "-", "k"}], ")"}]}], ")"}]}]}]}], ";", RowBox[{ RowBox[{"PrUp", "[", "l_", "]"}], ":=", RowBox[{ RowBox[{"(", RowBox[{"k", "-", "l"}], ")"}], "*", RowBox[{ RowBox[{"(", RowBox[{"t", "-", "l"}], ")"}], "/", RowBox[{"(", RowBox[{"k", "*", RowBox[{"(", RowBox[{"n", "-", "k"}], ")"}]}], ")"}]}]}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\\"", ",", RowBox[{"i", "-", "1"}], ",", "\"\<|\>\"", ",", "i", ",", "\"\<)=\>\"", ",", RowBox[{"PrDown", "[", "i", "]"}]}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "a", ",", "1", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}], ";", RowBox[{"Print", "[", "\"\\"", "]"}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\\"", ",", RowBox[{"i", "+", "1"}], ",", "\"\<|\>\"", ",", "i", ",", "\"\<)=\>\"", ",", RowBox[{"PrUp", "[", "i", "]"}]}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", RowBox[{"a", "-", "1"}], ",", "1", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Pr(\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\"|\"\>", "\[InvisibleSpace]", "3", "\[InvisibleSpace]", "\<\")=\"\>", "\[InvisibleSpace]", FractionBox["1", "4"]}], SequenceForm["Pr(", 2, "|", 3, ")=", Rational[1, 4]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Pr(\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\"|\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\")=\"\>", "\[InvisibleSpace]", FractionBox["5", "33"]}], SequenceForm["Pr(", 1, "|", 2, ")=", Rational[5, 33]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Pr(\"\>", "\[InvisibleSpace]", "0", "\[InvisibleSpace]", "\<\"|\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\")=\"\>", "\[InvisibleSpace]", FractionBox["3", "44"]}], SequenceForm["Pr(", 0, "|", 1, ")=", Rational[3, 44]], Editable->False]], "Print"], Cell[BoxData["\<\"and\"\>"], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Pr(\"\>", "\[InvisibleSpace]", "3", "\[InvisibleSpace]", "\<\"|\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\")=\"\>", "\[InvisibleSpace]", FractionBox["5", "66"]}], SequenceForm["Pr(", 3, "|", 2, ")=", Rational[5, 66]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Pr(\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\"|\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\")=\"\>", "\[InvisibleSpace]", FractionBox["1", "6"]}], SequenceForm["Pr(", 2, "|", 1, ")=", Rational[1, 6]], Editable->False]], "Print"], Cell[TextData[{ "Note that the probability of a successful swap gets smaller for smaller \ values of ", Cell[BoxData[ FormBox["l", TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], 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["N", "l"], ",", " ", RowBox[{"1", "\[LessEqual]", "l", "\[LessEqual]", "a"}]}], TraditionalForm]]], ", denote the expected number of swaps needed to pass from a state with ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " errors to a state with ", Cell[BoxData[ FormBox[ RowBox[{"l", "-", "1"}], TraditionalForm]]], " errors. \nThen, the ", Cell[BoxData[ FormBox[ SubscriptBox["N", "l"], TraditionalForm]]], "'s can be computed recursively by" }], "Theorem"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["N", "a"], "=", RowBox[{ FractionBox["1", RowBox[{"Pr", "(", RowBox[{ RowBox[{"a", "-", "1"}], "|", "a"}], ")"}]], "=", FractionBox["1", RowBox[{"1", "-", RowBox[{"Pr", "(", RowBox[{"a", "|", "a"}], ")"}]}]]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormMcEl Na="], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["N", RowBox[{"l", "-", "1"}]], "=", FractionBox[ RowBox[{"1", "+", RowBox[{ RowBox[{"Pr", "(", RowBox[{"l", "|", RowBox[{"l", "-", "1"}]}], ")"}], SubscriptBox["N", "l"]}]}], RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "2"}], "|", RowBox[{"l", "-", "1"}]}], ")"}]]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormMcEl Nl="], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], "\nThe first equality in equation (11.9) follows directly from the \ definition of ", Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{ RowBox[{"a", "-", "1"}], "|", "a"}], ")"}], TraditionalForm]]], ". The second equality follows from ", ButtonBox["(11.8)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Pr(l|l)"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "To show (11.10), we note that from state ", Cell[BoxData[ FormBox[ RowBox[{"l", "-", "1"}], TraditionalForm]]], " there are three possible directions for the algorithm to follow:\ni) with \ probability ", Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "2"}], "|", RowBox[{"l", "-", "1"}]}], ")"}], TraditionalForm]]], " it goes to state ", Cell[BoxData[ FormBox[ RowBox[{"l", "-", "2"}], TraditionalForm]]], " in one step.\nii) with probability ", Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "1"}], "|", RowBox[{"l", "-", "1"}]}], ")"}], TraditionalForm]]], " it stays in state ", Cell[BoxData[ FormBox[ RowBox[{"l", "-", "1"}], TraditionalForm]]], " and so one can expect the algorithm to reach state ", Cell[BoxData[ FormBox[ RowBox[{"l", "-", "2"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", SubscriptBox["N", RowBox[{"l", "-", "1"}]]}], TraditionalForm]]], " steps. \niii) With probability ", Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{"l", "|", RowBox[{"l", "-", "1"}]}], ")"}], TraditionalForm]]], " it goes back to state ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " and so one expects it to reach state ", Cell[BoxData[ FormBox[ RowBox[{"l", "-", "2"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", SubscriptBox["N", "l"], "+", SubscriptBox["N", RowBox[{"l", "-", "1"}]]}], TraditionalForm]]], " steps." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormMcEl Pr(l|l)"], Cell["The above proves the following recurrence relation", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["N", RowBox[{"l", "-", "1"}]], "=", RowBox[{ RowBox[{ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "2"}], "|", RowBox[{"l", "-", "1"}]}], ")"}], ".1"}], "+", RowBox[{ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "1"}], "|", RowBox[{"l", "-", "1"}]}], ")"}], ".", RowBox[{"{", RowBox[{"1", "+", SubscriptBox["N", RowBox[{"l", "-", "1"}]]}], "}"}]}], "+"}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "(", RowBox[{"l", "|", RowBox[{"l", "-", "1"}]}], ")"}], ".", RowBox[{"{", RowBox[{"1", "+", SubscriptBox["N", "l"], "+", SubscriptBox["N", RowBox[{"l", "-", "1"}]]}], "}"}]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "which reduces to ", ButtonBox["(11.10)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Nl="], " because ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "2"}], "|", RowBox[{"l", "-", "1"}]}], ")"}], "=", RowBox[{"1", "-", RowBox[{"Pr", "(", RowBox[{ RowBox[{"l", "-", "1"}], "|", RowBox[{"l", "-", "1"}]}], ")"}]}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{"Pr", "(", RowBox[{"l", "|", RowBox[{"l", "-", "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[{ "Note that in the calculations of ", Cell[BoxData[ FormBox[ SubscriptBox["N", "l"], TraditionalForm]]], " only probabilities of the form ", Cell[BoxData[ FormBox[ RowBox[{"Pr", "(", RowBox[{ RowBox[{"i", "-", "1"}], "|", "i"}], ")"}], TraditionalForm]]], " play a role." }], "Text"], Cell[TextData[{ "Example 11.3 (Part 2) \n", StyleBox["Continuing with ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 11.3", BaseStyle->"Hyperlink", ButtonData:>"ExamMcEl Golay"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", we see that the values of ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ SubscriptBox["N", "l"], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" can be computed recursively with ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["(11.9)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Na="], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" and ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["(11.10)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Pr(l-1|l)"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"Numb", "[", "a", "]"}], "=", RowBox[{"1", "/", RowBox[{"PrDown", "[", "a", "]"}]}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"Numb", "[", RowBox[{"i", "-", "1"}], "]"}], "=", RowBox[{ RowBox[{"(", RowBox[{"1", "+", RowBox[{ RowBox[{"PrUp", "[", RowBox[{"i", "-", "1"}], "]"}], "*", RowBox[{"Numb", "[", "i", "]"}]}]}], ")"}], "/", RowBox[{"PrDown", "[", RowBox[{"i", "-", "1"}], "]"}]}]}], ",", RowBox[{"{", RowBox[{"i", ",", "a", ",", "2", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}]}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{"Print", "[", RowBox[{"\"\\"", ",", "i", ",", "\"\<)=\>\"", ",", RowBox[{"Numb", "[", "i", "]"}]}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "a", ",", "1", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Numb(\"\>", "\[InvisibleSpace]", "3", "\[InvisibleSpace]", "\<\")=\"\>", "\[InvisibleSpace]", "4"}], SequenceForm["Numb(", 3, ")=", 4], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Numb(\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\")=\"\>", "\[InvisibleSpace]", FractionBox["43", "5"]}], SequenceForm["Numb(", 2, ")=", Rational[43, 5]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"Numb(\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\")=\"\>", "\[InvisibleSpace]", FractionBox["1606", "45"]}], SequenceForm["Numb(", 1, ")=", Rational[1606, 45]], Editable->False]], "Print"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe expected number of swaps for the bit swapping algorithm to find ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " error-free coordinates is given by" }], "Theorem", CellTags->"TheoMcEl #steps"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], "a"], RowBox[{ FractionBox[ RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"k"}, {"j"} }], "\[NegativeThinSpace]", ")"}], RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"n", "-", "k"}]}, { RowBox[{"t", "-", "j"}]} }], "\[NegativeThinSpace]", ")"}]}], RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"t"} }], "\[NegativeThinSpace]", ")"}]], RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "1"}], "j"], SubscriptBox["N", "l"]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], "\nThe expected number of steps to reach state 0 when one starts in state ", Cell[BoxData[ FormBox["j", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", "a"}], TraditionalForm]]], ", is given by the expected number of steps to reach state ", Cell[BoxData[ FormBox[ RowBox[{"j", "-", "1"}], TraditionalForm]]], " from state ", Cell[BoxData[ FormBox["j", TraditionalForm]]], ", plus the expected number of steps to reach state ", Cell[BoxData[ FormBox[ RowBox[{"j", "-", "2"}], TraditionalForm]]], " from state ", Cell[BoxData[ FormBox[ RowBox[{"j", "-", "1"}], TraditionalForm]]], ", etc. This explains the inner sum in (11.11): " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["N", "j"], "+", SubscriptBox["N", RowBox[{"j", "-", "1"}]], "+", "\[Ellipsis]", "+", SubscriptBox["N", "1"]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "The probability of starting in state ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " is equal to the probability that a randomly selected ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " tuple contains ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " errors. This probability is equal to the fraction of the number of ", Cell[BoxData[ FormBox["t", TraditionalForm]]], "-tuples out of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " that have intersection ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " with a given ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-tuple (and intersection ", Cell[BoxData[ FormBox[ RowBox[{"t", "-", "j"}], TraditionalForm]]], " with the other ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "k"}], TraditionalForm]]], " positions). So, this probability is given by" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ FractionBox[ RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"k"}, {"j"} }], "\[NegativeThinSpace]", ")"}], RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"n", "-", "k"}]}, { RowBox[{"t", "-", "j"}]} }], "\[NegativeThinSpace]", ")"}]}], RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"t"} }], "\[NegativeThinSpace]", ")"}]], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Now, take the product of the two factors above and sum it over all values \ of ", Cell[BoxData[ FormBox["j", 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[{ "Example 11.3 (Part 3)\n", StyleBox["It follows from ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Theorem 11.4", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl #steps"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" that the expected number of swaps that are needed in a code with \ ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"n", "=", "23"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"k", "=", "12"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", and ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"t", "=", "3"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" (as introduced in ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 11.3", BaseStyle->"Hyperlink", ButtonData:>"ExamMcEl Golay"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") to get 12 error-free coordinates is given by: ", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"NS", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], "a"], RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Binomial", "[", RowBox[{"k", ",", "j"}], "]"}], "*", RowBox[{ RowBox[{"Binomial", "[", RowBox[{ RowBox[{"n", "-", "k"}], ",", RowBox[{"t", "-", "j"}]}], "]"}], "/", RowBox[{"Binomial", "[", RowBox[{"n", ",", "t"}], "]"}]}]}], ")"}], RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "1"}], "j"], RowBox[{"Numb", "[", "l", "]"}]}]}]}]}], ";"}], "\n", RowBox[{}], "\[IndentingNewLine]", RowBox[{"N", "[", RowBox[{"NS", ",", "5"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ StyleBox["37.4545203588681907`", StyleBoxAutoDelete->True, PrintPrecision->5]], "Output"], Cell[TextData[{ "The above bit swapping algorithms gives a significant improvement (also \ asymptotically) over the methods explained in ", ButtonBox["Subsection 11.2.3", BaseStyle->"Hyperlink", ButtonData:>"SubsMcEl Security"], ". For the strongest result in this area we refer the reader to ", ButtonBox["[BaKT99]", BaseStyle->"Hyperlink", ButtonData:>"RefBaKvT99"], "." }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Niederreiter Scheme" }], "Section", CellTags->"SectMcEl Niederr"], Cell[TextData[{ "The Niederreiter scheme ", ButtonBox["[Nied86]", BaseStyle->"Hyperlink", ButtonData:>"RefNied86"], " is a variation of the McEliece cryptosystem. It applies the very same idea \ to the ", ButtonBox["parity check matrix", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl parity ch ma"], " of a linear code. The scheme is summarized in the ", ButtonBox["Table 11.2", BaseStyle->"Hyperlink", ButtonData:>"TableMcEl Niederreiter"], " below." }], "Text", GeneratedCell->True], Cell[TextData[{ "So, again we have a Goppa code ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}]}], ")"}], TraditionalForm]]], ", (see ", ButtonBox["(11.1)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl Goppa"], ") defined by user's ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " Goppa polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox[ SubscriptBox["t", "U"], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ SubscriptBox["H", "U"], TraditionalForm]]], " be a parity check matrix of this code. It has size ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["n", "U"], "-", SubscriptBox["k", "U"]}], ")"}], "\[Times]", SubscriptBox["n", "U"]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ SubscriptBox["k", "U"], TraditionalForm]]], " is the dimension of the code.\nThe code ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}]}], ")"}], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ SubscriptBox["t", "u"], TraditionalForm]]], "-error correcting which implies that every vector ", Cell[BoxData[ FormBox[ StyleBox["y", FontVariations->{"Underline"->True}], TraditionalForm]]], " of weight ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"(", RowBox[{"\[LessEqual]", "t"}], ")"}], "U"], TraditionalForm]]], " has a unique ", ButtonBox["syndrome", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl Syndrome"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["H", "U"], ".", StyleBox["y", FontVariations->{"Underline"->True}]}], TraditionalForm]]], ". Existing decoding algorithms for Goppa codes find ", Cell[BoxData[ FormBox[ StyleBox["y", FontVariations->{"Underline"->True}], TraditionalForm]]], " efficiently from its syndrome." }], "Text"], Cell[TextData[{ "Just like in the McEliece system, the structure of the Goppa code has to be \ hidden from the matrix ", Cell[BoxData[ FormBox[ SubscriptBox["H", "U"], TraditionalForm]]], ". This is done by computing" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["H", "U", "*"], "=", RowBox[{ SubscriptBox["S", "U"], SubscriptBox["H", "U"], SubscriptBox["P", "U"]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellTags->"FormMcEl H*=SHP"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], " is a ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["n", "U"], "-", SubscriptBox["k", "U"]}], ")"}], "\[Times]", RowBox[{"(", RowBox[{ SubscriptBox["n", "U"], "-", SubscriptBox["k", "U"]}], ")"}]}], TraditionalForm]]], " invertible matrix and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " a permutation matrix of size ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], " (see ", ButtonBox["(11.4)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl G*=SGP"], ").\nThe matrix ", Cell[BoxData[ FormBox[ SubsuperscriptBox["H", "U", "*"], TraditionalForm]]], " has to be made public, together with the value ", Cell[BoxData[ FormBox[ SubscriptBox["t", "U"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "If Alice wants to send a message to Bob, she looks up Bob's public \ parameters ", Cell[BoxData[ FormBox[ SubsuperscriptBox["H", "B", "*"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["t", "B"], TraditionalForm]]], ". She represents her message by means of a (column) vector ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " of weight ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"\[LessEqual]", "t"}], "B"], TraditionalForm]]], ". She computes ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["v", FontVariations->{"Underline"->True}], "=", RowBox[{ SubsuperscriptBox["H", "B", "*"], ".", StyleBox["m", FontVariations->{"Underline"->True}]}]}], TraditionalForm]]], " and sends that as her ciphertext to Bob." }], "Text"], Cell[TextData[{ "Bob first multiplies ", Cell[BoxData[ FormBox[ StyleBox["v", FontVariations->{"Underline"->True}], TraditionalForm]]], " on the left with ", Cell[BoxData[ FormBox[ SubsuperscriptBox["S", "B", RowBox[{"-", "1"}]], TraditionalForm]]], ". He obtains ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["v", FontVariations->{"Underline"->True}], "'"}], "=", RowBox[{ RowBox[{ SubsuperscriptBox["S", "B", RowBox[{"-", "1"}]], StyleBox["m", FontVariations->{"Underline"->True}]}], StyleBox["=", FontVariations->{"Underline"->True}], RowBox[{ SubscriptBox["H", "B"], "(", RowBox[{ SubscriptBox["P", "B"], StyleBox["m", FontVariations->{"Underline"->True}]}], StyleBox[")", FontVariations->{"Underline"->True}]}]}]}], TraditionalForm]]], " by ", ButtonBox["(11.12)", BaseStyle->"Hyperlink", ButtonData:>"FormMcEl H*=SHP"], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "B"], StyleBox["m", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " is a permutation of ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], ", and thus also of weight ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"(", RowBox[{"\[LessEqual]", "t"}], ")"}], "B"], TraditionalForm]]], ", the decoding algorithm of Bob's Goppa code will find ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], "=", RowBox[{ SubscriptBox["P", "B"], StyleBox["m", FontVariations->{"Underline"->True}]}]}], TraditionalForm]]], " efficiently. The message ", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " can now be recovered by multiplying ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], " on the left with ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "\n", Cell[BoxData[GridBox[{ {"Public", RowBox[{ RowBox[{ SubsuperscriptBox["H", "U", "*"], " ", "and", " ", SubscriptBox["t", "U"], " ", "of", " ", "all", " ", "users", " ", "U"}], "\n", RowBox[{ SubsuperscriptBox["H", "U", "*"], " ", "has", " ", "size", " ", RowBox[{"(", RowBox[{ SubscriptBox["n", "U"], "-", SubscriptBox["k", "U"]}], ")"}], "\[Times]", SubscriptBox["n", "U"]}]}]}, {"Secret", RowBox[{ RowBox[{ SubscriptBox["p", "U"], RowBox[{"(", "x", ")"}]}], ",", SubscriptBox["S", "U"], ",", RowBox[{"and", " ", SubscriptBox["P", "U"], " ", "by", " ", "each", " ", "user", " ", "U", " "}]}]}, {" ", " "}, {"Property", RowBox[{ RowBox[{ SuperscriptBox[ SubscriptBox["S", "U"], RowBox[{"-", "1"}]], SubsuperscriptBox["H", "U", "*"], SubscriptBox["P", "U"], " ", "is", " ", "the", " ", "parity", " ", "check"}], " ", "\n", RowBox[{"matrix", " ", "of", " ", "the", " ", "Goppa", " ", "code"}], " ", "\n", RowBox[{"defined", " ", "by", " ", SubscriptBox["p", "U"], RowBox[{"(", "x", ")"}], " ", "of", " ", "degree", " ", SubscriptBox["t", "U"]}]}]}, {" ", " "}, { RowBox[{ RowBox[{"Format", " ", "of", " ", "message"}], "\n", "\t", RowBox[{"of", " ", "Ann", " ", "to", " ", "Bob"}]}], RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "\[Element]", SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], SubscriptBox["n", "B"]]}], "\n", "\t", RowBox[{ RowBox[{"weight", RowBox[{"(", StyleBox["m", FontVariations->{"Underline"->True}], ")"}]}], "\[LessEqual]", SubscriptBox["t", "B"]}]}]}, {" ", " "}, {"Encryption", RowBox[{ StyleBox["v", FontVariations->{"Underline"->True}], "=", RowBox[{ SubsuperscriptBox["H", "B", "*"], ".", StyleBox["m", FontVariations->{"Underline"->True}]}]}]}, {"Decryption", RowBox[{ RowBox[{ RowBox[{"compute", " ", RowBox[{ StyleBox["v", FontVariations->{"Underline"->True}], "'"}]}], "=", RowBox[{ SuperscriptBox[ SubscriptBox["S", "B"], RowBox[{"-", "1"}]], ".", StyleBox["v", FontVariations->{"Underline"->True}]}]}], "\n", RowBox[{"use", " ", "decoding", " ", "algorithm", " ", "to"}], "\n", "\t", RowBox[{ RowBox[{"find", " ", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], " ", "'"}], "with", " ", RowBox[{ SubsuperscriptBox["H", "B", "*"], ".", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}]}]}], "=", RowBox[{ StyleBox["v", FontVariations->{"Underline"->True}], "'"}]}], "\n", "\t ", RowBox[{ RowBox[{"compute", " ", RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}], ".", SuperscriptBox[ SubscriptBox["P", "B"], RowBox[{"-", "1"}]]}]}], "=", StyleBox["m", FontVariations->{"Underline"->True}]}]}]} }]]] }], "DisplayFormula"], Cell["The Niederreiter cryptosystem", "NumberedTable", CellTags->"TableMcEl Niederreiter"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectMcEl 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 ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " columns in a random ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Times]", "n"}], TraditionalForm]]], " binary matrix have rank ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "? How about the probability that ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", "1"}], TraditionalForm]]], " columns in this matrix have rank?\nCompute these two probabilities for ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "16"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "5"}], TraditionalForm]]], "." }], "Problem", CellTags->"ProbMcEl rank"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " be a linear code of length ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "23"}], TraditionalForm]]], " and dimension ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "12"}], TraditionalForm]]], ". Assume that at most three errors have occurred. What is the complexity of \ the various attacks described in ", ButtonBox["Subsection 11.2.3", BaseStyle->"Hyperlink", ButtonData:>"SubsMcEl Security"], "." }], "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]]], "\nLet ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " be a linear code of length 11 and dimension 6. Suppose that two errors \ have occurred.How many swaps are expected to get 6 error-free coordinates if \ one follows ", ButtonBox["Algorithm 11.2", BaseStyle->"Hyperlink", ButtonData:>"AlgMcEl Bit Swap"], "?" }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tKnapsack Based Systems" }], "Chapter", CellTags->"Chap Knapsack"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Knapsack System" }], "Section", CellTags->"SectKnap Knap System"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Knapsack Problem" }], "Subsection", CellTags->"SubsKnap Knap Problem"], Cell[TextData[{ "In ", ButtonBox["[MerH78]", BaseStyle->"Hyperlink", ButtonData:>"RefMerH78"], ", Merkle and Hellman propose a public key cryptosystem that is based on the \ difficulty of solving the knapsack problem. Since then, other knapsack \ related cryptosystems have been suggested, most of which turned out to be \ insecure. An exception, up to now, is the Chor-Rivest scheme proposed in ", ButtonBox["[ChoR85]", BaseStyle->"Hyperlink", ButtonData:>"RefChoR85"], ", but in ", ButtonBox["[Vaud98]", BaseStyle->"Hyperlink", ButtonData:>"RefVaud98"], " it is shown that the suggested parameters in [ChoR85] are also insecure." }], "Text", GeneratedCell->True], 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[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "n"]}], TraditionalForm]]], " be a sequence of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " positive integers. Let also ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " be an integer. The question if the equation" }], "Definition", CellTags->"DefKnap knapsack"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["x", "1"], SubscriptBox["a", "1"]}], "+", RowBox[{ SubscriptBox["x", "2"], SubscriptBox["a", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["x", "n"], SubscriptBox["a", "n"]}]}], "=", "S"}], TraditionalForm]]]], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.500008, 1, 0.900008], CellTags->"FormKnap knapsack"], Cell[TextData[{ "has a solution with each ", Cell[BoxData[ FormBox[ SubscriptBox["x", "i"], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], " is called the ", StyleBox["knapsack problem", FontSlant->"Italic"], "." }], "Definition", CounterIncrements->"None"], Cell[TextData[{ "Note that we do not ask for a solution of (12.1), the question is only if \ there exists a solution. Finding a ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], "-solution to (12.1) is of course at least as difficult as just finding out \ whether a solution exists." }], "Text"], Cell[TextData[{ "For large ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " the knapsack problem is intractable to solve. In fact it has been shown \ that the knapsack problem is NP-complete (see ", ButtonBox["[GarJ79]", BaseStyle->"Hyperlink", ButtonData:>"RefGarJ79"], " or a very short discussion in ", ButtonBox["Subsection 11.2.2", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl NP-complete"], "). " }], "Text", GeneratedCell->True], Cell[TextData[{ "For some sequences ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " it is not difficult to find a ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], "-solution to ", ButtonBox["(12.1)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], ", resp. to show that no such solution exists. For example, with the \ sequence ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "=", SuperscriptBox["2", RowBox[{"i", "-", "1"}]]}], TraditionalForm]]], ",", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", equation (12.1) will have a solution if and only if ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "S", "\[LessEqual]", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}]}], TraditionalForm]]], ". Finding the solution is very easy in this case. " }], "Text"], Cell[TextData[{ "A much more general class of sequences ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " exists, for which (12.1) is easily solvable. This is the class of \ so-called ", "super-increasing", " sequences." }], "Text"], Cell[TextData[{ "A sequence ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " is called ", StyleBox["super-increasing", FontSlant->"Italic"], ", if for all ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "k", "\[LessEqual]", "n"}], TraditionalForm]]], ", " }], "Text", CellTags->"DefKnap superincreasing"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"k", "-", "1"}]], SubscriptBox["a", "i"]}], "<", SubscriptBox["a", "k"]}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "Algorithm 12.1 solves the knapsack problem for ", "super-increasing", " sequences. It actually finds the solution ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " for each right hand side ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " for which ", ButtonBox["(12.1)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], " is solvable. The idea is very simple: since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"n", "-", "1"}]], SubscriptBox["a", "i"]}], "<", SubscriptBox["a", "n"]}], TraditionalForm]]], ", it follows that in a solution" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "n"], "=", "1"}], TraditionalForm]]], "\t\[DoubleLongLeftRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{"S", "\[GreaterEqual]", SubscriptBox["a", "n"]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Now, subtract ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "n"], SubscriptBox["a", "n"]}], TraditionalForm]]], " from ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " and determine ", Cell[BoxData[ FormBox[ SubscriptBox["x", RowBox[{"n", "-", "1"}]], TraditionalForm]]], " in the same way. So, recursively for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "=", RowBox[{"n", "-", "1"}]}], ",", RowBox[{"n", "-", "2"}], ",", "\[Ellipsis]", ",", "1"}], TraditionalForm]]], " " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "k"], "=", "1"}], TraditionalForm]]], "\t\[DoubleLongLeftRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"S", "-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", RowBox[{"k", "+", "1"}]}], "n"], RowBox[{ SubscriptBox["x", "i"], ".", SubscriptBox["a", "i"]}]}]}], ")"}], "\[GreaterEqual]", SubscriptBox["a", "k"]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "If at the end ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["x", "i"], ".", SubscriptBox["a", "i"]}]}]}], "=", "0"}], TraditionalForm]]], " one has found the solution to ", ButtonBox["(12.1)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], ", otherwise one may conclude that (12.1) does not admit a solution." }], "Text"], Cell[TextData[{ StyleBox["Algorithm ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "Solving the knapsack problem for", StyleBox[" ", FontWeight->"Bold"], "a super-increasing sequence.\n\t", StyleBox["input", FontWeight->"Bold"], "\t\t", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["x", "k"], "}"}], RowBox[{"k", "=", "1"}], "n"], TraditionalForm]]], " a super-increasing sequence of positive integers,\n\t\t\t", Cell[BoxData[ FormBox["S", TraditionalForm]]], " integer\n\t", StyleBox["initialize", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "n"}], TraditionalForm]]], "\n\t", StyleBox["while", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "1"}], TraditionalForm]]], StyleBox["do\tbegin", FontWeight->"Bold"], "\n\t\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"S", "\[GreaterEqual]", SubscriptBox["a", "k"]}], TraditionalForm]]], " ", StyleBox["then", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "k"], "=", "1"}], TraditionalForm]]], " ", StyleBox["else", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "k"], "=", "0"}], TraditionalForm]]], ",\n\t\t\t", StyleBox["put", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", RowBox[{"S", "-", RowBox[{ SubscriptBox["x", "k"], ".", SubscriptBox["a", "k"]}]}]}], TraditionalForm]]], ",\n\t\t\t", StyleBox["put", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", RowBox[{"k", "-", "1"}]}], TraditionalForm]]], "\n\t\t\t", StyleBox["end", FontWeight->"Bold"], "\n\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", "0"}], TraditionalForm]]], StyleBox[" then print", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["x", "k"], "}"}], RowBox[{"k", "=", "1"}], "n"], TraditionalForm]]], " ", StyleBox["else print", FontWeight->"Bold"], " \"no solution\"\t\t\t" }], "Theorem", CellTags->"AlgKnap solve superincr"], 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"], "\nConsider the super-increasing sequence ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "6"], "=", RowBox[{"{", RowBox[{ "22", ",", "89", ",", "345", ",", "987", ",", "4567", ",", "45678"}], "}"}]}], TraditionalForm]]], " and the right hand side ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", "5665"}], TraditionalForm]]], ". To see if ", ButtonBox["(12.1)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], " has a solution we apply ", ButtonBox["Algorithm 12.1", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap solve superincr"], ". \nBecause ", Cell[BoxData[ FormBox[ RowBox[{"S", "<", SubscriptBox["a", "6"]}], TraditionalForm]]], ", we get ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "6"], "=", "0"}], TraditionalForm]]], ". Next, we see that ", Cell[BoxData[ FormBox[ RowBox[{"S", "\[GreaterEqual]", SubscriptBox["a", "5"]}], TraditionalForm]]], ", so we have ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "5"], "=", "1"}], TraditionalForm]]], ". We subtract ", Cell[BoxData[ FormBox[ SubscriptBox["a", "5"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " and get ", Cell[BoxData[ FormBox["1098", TraditionalForm]]], ". We see that this new value of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " satisfies ", Cell[BoxData[ FormBox[ RowBox[{"S", "\[GreaterEqual]", SubscriptBox["a", "4"]}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "4"], "=", "1"}], TraditionalForm]]], ", etc. The final solution is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0"}], "}"}], TraditionalForm]]], ". \nBelow the same process is written in ", StyleBox["Mathematica.", FontSlant->"Italic"], " We make use of the functions ", StyleBox["Length", FontVariations->{"Underline"->True}], ", ", StyleBox["While", FontVariations->{"Underline"->True}], ", ", StyleBox["If", FontVariations->{"Underline"->True}], ", and ", StyleBox["Join", FontVariations->{"Underline"->True}], ". The solution ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "=", "1"}], "6"], TraditionalForm]]], " is formed by prepending each newly found value ", Cell[BoxData[ FormBox[ SubscriptBox["x", "i"], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["x", RowBox[{"i", "+", "1"}]], ",", "\[Ellipsis]", ",", SubscriptBox["x", "6"]}], "}"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", "=", "6"}], ",", "5", ",", "\[Ellipsis]", ",", "1"}], TraditionalForm]]], "." }], "Example", CellChangeTimes->{ 3.4233930840389185`*^9, 3.423394390891032*^9, {3.4234545373476872`*^9, 3.423454539019562*^9}, {3.4234721200641136`*^9, 3.4234721231110086`*^9}}, CellTags->"ExamKnap encryption"], Cell[BoxData[ RowBox[{ RowBox[{"KnapsackForSuperIncreasingSequence", "[", RowBox[{"a_List", ",", "S_"}], "]"}], ":=", "\t", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"n", ",", "x", ",", "X", ",", "T"}], "}"}], ",", RowBox[{ RowBox[{"n", "=", RowBox[{"Length", "[", "a", "]"}]}], ";", RowBox[{"X", "=", RowBox[{"{", "}"}]}], ";", RowBox[{"T", "=", "S"}], ";", "\t\t", RowBox[{"While", "[", RowBox[{ RowBox[{"n", "\[GreaterEqual]", "1"}], ",", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{"T", "\[GreaterEqual]", RowBox[{"a", "[", RowBox[{"[", "n", "]"}], "]"}]}], ",", RowBox[{"x", "=", "1"}], ",", RowBox[{"x", "=", "0"}]}], "]"}], ";", RowBox[{"T", "=", RowBox[{"T", "-", RowBox[{"x", "*", RowBox[{"a", "[", RowBox[{"[", "n", "]"}], "]"}]}]}]}], ";", "\t\t\t\t", RowBox[{"X", "=", RowBox[{"Join", "[", RowBox[{ RowBox[{"{", "x", "}"}], ",", "X"}], "]"}]}], ";", RowBox[{"n", "=", RowBox[{"n", "-", "1"}]}]}]}], "]"}], ";", RowBox[{"If", "[", RowBox[{ RowBox[{"T", "!=", "0"}], ",", RowBox[{"Print", "[", "\"\\"", "]"}], ",", "X"}], "]"}]}]}], "]"}]}]], "Input", CellChangeTimes->{{3.423393090945213*^9, 3.423393115070367*^9}}, CellTags->"InputKnap knap for superincr"], Cell[BoxData[ RowBox[{ RowBox[{"a", "=", RowBox[{"{", RowBox[{ "22", ",", "89", ",", "345", ",", "987", ",", "4567", ",", "45678"}], "}"}]}], ";", RowBox[{"S", "=", "5665"}], ";", RowBox[{"X", "=", RowBox[{"KnapsackForSuperIncreasingSequence", "[", RowBox[{"a", ",", "S"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0"}], "}"}]], "Output"], Cell["Indeed", "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"X", ".", "a"}]], "Input"], Cell[BoxData["5665"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Knapsack System" }], "Subsection", CellTags->"SubsKnap Knap System"], Cell[CellGroupData[{ Cell["Setting Up the Knapsack System", "Subsubsection", CellTags->"SubsubsKnap setting up"], Cell[TextData[{ "The knapsack cryptosystem, as proposed in ", ButtonBox["[MerH78]", BaseStyle->"Hyperlink", ButtonData:>"RefMerH78"], " is based on the apparent difficulty of solving the knapsack problem and \ the ease of solving this problem for super-increasing sequences." }], "Text", GeneratedCell->True], Cell[TextData[{ "Each user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " makes a ", "super-increasing", " sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], ". Next, ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " selects integers ", Cell[BoxData[ FormBox[ SubscriptBox["W", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["N", "U"], TraditionalForm]]], " such that" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["N", "U"], ">", RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], "U"], SubscriptBox["u", "i"]}]}], TraditionalForm]]]], "NumberedEquation", CellTags->"FormKnap M>sum"], Cell["and", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["W", "U"], ",", SubscriptBox["N", "U"]}], ")"}], "=", "1"}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "User ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " computes the numbers" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["u", "i"], "'"}], "=", RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["W", "U"], ".", SubscriptBox["u", "i"]}], " ", "mod", " ", SubscriptBox["N", "U"]}], ")"}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], ","}], TraditionalForm]]] }], "NumberedEquation", CellTags->"FormKnap u'=w.u"], Cell[TextData[{ "and makes the sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " known as his public key. " }], "Text"], Cell[TextData[{ "As a precalculation for the decryption, user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " also computes ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["W", "U", RowBox[{"-", "1"}]], " ", "mod", " ", SubscriptBox["N", "U"]}], TraditionalForm]]], ". \nThe number ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["W", "U", RowBox[{"-", "1"}]], " ", "mod", " ", SubscriptBox["N", "U"]}], TraditionalForm]]], " can be computed with the extended version of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], " (Alg. A.8). Indeed, since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["W", "U"], ",", SubscriptBox["N", "U"]}], ")"}], "=", "1"}], TraditionalForm]]], ", this algorithm will give ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{"1", "=", RowBox[{ RowBox[{"X", ".", SubscriptBox["W", "U"]}], "+", RowBox[{"Y", ".", SubscriptBox["N", "U"]}]}]}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"X", ".", SubscriptBox["W", "U"]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["N", "U"]}], ")"}]}]}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{"X", "=", SubsuperscriptBox["W", "U", RowBox[{"-", "1"}]]}], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "Each user keeps the ", "super-increasing", " sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " and the numbers ", Cell[BoxData[ FormBox[ SubscriptBox["W", "U"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", SubscriptBox["W", "U"], ")"}], RowBox[{"-", "1"}]], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["N", "U"], TraditionalForm]]], " secret." }], "Text"], Cell[TextData[{ "Example 12.1 (Part 2)", StyleBox["\nWe continue with the parameters of ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 12.1", BaseStyle->"Hyperlink", ButtonData:>"ExamKnap encryption"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". So, Bob chooses ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["b", "i"], "}"}], RowBox[{"i", "=", "1"}], "6"], "=", RowBox[{"{", RowBox[{ "22", ",", "89", ",", "345", ",", "987", ",", "4567", ",", "45678"}], "}"}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" as his super-increasing sequence. Further, he selects ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["N", "B"], "=", "56789"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", which satisfies ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["N", "B"], ">", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "6"], SubscriptBox["b", "i"]}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" and ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["W", "B"], "=", "12345"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" which is coprime with ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ SubscriptBox["N", "B"], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".\nNext, he calculates ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["b", "i"], "'"}], "=", RowBox[{"(", RowBox[{ SubscriptBox["W", "B"], SubscriptBox["b", "i"], " ", "mod", " ", SubscriptBox["N", "B"]}], ")"}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". Here, we do this with the Mathematica function ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["Mod", FontWeight->"Plain", FontVariations->{"Underline"->True}], StyleBox[". To check the conditions above we need the ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["GCD", FontWeight->"Plain", FontVariations->{"Underline"->True}], StyleBox[" function.", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", CellChangeTimes->{3.4233962358403397`*^9, 3.423396890407029*^9}, FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"b", "=", RowBox[{"{", RowBox[{ "22", ",", "89", ",", "345", ",", "987", ",", "4567", ",", "45678"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"WB", "=", "12345"}], ";", RowBox[{"NB", "=", "56789"}], ";"}], "\n", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "6"], RowBox[{"b", "[", RowBox[{"[", "i", "]"}], "]"}]}], "<", "NB"}], "\n", RowBox[{ RowBox[{"GCD", "[", RowBox[{"WB", ",", "NB"}], "]"}], "==", "1"}], "\n", RowBox[{"bb", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"WB", "*", "b"}], ",", "NB"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "44434", ",", "19714", ",", "56639", ",", "31669", ",", "44927", ",", "36929"}], "}"}]], "Output"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["b", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "6"], "="}], TraditionalForm]]], "{44434,19714,56639,31669,44927,36929} is the public key.\nFor this small \ value of ", Cell[BoxData[ FormBox[ SubscriptBox["n", "B"], TraditionalForm]]], " it already takes some effort to solve the ", ButtonBox["knapsack problem", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], " (try 101077).\nThe number ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], " ", "mod", " ", SubscriptBox["N", "B"]}], TraditionalForm]]], " can be found with the ", StyleBox["ExtendedGCD", FontVariations->{"Underline"->True}], " and ", StyleBox["Mod", FontVariations->{"Underline"->True}], " functions." }], "Text", CellChangeTimes->{ 3.4233962489341736`*^9, {3.423464009837265*^9, 3.423464012056072*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"WB", "=", "12345"}], ";", RowBox[{"NB", "=", "56789"}], ";", RowBox[{"Mod", "[", RowBox[{ RowBox[{"ExtendedGCD", "[", RowBox[{"WB", ",", "NB"}], "]"}], ",", "NB"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{"39750", ",", "3704"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "It follows that ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], "=", "39750"}], TraditionalForm]]], ". Indeed" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"WBinverse", "=", "39750"}], ";"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"WB", "*", "WBinverse"}], ",", "NB"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["Encryption", "Subsubsection", CellTags->"SubsubsKnap encryp"], Cell[TextData[{ "Suppose that Alice wants to send a message to Bob. She looks up the public \ encryption key ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["b", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "B"], TraditionalForm], " "}], TraditionalForm]]], " of Bob. Next, she represents her message by a binary vector ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["m", "1"], ",", SubscriptBox["m", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["m", SubscriptBox["n", "B"]]}], ")"}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["m", "B"], TraditionalForm]]], " (or by more vectors of this length if the messages is too long). \nAlice \ will send to Bob the ciphertext" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"C", "=", RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], "B"], RowBox[{ SubscriptBox["m", "i"], ".", RowBox[{ SubscriptBox["b", "i"], "'"}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormKnap encryption"], Cell[TextData[{ "Example 12.1 (Part 3)", StyleBox["\nWe continue with the parameters of ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 12.1", BaseStyle->"Hyperlink", ButtonData:>"ExamKnap encryption"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".So, Bob's public key is given by ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["b", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "6"], "=", RowBox[{"{", RowBox[{ "44434", ",", "19714", ",", "56639", ",", "31669", ",", "44927", ",", "36929"}], "}"}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".\nLet Alice's message be ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["m", "i"], "}"}], RowBox[{"i", "=", "1"}], "6"], "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". Then the ciphertext that she will send will be ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "6"], RowBox[{ SubscriptBox["m", "i"], ".", RowBox[{ SubscriptBox["b", "i"], "'"}]}]}], "=", "101077"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"bb", "=", RowBox[{"{", RowBox[{ "44434", ",", "19714", ",", "56639", ",", "31669", ",", "44927", ",", "36929"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"m", "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{"CipherText", "=", RowBox[{"m", ".", "bb"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["101077"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["Decryption", "Subsubsection", CellTags->"SubsubsKnap decryp"], Cell[TextData[{ "When Bob receives a ciphertext ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " he will first multiply it with ", Cell[BoxData[ FormBox[ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], TraditionalForm]]], " and reduce the answer modulo ", Cell[BoxData[ FormBox[ SubscriptBox["N", "B"], TraditionalForm]]], " (both are his secret parameters). It follows that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], ".", "C"}], OverscriptBox["\[Congruent]", ButtonBox[ RowBox[{"(", "12.6", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormKnap encryption"]], RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], ".", RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], "B"], RowBox[{ SubscriptBox["m", "i"], ".", RowBox[{ SubscriptBox["b", "i"], "'"}]}]}]}], OverscriptBox["\[Congruent]", ButtonBox[ RowBox[{"(", "12.5", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormKnap u'=w.u"]], RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], "B"], RowBox[{ RowBox[{ SubscriptBox["m", "i"], ".", SubscriptBox["b", "i"]}], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["N", "B"]}], ")"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "\nInequality ", ButtonBox["(12.3)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap M>sum"], " implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], "B"], RowBox[{ SubscriptBox["m", "i"], ".", SubscriptBox["b", "i"]}]}], "<", SubscriptBox["N", "B"]}], TraditionalForm]]], ". So, we can rewrite the above equation as follows:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], "B"], RowBox[{ SubscriptBox["m", "i"], ".", SubscriptBox["b", "i"]}]}], "=", RowBox[{"(", RowBox[{ RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], ".", "C"}], " ", "mod", " ", SubscriptBox["N", "B"]}], ")"}]}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "\nSince the sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["b", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "B"], TraditionalForm]]], " is ", "super-increasing", ", Bob can now apply ", ButtonBox["Algorithm 12.1", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap solve superincr"], " with ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], ".", "C"}], " ", "mod", " ", SubscriptBox["N", "B"]}], ")"}], TraditionalForm]]], " as right hand side to recover the message ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["m", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "B"], TraditionalForm]]] }], "Text"], Cell[TextData[{ "Example 12.1 (Part 4)\n", StyleBox["We continue with the parameters of ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 12.1", BaseStyle->"Hyperlink", ButtonData:>"ExamKnap encryption"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".\nAssume that Bob has received ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"C", "=", "101077"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". First Bob computes ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], ".", "C"}], " ", "mod", " ", SubscriptBox["N", "B"]}], ")"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" with ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], "=", "39750"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" and ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["N", "B"], "=", "56789"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".", FontWeight->"Plain", FontSlant->"Italic"], " " }], "Text", FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"CipherText", "=", "101077"}], ";"}], "\n", RowBox[{"S", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"WBinverse", "*", "CipherText"}], ",", "NB"}], "]"}]}]}], "Input",\ GeneratedCell->True], Cell[BoxData["45789"], "Output"], Cell[TextData[{ "He gets 45789. To solve (12.1) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "6"], RowBox[{ SubscriptBox["m", "i"], ".", SubscriptBox["b", "i"]}]}], "=", "S"}], TraditionalForm]]], ", he can use the ", ButtonBox["KnapsackForSuperIncreasingFunction", BaseStyle->"Hyperlink", ButtonData:>"InputKnap knap for superincr"], " defined earlier. " }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"b", "=", RowBox[{"{", RowBox[{ "22", ",", "89", ",", "345", ",", "987", ",", "4567", ",", "45678"}], "}"}]}], ";", RowBox[{"S", "=", "5665"}], ";", RowBox[{"X", "=", RowBox[{"KnapsackForSuperIncreasingSequence", "[", RowBox[{"b", ",", "S"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0"}], "}"}]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["A Further Discussion", "Subsubsection", CellTags->"SubsubsKnap discussion"], Cell["The knapsack system is summarized in the table below.", "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"Public", RowBox[{ StyleBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], FontSlant->"Italic"], "of", " ", "all", " ", "users"}]}, { RowBox[{"Secret", " ", "to", " ", StyleBox["U", FontSlant->"Italic"]}], StyleBox[ RowBox[{ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], ",", " ", SubsuperscriptBox["W", "U", RowBox[{"-", "1"}]], ",", SubscriptBox["N", "U"]}], FontSlant->"Italic"]}, {"Properties", RowBox[{" ", RowBox[{ RowBox[{ StyleBox[ RowBox[{ SubscriptBox["u", "i"], "'"}], FontSlant->"Italic"], "\[Congruent]", RowBox[{ StyleBox[ RowBox[{ SubscriptBox["W", "U"], ".", SubscriptBox["u", "i"]}], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], RowBox[{ StyleBox["(", FontSlant->"Italic"], RowBox[{ StyleBox["mod", FontSlant->"Plain"], StyleBox[" ", FontSlant->"Plain"], StyleBox[ SubscriptBox["N", "U"], FontSlant->"Italic"]}], StyleBox[")", FontSlant->"Italic"]}]}]}], ",", "\n", "\t", RowBox[{ RowBox[{ StyleBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "super"}], "-", "increasing"}], ",", "\n", "\t", RowBox[{ RowBox[{"gcd", StyleBox[ RowBox[{"(", RowBox[{ SubscriptBox["W", "U"], ",", SubscriptBox["N", "U"]}], ")"}], FontSlant->"Italic"]}], "=", "1"}]}]}]}, {" ", " "}, { RowBox[{"Message", " ", "for", " ", "B"}], StyleBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["m", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "B"], FontSlant->"Italic"]}, {" ", " "}, {"Encryption", StyleBox[ RowBox[{"C", "=", RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], SubscriptBox["Bm", "i"]], RowBox[{".", SubsuperscriptBox["b", "i", "'"]}]}]}], FontSlant->"Italic"]}, { RowBox[{"Decryption", " ", "by", " ", "B"}], RowBox[{" ", RowBox[{ RowBox[{"Apply", " ", ButtonBox[ RowBox[{"Algorithm", " ", "12.1"}], BaseStyle->"Hyperlink", ButtonData:>"AlgKnap solve superincr"], " ", "to"}], "\n", "\t", RowBox[{ StyleBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "and", StyleBox[ RowBox[{" ", StyleBox[" ", FontSlant->"Italic"]}]], StyleBox[ RowBox[{ SubsuperscriptBox["W", "B", RowBox[{"-", "1"}]], ".", "C"}], FontSlant->"Italic"], " ", "mod", " ", StyleBox[ SubscriptBox["N", "B"], FontSlant->"Italic"]}]}]}]} }]]], "\n\nThe Knapsack Cryptosystem" }], "NumberedTable", CellTags->"TableKnap knapsack"], Cell["\<\ Even though the knapsack cryptosystem does not have the signature property, \ for a short while it gained an enormous popularity. The main reason is the \ low complexity of its implementation. In applications, both encryption and \ decryption can take place at very high data rates.\ \>", "Text"], Cell[TextData[{ "The authors ", ButtonBox["[MerH78]", BaseStyle->"Hyperlink", ButtonData:>"RefMerH78"], " recommend the users to take length ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "U"], "=", "100"}], TraditionalForm]]], ", a sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " satisfying" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["2", "i"], "-", "1"}], ")"}], SuperscriptBox[".2", "100"]}], "<", SubscriptBox["u", "i"], "<", RowBox[{ SuperscriptBox["2", "i"], SuperscriptBox[".2", "100"]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "100"}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "(it will automatically be ", "super-increasing", "), and a modulus ", Cell[BoxData[ FormBox[ SubscriptBox["N", "U"], TraditionalForm]]], " such that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["2", "101"], "+", "1"}], "<", SubscriptBox["N", "U"], "<", SuperscriptBox["2", "202"]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Note that also ", ButtonBox["(12.3)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap M>sum"], " is satisfied." }], "Text"], Cell[TextData[{ "It is further recommended that user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " makes a permuted version ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " public instead of ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " itself to disguise the order of the original ", "super-increasing", " sequence. In this way, a cryptanalist has no information about which \ element ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "i"], "'"}], TraditionalForm]]], " in the public knapsack came from (the smallest knapsack element) ", Cell[BoxData[ FormBox[ SubscriptBox["u", "1"], TraditionalForm]]], ", for instance. " }], "Text"], Cell[TextData[{ "The idea of multiplying a super-increasing sequence with a constant ", Cell[BoxData[ FormBox[ SubscriptBox["W", "U"], TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox[ SubscriptBox["N", "U"], TraditionalForm]]], " is of course to obtain a knapsack that looks random. To increase this \ effect and thus to increase the security of the knapsack cryptosystem, ", ButtonBox["[MerH78]", BaseStyle->"Hyperlink", ButtonData:>"RefMerH78"], " advises to iterate this multiplication. \nHence, each user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " also selects ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["N", "U", "'"], ">", RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], "U"], RowBox[{ SubscriptBox["u", "i"], "'"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"1", "<", SubsuperscriptBox["W", "U", "'"], "<", SubsuperscriptBox["N", "U", "'"]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "("}], TraditionalForm]]], Cell[BoxData[ FormBox[ SubsuperscriptBox["W", "U", "'"], TraditionalForm]]], ",", Cell[BoxData[ FormBox[ SubsuperscriptBox["N", "U", "'"], TraditionalForm]]], ")=1, computes ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["u", "i"], "'"}], "'"}], "\[Congruent]", RowBox[{ RowBox[{ SubsuperscriptBox["W", "U", "'"], ".", RowBox[{ SubscriptBox["u", "i"], "'"}]}], " ", RowBox[{"(", RowBox[{"mod", " ", SubsuperscriptBox["N", "U", "'"]}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", SubscriptBox["n", "U"]}], TraditionalForm]]], ", and makes ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ RowBox[{ SubscriptBox["u", "i"], "'"}], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " public instead of ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell["\<\ It makes sense to iterate this process of modulo-multiplication, as is \ illustrated in the following example.\ \>", "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", "=", "3"}], TraditionalForm]]], " and consider", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "3"], "=", RowBox[{"{", RowBox[{"5", ",", "10", ",", "20"}], "}"}]}], TraditionalForm]]], ". Multiplying this sequence with 17 modulo 47 gives ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "3"], "=", RowBox[{"{", RowBox[{"38", ",", "29", ",", "11"}], "}"}]}], TraditionalForm]]], ". Multiplying this sequence with 3 modulo 89 gives ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", RowBox[{ RowBox[{ SubscriptBox["u", "i"], "'"}], "'"}], "}"}], RowBox[{"i", "=", "1"}], "3"], "=", RowBox[{"{", RowBox[{"25", ",", "87", ",", "33"}], "}"}]}], TraditionalForm]]], ".\nThese calculations can be verified with the ", StyleBox["Mod", FontVariations->{"Underline"->True}], " function. " }], "Example", CellChangeTimes->{3.4233962548873367`*^9}], Cell[BoxData[{ RowBox[{"u", "=", RowBox[{"{", RowBox[{"5", ",", "10", ",", "20"}], "}"}]}], "\n", RowBox[{"uu", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"17", "u"}], ",", "47"}], "]"}]}], "\n", RowBox[{"uuu", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"3", "uu"}], ",", "89"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"5", ",", "10", ",", "20"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"38", ",", "29", ",", "11"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"25", ",", "87", ",", "33"}], "}"}]], "Output"], Cell[TextData[{ "It is impossible to find integers ", Cell[BoxData[ FormBox["W", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " that map ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "3"], TraditionalForm]]], " directly into ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ RowBox[{ SubscriptBox["u", "i"], "'"}], "'"}], "}"}], RowBox[{"i", "=", "1"}], "3"], TraditionalForm]]], ". Indeed the congruence relations" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"5", "W"}], "\[Congruent]", RowBox[{"25", " ", RowBox[{"(", RowBox[{"mod", " ", "N"}], ")"}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"10", "W"}], "\[Congruent]", RowBox[{"87", " ", RowBox[{"(", RowBox[{"mod", " ", "N"}], ")"}]}]}], TraditionalForm]]] }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "imply that ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"87", " ", "-", " ", RowBox[{"2", " ", "\[Times]", "25"}]}], " ", "=", " ", "37"}], TraditionalForm]]], ". Since 37 is a prime, it follows that ", Cell[BoxData[ FormBox[ RowBox[{"N", "=", "37"}], TraditionalForm]]], ". It also follows that ", Cell[BoxData[ FormBox[ RowBox[{"W", "=", "5"}], TraditionalForm]]], ". These values of ", Cell[BoxData[ FormBox["W", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " however violate the third congruence relation" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"20", "W"}], "\[Congruent]", RowBox[{"33", " ", RowBox[{"(", RowBox[{"mod", " ", "N"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell["\<\ This shows that an iteration of modulo-multiplications can not always be \ replaced by a single modulo-multiplication.\ \>", "Text", FontSlant->"Italic"], Cell[TextData[{ "The above example also demonstrates something else. Note that the second \ iteration mapped the not-super-increasing knapsack ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"38", ",", "29", ",", "11"}], "}"}], TraditionalForm]]], " into ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"25", ",", "87", ",", "33"}], "}"}], TraditionalForm]]], ", which after a reordering is a ", "super-increasing", " sequence." }], "Text"], Cell[TextData[{ "This also makes it clear that cryptanalist Eve does not have to guess the \ original integers ", Cell[BoxData[ FormBox[ SubscriptBox["W", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["N", "U"], TraditionalForm]]], " (and also ", Cell[BoxData[ FormBox[ SubsuperscriptBox["W", "U", "'"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubsuperscriptBox["N", "U", "'"], TraditionalForm]]], " in the iterated case) to convert the public key back into a \ super-increasing sequence. Eve can also decrypt the ciphertext, if she is \ able to obtain another ", "super-increasing", " sequence from ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["u", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " (resp. ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ RowBox[{ SubscriptBox["u", "i"], "'"}], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], ").\nThese observations demonstrate two important things:" }], "Text"], Cell["\<\ 1) Iteration does not necessarily increase the security of the system.\ \>", "DisplayFormula"], Cell["\<\ 2) It may be easier for a cryptanalist to map the public knapsack into a \ super-increasing sequence other than the original.\ \>", "DisplayFormula"], Cell["\<\ Some critics of the knapsack cryptosystem did not trust the linearity of the \ system. Their intuition/experience told them that the knapsack cryptosystem \ was bound to be broken. \ \>", "Text"], Cell[TextData[{ "The reader should remember that the general knapsack problem is \ NP-complete. This implies in particular that no known algorithm solves it in \ polynomial time. However, the property of NP-completeness has never been \ proved for the restriction of the knapsack problem to the subclass of \ knapsacks, obtained by a single modulo-multiplication of a ", "super-increasing", " sequence. In 1982, Shamir ", ButtonBox["[Sham82]", BaseStyle->"Hyperlink", ButtonData:>"RefSham82"], " showed that the single iteration version of the knapsack system can be \ broken with very high probability in polynomial time. This attack was later \ generalized by others (see ", ButtonBox["[Adle83]", BaseStyle->"Hyperlink", ButtonData:>"RefAdle83"], " and ", ButtonBox["[Bric85]", BaseStyle->"Hyperlink", ButtonData:>"RefBric85"], ")" }], "Text", GeneratedCell->True] }, Closed]] }, Closed]], Cell[TextData[{ "In Section 12.2, an outline of the much more general attack by Lagarias and \ Odlyzko ", ButtonBox["[LagO83]", BaseStyle->"Hyperlink", ButtonData:>"RefLagO83"], " will be given." }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-Attack" }], "Section", CellTags->"SectKnap L3-attack"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Introduction" }], "Subsection", CellTags->"SubsKnap L3 Intro"], Cell[TextData[{ "In the original knapsack cryptosystem it is assumed that the secret \ sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], TraditionalForm]]], " is super-increasing. However, this is not crucial for a knapsack-based \ cryptosytem. It only makes the decryption easy, because of ", ButtonBox["Algorithm 12.1", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap solve superincr"], ". The only essential requirement is that the plaintext-to-ciphertext \ mapping ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["m", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], "U"], "\[LongRightArrow]", "C"}], TraditionalForm]]], " in ", ButtonBox["(12.6)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap encryption"], " is one-to-one." }], "Text"], Cell["\<\ Since the general knapsack problem is NP-complete, no known algorithm solves \ it in polynomial time. Still, it is quite possible that polynomial-time \ algorithms do exist, which solve with some positive probability any knapsack \ problem in a large subclass of knapsack problems. Such an algorithm would \ make the knapsack system unsuitable for cryptographic purposes. \ \>", "Text"], Cell[TextData[{ "In this section, we shall often use the vector notation ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["u", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{ SubscriptBox["u", "1"], ",", SubscriptBox["u", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["u", "n"]}], ")"}]}], TraditionalForm]]], " for a knapsack ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], ". Before we give an outline of the ", StyleBox["Lagarias and Odlyzko attack", FontSlant->"Italic"], " (also called the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]], FontSlant->"Italic"], StyleBox["-attack", FontSlant->"Italic"], ") ", ButtonBox["[LagO83]", BaseStyle->"Hyperlink", ButtonData:>"RefLagO83"], ", we have to define a few new notions." }], "Text", GeneratedCell->True], 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["density", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"d", "(", StyleBox["u", FontVariations->{"Underline"->True}], ")"}], TraditionalForm]]], " of a knapsack ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["u", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{ SubscriptBox["u", "1"], ",", SubscriptBox["u", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["u", "n"]}], ")"}]}], TraditionalForm]]], " is defined by\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"d", "(", StyleBox["u", FontVariations->{"Underline"->True}], ")"}], "=", FractionBox["n", RowBox[{ SubscriptBox["max", RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}]], " ", RowBox[{ SubscriptBox["log", "2"], " ", SubscriptBox["u", "i"]}]}]]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefKnap density"], 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"], "For instance, the density of the knapsack ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ "22", ",", "89", ",", "345", ",", "987", ",", "4567", ",", "45678"}], "}"}], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"6", "/", SubscriptBox["log", "2"]}], "45678"}], "\[TildeTilde]", "0.39"}], TraditionalForm]]], ", as can be checked with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Max", FontVariations->{"Underline"->True}], ", ", StyleBox["Log", FontVariations->{"Underline"->True}], ", ", StyleBox["Length", FontVariations->{"Underline"->True}], ", and ", ButtonBox["N", BaseStyle->"Link", ButtonData->"paclet:ref/N"], "." }], "Example", CellChangeTimes->{ 3.4233943964066925`*^9, {3.423394491579177*^9, 3.423394504751136*^9}, { 3.4234642702028613`*^9, 3.4234642718903933`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", RowBox[{"{", RowBox[{ "22", ",", "89", ",", "345", ",", "987", ",", "4567", ",", "45678"}], "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{"N", "[", RowBox[{ RowBox[{ RowBox[{"Length", "[", "a", "]"}], "/", RowBox[{"Log", "[", RowBox[{"2", ",", RowBox[{"Max", "[", "a", "]"}]}], "]"}]}], ",", "2"}], "]"}]}], "Input",\ CellChangeTimes->{3.4234722723463383`*^9}], Cell[BoxData[ StyleBox["0.387616634029986286`", StyleBoxAutoDelete->True, PrintPrecision->2]], "Output"], Cell[TextData[{ "The density ", Cell[BoxData[ FormBox[ RowBox[{"d", "(", StyleBox["u", FontVariations->{"Underline"->True}], ")"}], TraditionalForm]]], " serves as measure for the information rate of a knapsack system. Indeed, \ the numerator is the number of message bits that are stored in the sum ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " of the knapsack (see ", ButtonBox["(12.6)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap encryption"], "). The denominator is a good approximation of the average number of bits \ needed for the binary representation of ", Cell[BoxData[ FormBox["C", TraditionalForm]]], ". For instance, with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "i"], "=", SuperscriptBox["2", RowBox[{"i", "-", "1"}]]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", the density is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "/", RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}]}], "\[TildeTilde]", "1"}], TraditionalForm]]], "as it should be." }], "Text"], Cell["\<\ We shall show further on that the Lagarias and Odlyzko attack is more likely \ to break the knapsack system if its density is smaller. This may sound like a heavy restriction, but one should realize that nobody \ likes to use a cryptosystem that has a non-trivial positive chance to be \ broken.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Lattices" }], "Subsection", CellTags->"SubsKnap L3 lattices"], 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[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " be a set of vectors in ", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]]], " that are ", ButtonBox["linearly independent", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear Dep"], " over ", Cell[BoxData[ FormBox["\[DoubleStruckCapitalR]", TraditionalForm]]], ". Then the set of all integer linear combinations of ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " is called an ", StyleBox["integer lattice", FontSlant->"Italic"], ". In formula:\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalLambda]", "=", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["\[Alpha]", "i"], ".", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"]}]}], "|", RowBox[{ SubscriptBox["\[Alpha]", "i"], "\[Element]", "\[DoubleStruckCapitalZ]"}]}], ",", RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}]}], "}"}]}], TraditionalForm]]], "\nor\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalLambda]", "=", RowBox[{ RowBox[{"\[DoubleStruckCapitalZ]", ".", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"]}], "+", RowBox[{"\[DoubleStruckCapitalZ]", ".", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"]}], "+", "\[Ellipsis]", "+", SubscriptBox[ StyleBox[ RowBox[{"\[DoubleStruckCapitalZ]", StyleBox["v", FontVariations->{"Underline"->True}]}]], "n"]}]}], TraditionalForm]]], "." }], "Definition", GeneratedCell->True, CellTags->"DefKnap lattice"], Cell[TextData[{ "We say that the ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " independent vectors ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], TraditionalForm]]], " form a ", StyleBox["basis", FontSlant->"Italic"], " for the lattice ", Cell[BoxData[ FormBox["\[CapitalLambda]", TraditionalForm]]], ". Note that the basis of a lattice is certainly not unique. Normally, the \ order of the basis vectors does not matter, but in the sequel such an order \ will matter. We shall use the notation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"[", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], "]"}], " "}], TraditionalForm]]], " to indicate a particular ordering." }], "Text", CellTags->"DefKnap basis"], 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 lattice ", Cell[BoxData[ FormBox["\[CapitalLambda]", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalZ]", "2"], TraditionalForm]]], " with basis ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["u", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{"3", ",", "1"}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["v", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{"1", ",", "2"}], ")"}]}], TraditionalForm]]], ". It consists of all points of the form ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Alpha]", ".", RowBox[{"(", RowBox[{"3", ",", "1"}], ")"}]}], "+", RowBox[{"\[Beta]", ".", RowBox[{"(", RowBox[{"1", ",", "2"}], ")"}]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", ",", RowBox[{"\[Beta]", "\[Element]", "\[DoubleStruckCapitalZ]"}]}], TraditionalForm]]], ". Below part of this lattice is depicted.\n" }], "Example"], Cell[GraphicsData["Metafile", "\<\ CF5dJ6E]HGAYHf4PEfU^I6mgLb15CDHPAVmbKF5d0@0001fD0@0005P0001800001P000342000c0@00 kPD007h0001>;P00H1T00215CDH00040U1d005l100030000000000000000000000D00004000>0@00 f0000140000<0000200000T0000@0000jP4002h1000;000040000>X1000^0@009@0000`000000020 C@0006`0001800001P000342000c0@00B00000H0003Z0@00;P400240l000000000000000P3l00000 00000000P3l00000000000000000000000000000000000000000000000000000B`000400000`0000 1@000200000100000@000100001800001P000382000d0@00B00000H0000b0P00=04001X0000@0000 00000000001;0000@0000300000500008000004000010000400004P000060000X1000^0@008@3`0000000000000020?`00000000000020?`0000000000 0000000000000000000000000000000000000000000U0000300000L0080U000030000000081G0000 900004P0002L0000<08009`000020000B02L0302W00?000050000302002L000000000UL0000T0000 ?04000H0000l0@00<`400080000l0C<1?04600l0000D0000?04000H000000002E`0002@0000l0@00 PP0004d1002L00000P0003`1W01=0H803`0001@0001=0@00PP000000008U0000300000P0080U0000 300000@0081F0000;00004@100220000C@4008h000040000A06:04d1PP190Hh0BP6702D0000<0000 1`00P2D0000<00000000P5L0000`0000A0400880001=0@00SP0000D000140HX0C@6204T1SP1:0HL0 A06:00l0000D0000A04008X000000002E`0002@0000l0@00S`0006l1002L00000P0003`1W01_0Hl0 3`0001@0001_0@00S`000000008U0000300000P0080U0000300000@0081F0000;0000681002?0000 K`4009D000040000HP6?06l1S`1T0ID0J@6A02D0000<00001`00P2D0000<00000000P5L0000`0000 HP4008l0001_0@00U@0000D0001R0Hl0K`6?06@1U@1Y0I40HP6?00l0000D0000HP4008l000000002 600000`0000000025P0000`0000I00004P0000`0000100006`000100001@0@00O0000580001<0@00 0P0001400000000000000000002@0@0000000@B00@1306l0M@1b06T0I@1b0200CP1U07L0003oOomo ogooOomoogooOomoogooOomoogooOomoogooOomoogooO`00003oOomoogooOomoogooOomoogooOomo ogooOomoogooOomoogooOomoogooOomo0000000000000?moogooOomoogooOomoogooOomoogooOomo ogooOomoogooOomoogooOomoogooOomoogooOomoogooOomo003oOomoogl00?moogooOomoogooOomo ogooOomoogooOomoogooOomoogooOomoogooOomoogooOomoogooOomoogooOomo0000000000000000 00000000000000000@410@410@410Omo9@0000`000020000E00005@00000000000000?oooooooooo 0@000030Z440`:Q10000000000010000C0000000000000000000000000000000D00007D0ogl80000 4P0000`0000200004P0000`0000100006`000100001b0@00R@0005@0001D000000000000003ooooo ooooo`400000`:Q10<2X@@00000000000@0004`000000000000000000000000000000500001f0?mo 20000180000<00000P0002D0000<00001000P2X0000H0000108002X100080P00;P4002D0000<0000 1000P2X0000H0000/04002X1002d0@00;P4002D0000<00001000P2X0000H0000hP4001d1003V0@00 8@4002D0000<00001000P2X0000H00005@800101000I0P00504002D0000<00001000P2X0000H0000 G04002X1001P0@00;P4002D0000<00001000P2X0000H0000SP4001d1002B0@008@4002D0000<0000 1000P2X0000H0000`@40010100350@00504002D0000<00001000P2X0000H0000l`4000<1003g0@00 1`4002D0000<00001000P2X0000H00009@800?H0000Y0P00nP0002D0000<00001000P2X0000H0000 204002X1000<0@00;P4002D0000<00001000P2X0000H0000>P4001d1000n0@008@4002D0000<0000 1000P2X0000H0000K0400101001`0@00504002D0000<00001000P2X0000H0000W`4000<1002S0@00 1`4002D0000<00001000P2X0000H0000d@400?H0003E0@00nP0002D0000<00001000P2X0000H0000 10800>T000080P00k@0002D0000<00001000P2X0000H0000/`0002X1002g0000;P4002D0000<0000 1000P2X0000H0000iP0001d1003Z00008@4002D0000<00001000P2X0000H000060400101000L0@00 504002D0000<00001000P2X0000H0000B`4000<1001?0@001`4002D0000<00001000P2X0000H0000 O@400?H000210@00nP0002D0000<00001000P2X0000H0000/0400>T0002d0@00k@0002D0000<0000 1000P2X0000H0000hP400=`0003V0@00h00002D0000<00001000P2X0000H00005@800T0001P0@00k@0002D0000<00001000P2X0000H0000 SP400=`0002B0@00h00002D0000<00001000P2X0000H0000`@400T0000<0@00k@0002D0000<00001000P2X0000H0000>P400=`0000n0@00 h00002D0000<00001000P2X0000H0000K0400T0002g0000k@0002D0000<00001000P2X0000H0000iP000=`0003Z0000h00002D0000<0000 1000P2X0000H000060400T0001S0000 k@0002D0000<00001000P2X0000H0000TP000=`0002F0000h00002D0000<00001000P2X0000H0000 a0000P4009X0000n0@00WP0002D0000<00001000P2X0000H0000K04008d0001`0@00 T@0002D0000<00001000P2X0000H0000W`400800002S0@00Q00002D0000<00001000P2X0000H0000 d@4007<0003E0@00M`0002D0000<00001000P2X0000H0000108006H000080P00JP0002D0000<0000 1000P2X0000H0000C`000<40001C0000a@0002D0000<00001000P2X0000H0000P@000;@000250000 ^00002D0000<00001000P2X0000H0000/`000:L0002g0000Z`0002D0000<00001000P2X0000H0000 iP0009X0003Z0000WP0002D0000<00001000P2X0000H0000604008d0000L0@00T@0002D0000<0000 1000P2X0000H0000B`400800001?0@00Q00002D0000<00001000P2X0000H0000O@4007<000210@00 M`0002D0000<00001000P2X0000H0000/04006H0002d0@00JP0002D0000<00001000P2X0000H0000 hP4005P0003V0@00G00002D0000<00001000P2X0000H00005@8004/0000I0P00C`0002D0000<0000 1000P2X0000H0000G`000:L0001S0000Z`0002D0000<00001000P2X0000H0000TP0009X0002F0000 WP0002D0000<00001000P2X0000H0000a00008d000380000T@0002D0000<00001000P2X0000H0000 m`000800003k0000Q00002D0000<00001000P2X0000H0000:@4007<0000]0@00M`0002D0000<0000 1000P2X0000H0000G04006H0001P0@00JP0002D0000<00001000P2X0000H0000SP4005P0002B0@00 G00002D0000<00001000P2X0000H0000`@4004/000350@00C`0002D0000<00001000P2X0000H0000 l`4003h0003g0@00@P0002D0000<00001000P2X0000H00009@800340000Y0P00=@0002D0000<0000 1000P2X0000H0000L00008d0001d0000T@0002D0000<00001000P2X0000H0000X`000800002W0000 Q00002D0000<00001000P2X0000H0000e@0007<0003I0000M`0002D0000<00001000P2X0000H0000 204006H0000<0@00JP0002D0000<00001000P2X0000H0000>P4005P0000n0@00G00002D0000<0000 1000P2X0000H0000K04004/0001`0@00C`0002D0000<00001000P2X0000H0000W`4003h0002S0@00 @P0002D0000<00001000P2X0000H0000d@400340003E0@00=@0002D0000<00001000P2X0000H0000 108002@000080P00:00002D0000<00001000P2X0000H0000C`000800001C0000Q00002D0000<0000 1000P2X0000H0000P@0007<000250000M`0002D0000<00001000P2X0000H0000/`0006H0002g0000 JP0002D0000<00001000P2X0000H0000iP0005P0003Z0000G00002D0000<00001000P2X0000H0000 604004/0000L0@00C`0002D0000<00001000P2X0000H0000B`4003h0001?0@00@P0002D0000<0000 1000P2X0000H0000O@40034000210@00=@0002D0000<00001000P2X0000H0000/04002@0002d0@00 :00002D0000<00001000P2X0000H0000hP4001L0003V0@006`0002D0000<00001000P2X0000H0000 5@8000X0000I0P003P0002D0000<00001000P2X0000H0000G`0006H0001S0000JP0002D0000<0000 1000P2X0000H0000TP0005P0002F0000G00002D0000<00001000P2X0000H0000a00004/000380000 C`0002D0000<00001000P2X0000H0000m`0003h0003k0000@P0002D0000<00001000P2X0000H0000 :@400340000]0@00=@0002D0000<00001000P2X0000H0000G04002@0001P0@00:00002D0000<0000 1000P2X0000H0000SP4001L0002B0@006`0002D0000<00001000P2X0000H0000`@4000X000350@00 3P0002D0000<00001000P2X0000H0000L00004/0001d0000C`0002D0000<00001000P2X0000H0000 X`0003h0002W0000@P0002D0000<00001000P2X0000H0000e@000340003I0000=@0002D0000<0000 1000P2X0000H0000204002@0000<0@00:00002D0000<00001000P2X0000H0000>P4001L0000n0@00 6`0002D0000<00001000P2X0000H0000K04000X0001`0@003P0002D0000<00001000P2X0000H0000 C`0003h0001C0000@P0002D0000<00001000P2X0000H0000P@00034000250000=@0002D0000<0000 1000P2X0000H0000/`0002@0002g0000:00002D0000<00001000P2X0000H0000iP0001L0003Z0000 6`0002D0000<00001000P2X0000H0000604000X0000L0@003P0002D0000<00001000P2X0000H0000 G`0002@0001S0000:00002D0000<00001000P2X0000H0000TP0001L0002F00006`0002D0000<0000 1000P2X0000H0000a00000X0003800003P0002D0000<00001000P2X0000H0000L00000X0001d0000 3P0004/000100000<00000D0000P00000@000040000@0000B00000H0000b0P00=04004P000060000 "], "Graphics", ImageSize->{317.75, 196.063}, ImageMargins->{{61.25, 0}, {0, 0}}], Cell[TextData[{ "Lattice in ", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalR]", "2"], TraditionalForm]]], " with basis ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"3", ",", "1"}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"2", ",", "1"}], ")"}], TraditionalForm]]] }], "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "For the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-attack that we shall describe later on, it is of great importance to find \ a vector in \[CapitalLambda] of short length, or even better to find a \ complete basis of short vectors for \[CapitalLambda]. For this reason, we \ need to study basis transformations more carefully. " }], "Text"], Cell[TextData[{ "The ", StyleBox["Gram-Schmidt", FontSlant->"Italic"], " process is a well known algorithm from linear algebra to transfer a basis \ ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " of a linear (sub)space into an ", ButtonBox["orthogonal basis", BaseStyle->"Hyperlink", ButtonData:>"DefAppB self orth"], ", i.e. in a basis ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " with the property that all vectors ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " are orthogonal to each other, i.e. ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox[ RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "j"]}], ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormAppB inner prod"], "=", "0"}], TraditionalForm]]], ", for ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[NotEqual]", "j"}], TraditionalForm]]], ". It goes as follows:" }], "Text", GeneratedCell->True, CellTags->"AlgKnap Gram-Schmidt"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "1"], "=", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "2"], "=", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], "-", RowBox[{ SubscriptBox["\[Mu]", RowBox[{"1", ",", "2"}]], SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "1"]}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "3"], "=", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "3"], "-", RowBox[{ SubscriptBox["\[Mu]", RowBox[{"1", ",", "3"}]], SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "1"]}], "-", RowBox[{ SubscriptBox["\[Mu]", RowBox[{"2", ",", "3"}]], SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "2"]}]}]}], TraditionalForm]]], ",\n\n\[VerticalEllipsis]\n\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "n"], "=", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"], "-", RowBox[{ SubscriptBox["\[Mu]", RowBox[{"1", ",", "n"}]], SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "1"]}], "-", RowBox[{ SubscriptBox["\[Mu]", RowBox[{"2", ",", "n"}]], SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "2"]}], "-", "\[Ellipsis]", "-", RowBox[{ SubscriptBox["\[Mu]", RowBox[{ RowBox[{"n", "-", "1"}], ",", "n"}]], SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}]]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["where", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Mu]", RowBox[{"i", ",", "j"}]], "=", FractionBox[ RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "j"], ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"]}], ")"}], RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"]}], ")"}]]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{ "1", "\[LessEqual]", "i", "\[LessEqual]", "j", "\[LessEqual]", "n"}], TraditionalForm]]], "." }], "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[" \n", FontWeight->"Bold"], "To demonstrate the Gram-Schmidt process we take ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], "=", RowBox[{"(", RowBox[{"3", ",", "4", ",", "2"}], ")"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "2"], "=", RowBox[{"(", RowBox[{"2", ",", "5", ",", "2"}], ")"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "3"], "=", RowBox[{"(", RowBox[{"1", ",", "2", ",", "6"}], ")"}]}], TraditionalForm]]], StyleBox[" ", FontWeight->"Bold"], "in ", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalR]", "3"], TraditionalForm]]], ". " }], "Example"], Cell["\<\ v1={3,4,2};v2={2,5,2};v3={1,2,6}; u1=v1 u2=v2-((u1.v2)/(u1.u1))u1 u3=v3-((u1.v3)/(u1.u1))u1-((u2.v3)/(u2.u2))u2\ \>", "Input", CellTags->"S5.53.1"], Cell[BoxData[ RowBox[{"{", RowBox[{"3", ",", "4", ",", "2"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"-", FractionBox["32", "29"]}], ",", FractionBox["25", "29"], ",", RowBox[{"-", FractionBox["2", "29"]}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"-", FractionBox["24", "19"]}], ",", RowBox[{"-", FractionBox["24", "19"]}], ",", FractionBox["84", "19"]}], "}"}]], "Output"], Cell[TextData[{ "This can also be done in ", StyleBox["Mathematica.", FontSlant->"Italic"], " We run the GramSchmidt method for orthogonalization and use the ", StyleBox["Orthogonalize", FontVariations->{"Underline"->True}], " function. The result will be orthonormal basis, i.e. we obtain a set of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " orthogonal vectors", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " that have been further divided by their length to give them unit-length." }], "Text", CellChangeTimes->{{3.4214694239662347`*^9, 3.4214694497318597`*^9}, { 3.423472334409236*^9, 3.423472377018883*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"v1", "=", RowBox[{"{", RowBox[{"3", ",", "4", ",", "2"}], "}"}]}], ";", RowBox[{"v2", "=", RowBox[{"{", RowBox[{"2", ",", "5", ",", "2"}], "}"}]}], ";", RowBox[{"v3", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "6"}], "}"}]}], ";", RowBox[{ RowBox[{"{", RowBox[{"u1", ",", "u2", ",", "u3"}], "}"}], "=", RowBox[{"Orthogonalize", "[", RowBox[{ RowBox[{"{", RowBox[{"v1", ",", "v2", ",", "v3"}], "}"}], ",", RowBox[{"Method", "\[Rule]", "\"\\""}]}], "]"}]}]}]], "Input", CellTags->"S5.53.1"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ FractionBox["3", SqrtBox["29"]], ",", FractionBox["4", SqrtBox["29"]], ",", FractionBox["2", SqrtBox["29"]]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"-", FractionBox["32", SqrtBox["1653"]]}], ",", FractionBox["25", SqrtBox["1653"]], ",", RowBox[{"-", FractionBox["2", SqrtBox["1653"]]}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"-", FractionBox["2", SqrtBox["57"]]}], ",", RowBox[{"-", FractionBox["2", SqrtBox["57"]]}], ",", FractionBox["7", SqrtBox["57"]]}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "As we can see in the example above, the vectors ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", will, in general, no longer have integer coordinates. In the context of \ integer lattices that is an undesirable situation. " }], "Text"], Cell["\<\ In the next subsection we shall discuss an (integer-valued) basis for lattice \ \[And], that is not completely orthonormal, but has two other attractive \ properties. \ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "A Reduced Basis" }], "Subsection", CellTags->"SubsKnap L3 reduced basis"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"||", StyleBox["u", FontVariations->{"Underline"->True}], "||"}], TraditionalForm]]], " denote the standard Euclidean norm or ", ButtonBox["length", BaseStyle->"Hyperlink", ButtonData:>"DefAppB pos def"], " of a vector ", Cell[BoxData[ FormBox[ StyleBox["u", FontVariations->{"Underline"->True}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"||", StyleBox["u", FontVariations->{"Underline"->True}], StyleBox["||", FontVariations->{"Underline"->True}]}], "=", RowBox[{ SuperscriptBox[ StyleBox[ RowBox[{"(", RowBox[{"u", ",", "u"}], ")"}], FontVariations->{"Underline"->True}], RowBox[{"1", "/", "2"}]], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], SuperscriptBox[ RowBox[{"(", SubscriptBox["u", "i"], ")"}], "2"]}]}]}], TraditionalForm]]], ". " }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "A ", ButtonBox["basis", BaseStyle->"Hyperlink", ButtonData:>"DefKnap basis"], " ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " of an integer ", ButtonBox["lattice", BaseStyle->"Hyperlink", ButtonData:>"DefKnap lattice"], " \[CapitalLambda] is called ", Cell[BoxData[ FormBox["y", TraditionalForm]], FontSlant->"Italic"], StyleBox["-reduced", FontSlant->"Italic"], ", where ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "/", "4"}], "<", "y", "<", "1"}], TraditionalForm]]], ", if the orthogonal basis ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " obtained from ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " through the ", ButtonBox["Gram-Schmidt process", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap Gram-Schmidt"], " satisfies\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"||", FormBox[ RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], "+", RowBox[{ SubscriptBox["\[Mu]", RowBox[{"i", ",", RowBox[{"i", "-", "1"}]}]], SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"i", "-", "1"}]]}]}], TraditionalForm], SuperscriptBox["||", "2"], RowBox[{"\[GreaterEqual]", RowBox[{"y", "."}]}], "||", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"i", "-", "1"}]], SuperscriptBox["||", "2"]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ",\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"(", RowBox[{"|", "\[Mu]"}], ")"}], RowBox[{"i", ",", "j"}]], "|", RowBox[{"\[LessEqual]", RowBox[{"1", "/", "2"}]}]}], TraditionalForm]]], ", \t\t\t", Cell[BoxData[ FormBox[ RowBox[{ "1", "\[LessEqual]", "i", "\[LessEqual]", "j", "\[LessEqual]", "n"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefKnap reduced"], Cell[TextData[{ "An alternative definition of a ", Cell[BoxData[ FormBox["y", TraditionalForm]]], "-reduced basis can be given as follows. Let ", Cell[BoxData[ FormBox[ SubscriptBox["V", "k"], TraditionalForm]]], " be the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-dimensional linear subspace of ", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalR]", "n"], TraditionalForm]]], ", spanned by ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "k"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " or, equivalently, by ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "k"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], ".\nLet ", Cell[BoxData[ FormBox[ SubsuperscriptBox["V", "k", "\[UpTee]"], TraditionalForm]]], " be the orthogonal complement of ", Cell[BoxData[ FormBox[ SubscriptBox["V", "k"], TraditionalForm]]], ". Define ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "j", RowBox[{"(", "k", ")"}]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "+", "1"}], "\[LessEqual]", "j", "\[LessEqual]", "n"}], TraditionalForm]]], ", as the projection of ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "j"], TraditionalForm]]], " onto ", Cell[BoxData[ FormBox[ SubsuperscriptBox["V", "k", "\[UpTee]"], TraditionalForm]]], ". In particular, ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], RowBox[{"k", "+", "1"}], RowBox[{"(", "k", ")"}]], "=", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"k", "+", "1"}]]}], TraditionalForm]]], ". Then it can be shown (see ", ButtonBox["[LagO83]", BaseStyle->"Hyperlink", ButtonData:>"RefLagO83"], ") that the two conditions in ", ButtonBox["Definition 12.4", BaseStyle->"Hyperlink", ButtonData:>"DefKnap reduced"], " are equivalent to" }], "Text", GeneratedCell->True], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"||", SubsuperscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i", RowBox[{"(", RowBox[{"i", "-", "2"}], ")"}]], SuperscriptBox["||", "2"], RowBox[{"\[GreaterEqual]", RowBox[{"y", "."}]}], "||", SubsuperscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], RowBox[{"i", "-", "1"}], RowBox[{"(", RowBox[{"i", "-", "2"}], ")"}]], SuperscriptBox["||", "2"]}], "=", RowBox[{ RowBox[{"y", "."}], "||", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"i", "-", "1"}]], SuperscriptBox["||", "2"]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], "," }], "NumberedEquation"], Cell["resp.", "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{"||", RowBox[{ SubsuperscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "j", RowBox[{"(", "i", ")"}]], "-", SubsuperscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "j", RowBox[{"(", RowBox[{"i", "-", "1"}], ")"}]]}], "||", RowBox[{"\[LessEqual]", FractionBox[ RowBox[{" ", "1"}], "2"]}], " ", "||", SubsuperscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i", RowBox[{"(", RowBox[{"i", "-", "1"}], ")"}]], "||"}], TraditionalForm]]], ",\t\t", Cell[BoxData[ FormBox[ RowBox[{ "1", "\[LessEqual]", "i", "\[LessEqual]", "j", "\[LessEqual]", "n"}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "Note that (12.8) implies that the projection of ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " onto ", Cell[BoxData[ FormBox[ SubsuperscriptBox["V", RowBox[{"i", "-", "2"}], "\[UpTee]"], TraditionalForm]]], " should not be too small in size (when compared with the length of ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"i", "-", "1"}]], TraditionalForm]]], "). The inequality in (12.9) says that the projection of ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "j"], TraditionalForm]]], " onto ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " is relatively small.\nThese two statements can be interpreted by saying \ that the vectors in a ", Cell[BoxData[ FormBox["y", TraditionalForm]]], "-reduced basis are of comparable size and all point in different \ directions." }], "Text"], Cell[TextData[{ "In the sequel, ", Cell[BoxData[ FormBox["y", TraditionalForm]]], " will always be 3/4. The ", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{ FormBox[ SuperscriptBox["L", "3"], TraditionalForm], "-", "Algorithm"}], BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 reduction"], TraditionalForm]]], " (see ", ButtonBox["[LenLL82]", BaseStyle->"Hyperlink", ButtonData:>"RefLenLL82"], ") is a very effective way to find a ", Cell[BoxData[ FormBox["y", TraditionalForm]]], "-reduced basis for a lattice \[CapitalLambda]. It will not be described in \ full detail here (see however ", ButtonBox["Subsection 12.2.5", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 reduction"], "). We quote the following facts from [LenLL82]." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " be a ", ButtonBox["basis", BaseStyle->"Hyperlink", ButtonData:>"DefKnap basis"], " of an ", ButtonBox["integer lattice", BaseStyle->"Hyperlink", ButtonData:>"DefKnap lattice"], " \[CapitalLambda]. in ", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ RowBox[{"B", "=", RowBox[{ SubscriptBox["max", RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}]], "||"}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], "||. Then the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-lattice basis reduction algorithm produces a reduced basis ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " for \[CapitalLambda] in about ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{ SuperscriptBox["n", "6"], "(", RowBox[{"log", " ", "B"}], ")"}], "3"], TraditionalForm]]], " bit operations." }], "Theorem", CellTags->"TheoKnap complexity L3"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " be a reduced basis for an integer lattice \[CapitalLambda]. \nThen\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"||", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "1"], SuperscriptBox["||", "2"], RowBox[{"\[LessEqual]", RowBox[{ RowBox[{ SuperscriptBox["2", RowBox[{"n", "-", "1"}]], ".", "min"}], RowBox[{"{", RowBox[{ RowBox[{"||", StyleBox["x", FontVariations->{"Underline"->True}], SuperscriptBox["||", "2"]}], "|", RowBox[{ StyleBox["x", FontVariations->{"Underline"->True}], "\[Element]", RowBox[{"\[CapitalLambda]", "\\", RowBox[{"{", StyleBox["0", FontVariations->{"Underline"->True}], "}"}]}]}]}], "}"}]}]}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ "In fact, Prop.1.12 in ", ButtonBox["[LenLL82]", BaseStyle->"Hyperlink", ButtonData:>"RefLenLL82"], " shows that no vector in a reduced basis can be very long." }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "The ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-Attack" }], "Subsection", CellTags->"SubsKnap L3 attack"], Cell[TextData[{ "We can now present the idea behind the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-attack. We want to find a solution to the knapsack problem ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["x", "i"], SubscriptBox["a", "i"]}]}], "=", "C"}], TraditionalForm]]], " (see ", ButtonBox["(12.1)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], "). " }], "Text"], Cell[TextData[{ "The idea of the attack will be to convert the parameters of the knapsack \ problem into a basis of some integer lattice \[CapitalLambda]. Then we find a \ short vector in this lattice with the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-lattice basis reduction algorithm. The hope will be that this short vector \ can be transformed back into the solution ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], "of (12.1). " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]], FontWeight->"Bold", FontSlant->"Italic"], StyleBox["-attack", FontWeight->"Bold", FontSlant->"Italic"], StyleBox[" on ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["a", "i"], SubscriptBox["x", "i"]}]}], "=", "S"}], TraditionalForm]], FontWeight->"Bold"], "." }], "Text"], Cell[TextData[{ StyleBox["Step 1", FontWeight->"Bold"], ":\nDefine the vectors " }], "Text"], Cell[TextData[Cell[BoxData[GridBox[{ { SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], "=", RowBox[{"(", RowBox[{"1", ","}]}], RowBox[{"0", ","}], RowBox[{"\[Ellipsis]", ","}], RowBox[{"0", ","}], RowBox[{ RowBox[{"-", SubscriptBox["a", "1"]}], ")"}]}, { SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], "=", RowBox[{"(", RowBox[{"0", ","}]}], RowBox[{"1", ","}], RowBox[{"\[Ellipsis]", ","}], RowBox[{"0", ","}], RowBox[{ RowBox[{"-", SubscriptBox["a", "2"]}], ")"}]}, {" ", "\[VerticalEllipsis]", " ", " ", " ", " ", " "}, { SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"], "=", RowBox[{"(", RowBox[{"0", ","}]}], RowBox[{"0", ","}], RowBox[{"\[Ellipsis]", ","}], RowBox[{"1", ","}], RowBox[{ RowBox[{"-", SubscriptBox["a", "n"]}], ")"}]}, { SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], RowBox[{"n", "+", "1"}]], "=", RowBox[{"(", RowBox[{"0", ","}]}], RowBox[{"0", ","}], RowBox[{"\[Ellipsis]", ","}], RowBox[{"0", ","}], RowBox[{"S", ")"}]} }]]]], "NumberedEquation", CellTags->"FormKnap the basis vectors"], Cell[TextData[{ "Together they form a basis for a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", "+", "1"}], ")"}], TraditionalForm]]], "-dimensional lattice \[CapitalLambda] in ", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalZ]", RowBox[{"n", "+", "1"}]], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Note that for the solution ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], "one has " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["x", "i"], SubscriptBox[ StyleBox["v", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], "i"]}]}], "+", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], RowBox[{"n", "+", "1"}]]}], "=", RowBox[{"(", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["x", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["x", "n"], ",", "0"}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "So, this vector has length ", Cell[BoxData[ FormBox[ SqrtBox["n"], TraditionalForm]]], ", which is relatively very short, e.g., if the knapsack has length ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "100"}], TraditionalForm]]], ", we have ", Cell[BoxData[ FormBox[ RowBox[{"||", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["x", "i"], SubscriptBox[ StyleBox["v", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], "i"]}]}], "+", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], RowBox[{"n", "+", "1"}]]}], "||", RowBox[{"\[LessEqual]", "10"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Step 2", FontWeight->"Bold"], ":\nFind a reduced basis ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " for \[CapitalLambda] with the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-algorithm (", ButtonBox["[LenLL82]", BaseStyle->"Hyperlink", ButtonData:>"RefLenLL82"], ")." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Step 3", FontWeight->"Bold"], ":\nCheck if one of the ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " \"short\" vectors ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "+", "1"}]}], TraditionalForm]]], ", has the property that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"(", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "i"], ")"}], RowBox[{"n", "+", "1"}]], "=", "0"}], TraditionalForm]]], " and that each of the first ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " coordinates is either 0 or \[Alpha], for some constant \[Alpha].\nIf so, \ check if the vector ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox["1", "\[Alpha]"], RowBox[{"(", RowBox[{ SubscriptBox[ RowBox[{"(", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "i"], ")"}], "1"], ",", SubscriptBox[ RowBox[{"(", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "i"], ")"}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ RowBox[{"(", SubscriptBox[ StyleBox["w", FontVariations->{"Underline"->True}], "i"], ")"}], "n"]}], ")"}]}], TraditionalForm]]], " is a solution of ", ButtonBox["(12.1)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], ". If it does, STOP, otherwise continue with Step 4." }], "Text"], Cell[TextData[{ StyleBox["Step 4", FontWeight->"Bold"], ":\nRepeat Steps 1, 2 and 3 with ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " replaced by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], SubscriptBox["a", "i"]}], "-", "S"}], TraditionalForm]]], ". If these steps result in a solution ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["x", "i"], "'"}], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " for this new knapsack problem then ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], ", defined by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "=", RowBox[{"1", "-", RowBox[{ SubscriptBox["x", "i"], "'"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], " , will be the solution of the original knapsack." }], "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"], "Consider the knapsack problem with", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "10"], "="}], TraditionalForm]]], "{541,400,259,1059,895,590,498,973,41,649} and ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", "4517"}], TraditionalForm]]], ".", StyleBox["\n", FontWeight->"Bold"], "Let us first make the vectors ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "10"}], TraditionalForm]]], ", as indicated by ", ButtonBox["(12.10)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap the basis vectors"], ". We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Transpose", FontVariations->{"Underline"->True}], ", ", StyleBox["Append", FontVariations->{"Underline"->True}], ", ", StyleBox["IdentityMatrix", FontVariations->{"Underline"->True}], ", ", StyleBox["Do", FontVariations->{"Underline"->True}], ", ", StyleBox["Table", FontVariations->{"Underline"->True}], ", and ", StyleBox["MatrixForm", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{ 3.4233922862681875`*^9, 3.4233938664970512`*^9, 3.423395224583868*^9, 3.423397144939908*^9, {3.4234563339277363`*^9, 3.4234563356622*^9}, { 3.4234724384255266`*^9, 3.423472444816192*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"a", " ", "=", " ", RowBox[{"{", RowBox[{ "541", ",", " ", "400", ",", " ", "259", ",", " ", "1059", ",", " ", "895", ",", " ", "590", ",", " ", "498", ",", " ", "973", ",", " ", "41", ",", " ", "649"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"s", " ", "=", "4517"}], ";"}], "\n", RowBox[{ RowBox[{"aux", " ", "=", " ", RowBox[{"Transpose", "[", " ", RowBox[{"Append", "[", RowBox[{ RowBox[{"IdentityMatrix", "[", "10", "]"}], ",", RowBox[{"-", "a"}]}], "]"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"v", "[", "i", "]"}], " ", "=", " ", RowBox[{"aux", "[", RowBox[{"[", "i", "]"}], "]"}]}], ",", " ", RowBox[{"{", RowBox[{"i", ",", " ", "1", ",", " ", "10"}], "}"}]}], "]"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"v", "[", "11", "]"}], " ", "=", " ", RowBox[{"Append", "[", RowBox[{ RowBox[{"Table", "[", RowBox[{"0", ",", " ", RowBox[{"{", "10", "}"}]}], "]"}], ",", " ", "s"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"v", "[", "i", "]"}], ",", " ", RowBox[{"{", RowBox[{"i", ",", " ", "1", ",", " ", "11"}], "}"}]}], "]"}], "//", "MatrixForm"}]}], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "0", "0", "0", "0", "0", "0", RowBox[{"-", "541"}]}, {"0", "1", "0", "0", "0", "0", "0", "0", "0", "0", RowBox[{"-", "400"}]}, {"0", "0", "1", "0", "0", "0", "0", "0", "0", "0", RowBox[{"-", "259"}]}, {"0", "0", "0", "1", "0", "0", "0", "0", "0", "0", RowBox[{"-", "1059"}]}, {"0", "0", "0", "0", "1", "0", "0", "0", "0", "0", RowBox[{"-", "895"}]}, {"0", "0", "0", "0", "0", "1", "0", "0", "0", "0", RowBox[{"-", "590"}]}, {"0", "0", "0", "0", "0", "0", "1", "0", "0", "0", RowBox[{"-", "498"}]}, {"0", "0", "0", "0", "0", "0", "0", "1", "0", "0", RowBox[{"-", "973"}]}, {"0", "0", "0", "0", "0", "0", "0", "0", "1", "0", RowBox[{"-", "41"}]}, {"0", "0", "0", "0", "0", "0", "0", "0", "0", "1", RowBox[{"-", "649"}]}, {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "4517"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "The vectors ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "10"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " form the basis of a lattice \[CapitalLambda].\nNext we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["LatticeReduce", FontVariations->{"Underline"->True}], " to find a reduced basis." }], "Text", CellChangeTimes->{{3.4234724846758223`*^9, 3.423472520769803*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"LatticeReduce", "[", " ", RowBox[{"Table", "[", RowBox[{ RowBox[{"v", "[", "i", "]"}], ",", " ", RowBox[{"{", RowBox[{"i", ",", " ", "1", ",", " ", "11"}], "}"}]}], "]"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "2"}], ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", "0", ",", RowBox[{"-", "2"}], ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1", ",", RowBox[{"-", "1"}], ",", "1", ",", RowBox[{"-", "2"}], ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}], ",", "0", ",", RowBox[{"-", "1"}], ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "1", ",", RowBox[{"-", "2"}], ",", "0", ",", "0", ",", "1", ",", "0", ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}], ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "1", ",", RowBox[{"-", "1"}], ",", "0", ",", "0", ",", RowBox[{"-", "2"}], ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "1"}], ",", "0", ",", "0", ",", "1", ",", "0", ",", RowBox[{"-", "2"}], ",", "0", ",", RowBox[{"-", "1"}], ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", RowBox[{"-", "1"}], ",", "0", ",", "1", ",", RowBox[{"-", "1"}], ",", "0", ",", RowBox[{"-", "2"}], ",", "1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0", ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}], ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "1"}], ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", RowBox[{"-", "2"}], ",", RowBox[{"-", "1"}], ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "We see that only the last output is a two-valued vector on its first 10 \ coordinates. One of the values is indeed 0, the other value is \[Alpha]=1. \ Trying out ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "10"], "=", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], TraditionalForm]]], " gives indeed ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["a", "i"], SubscriptBox["x", "i"]}]}], "=", "S"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"x", "=", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], ";", RowBox[{ RowBox[{"a", ".", "x"}], "==", "S"}]}]], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output"], Cell[TextData[{ "The computing time of Steps 1 and 3 in the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-attack is ignorable. Therefore, the running time of this algorithm is \ essentially (twice) the running time of the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-algorithm, as given by in ", ButtonBox["Theorem 12.2", BaseStyle->"Hyperlink", ButtonData:>"TheoKnap complexity L3"], ". There is in no guarantee that the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-algorithm will find a solution of the knapsack problem. However the \ authors of ", ButtonBox["[LagO83]", BaseStyle->"Hyperlink", ButtonData:>"RefLagO83"], " give the following analysis of the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-algorithm." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"B", "\[GreaterEqual]", SuperscriptBox["2", RowBox[{ RowBox[{"(", RowBox[{"1", "+", "\[Beta]"}], ")"}], SuperscriptBox["n", "2"]}]]}], TraditionalForm]]], " for some constant ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", ">", "0"}], TraditionalForm]]], " and knapsack length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"K", "(", RowBox[{"n", ",", "B"}], ")"}], TraditionalForm]]], " denote the number of knapsacks ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " satisfying \n1) ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", SubscriptBox["a", "i"], "\[LessEqual]", "B"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ",\n2) the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-attack will find a {0,1}-solution ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["x", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " for ", ButtonBox["(12.1)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], " for each right hand side ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " for which there exists such a solution.\nThen\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"K", "(", RowBox[{"n", ",", "B"}], ")"}], "=", RowBox[{ SuperscriptBox["B", "n"], "(", RowBox[{"1", "-", RowBox[{"\[Epsilon]", "(", "B", ")"}]}], ")"}]}], TraditionalForm]]], ",\n\t\t\nwhere\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"0", "<", RowBox[{"\[Epsilon]", "(", "B", ")"}], "<", FractionBox[ SubscriptBox["C", "1"], SuperscriptBox["B", RowBox[{ SubscriptBox["C", "2"], "-", RowBox[{"3", RowBox[{ RowBox[{"(", RowBox[{"ln", " ", "n"}], ")"}], "/", "n"}]}]}]]]}], TraditionalForm]]], "\n\t\t\nfor some constant ", Cell[BoxData[ FormBox[ SubscriptBox["C", "1"], TraditionalForm]]], " and where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "2"], "=", RowBox[{ RowBox[{"1", "-", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "\[Beta]"}], ")"}], RowBox[{"-", "1"}]]}], ">", "0"}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ "\nTheorem 12.4 states that for any ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", ">", "0"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " sufficiently large one can solve the knapsack problem for almost all \ knapsacks ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " with density" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"d", "(", SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], ")"}], "\[LessEqual]", FractionBox["n", RowBox[{ SubscriptBox["log", "2"], "B"}]], "<", FractionBox["1", RowBox[{ RowBox[{"(", RowBox[{"1", "+", "\[Beta]"}], ")"}], "n"}]]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "With some additional work ", ButtonBox["[LagO83]", BaseStyle->"Hyperlink", ButtonData:>"RefLagO83"], ", the inequality above can be weakened to" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"d", "(", SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], ")"}], "<", RowBox[{ RowBox[{"(", RowBox[{"1", "-", "\[Epsilon]"}], ")"}], FractionBox["1", RowBox[{ RowBox[{"n", ".", SubscriptBox["log", "2"]}], RowBox[{"4", "/", "3"}]}]]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "for any fixed ", Cell[BoxData[ FormBox[ RowBox[{"\[Epsilon]", ">", "0"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". This inequality is probably not the best possible one." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "The ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-Lattice Basis Reduction Algorithm" }], "Subsection", CellTags->"SubsKnap L3 reduction"], Cell[TextData[{ "Recall that the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]], FontSlant->"Italic"], StyleBox["-algorithm", FontSlant->"Italic"], " must find a basis ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " for an integer lattice that meets the requirement given in ", ButtonBox["Definition 12.3", BaseStyle->"Hyperlink", ButtonData:>"DefKnap reduced"], ":" }], "Text"], Cell[TextData[{ "\t\t", Cell[BoxData[ FormBox[ RowBox[{"||", FormBox[ RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], "+", RowBox[{ SubscriptBox["\[Mu]", RowBox[{"i", ",", RowBox[{"i", "-", "1"}]}]], SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"i", "-", "1"}]]}]}], TraditionalForm], SuperscriptBox["||", "2"], RowBox[{"\[GreaterEqual]", RowBox[{"y", "."}]}], "||", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"i", "-", "1"}]], SuperscriptBox["||", "2"]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ",\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"(", RowBox[{"|", "\[Mu]"}], ")"}], RowBox[{"i", ",", "j"}]], "|", RowBox[{"\[LessEqual]", RowBox[{"1", "/", "2"}]}]}], TraditionalForm]]], ", \t\t\t", Cell[BoxData[ FormBox[ RowBox[{ "1", "\[LessEqual]", "i", "\[LessEqual]", "j", "\[LessEqual]", "n"}], TraditionalForm]]], "," }], "Text"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Mu]", RowBox[{"i", ",", "j"}]], "=", FractionBox[ RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "j"], ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"]}], ")"}], RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], ",", ",", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"]}], ")"}]]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "The ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-algorithm makes use of the following procedure:" }], "Text"], Cell[TextData[{ StyleBox["Procedure reduce", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{"k", ",", "l"}], "]"}], TraditionalForm]], FontWeight->"Bold"], "\n\t", StyleBox["Input", FontWeight->"Bold"], "\t\t", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "l", "<", "k"}], TraditionalForm]]], "\t\n\t", StyleBox["Compute", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ SubscriptBox["\[Mu]", RowBox[{"l", ",", "k"}]], TraditionalForm]]], "\n\t", StyleBox["If", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"(", RowBox[{"|", "\[Mu]"}], ")"}], RowBox[{"l", ",", "k"}]], "|", RowBox[{">", RowBox[{"1", "/", "2"}]}]}], TraditionalForm]]], " ", StyleBox["then begin", FontWeight->"Bold"], "\n\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{"r", "=", RowBox[{"\[LeftFloor]", RowBox[{"0.5", "+", SubscriptBox["\[Mu]", RowBox[{"l", ",", "k"}]]}], "\[RightFloor]"}]}], TraditionalForm]]], "\n\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "k"], ":=", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "k"], "-", RowBox[{"r", ".", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "l"]}]}]}], TraditionalForm]]], "\n\t\t\t\t", StyleBox["end", FontWeight->"Bold"] }], "Text", ParagraphSpacing->{0, 0}, Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ "The ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-algorithm now runs as follows:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]], FontWeight->"Bold"], StyleBox["-Algorithm", FontWeight->"Bold"], "\n\t", StyleBox["Input", FontWeight->"Bold"], "\t\t", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], ", basis of ", ButtonBox["integer lattice", BaseStyle->"Hyperlink", ButtonData:>"DefKnap lattice"], "\n\t", StyleBox["Initialize", FontWeight->"Bold"], "\tk=2\n\t", StyleBox["While", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[LessEqual]", "n"}], TraditionalForm]]], " \t", StyleBox["do", FontWeight->"Bold"], "\n\t\t\t", StyleBox["begin", FontWeight->"Bold"], "\n\t\t\t", StyleBox["reduce", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"k", ",", RowBox[{"k", "-", "1"}]}], ")"}], TraditionalForm]]], "\n\t\t\t", StyleBox["compute", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"||", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "k"], "||"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"||", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"k", "-", "1"}]], "||"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["\[Mu]", RowBox[{ RowBox[{"k", "-", "1"}], ",", "k"}]], TraditionalForm]]], "\n\t\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"||", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "k"], SuperscriptBox["||", "2"], RowBox[{"<", RowBox[{ RowBox[{"(", RowBox[{"y", "-", SubsuperscriptBox["\[Mu]", RowBox[{ RowBox[{"k", "-", "1"}], ",", "k"}], "2"]}], ")"}], "."}]}], "||", SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], RowBox[{"k", "-", "1"}]], SuperscriptBox["||", "2"]}], TraditionalForm]]], " \n\t\t\t\t", StyleBox["then begin\texchange", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "k"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], RowBox[{"k", "-", "1"}]], TraditionalForm]]], "\n\t\t\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{"k", ":=", RowBox[{"max", RowBox[{"{", RowBox[{"2", ",", RowBox[{"k", "-", "1"}]}], "}"}]}]}], TraditionalForm]]], "\n\t\t\t\t ", StyleBox["end\n\t\t\t else begin", FontWeight->"Bold"], "\t", StyleBox["reduce", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"k", ",", "l"}], ")"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"l", "=", RowBox[{"k", "-", "1"}]}], ",", "\[Ellipsis]", ",", "2", ",", "1"}], TraditionalForm]]], "\n\t\t\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{"k", "=", RowBox[{"k", "+", "1"}]}], TraditionalForm]]], "\n\t\t\t\t ", StyleBox["end\n\t\t\tend", FontWeight->"Bold"] }], "Text", ParagraphSpacing->{0, 0}, Background->RGBColor[0.839994, 1, 0.2]] }, Open ]], Cell[TextData[{ "For further reading see ", ButtonBox["[LenLL82]", BaseStyle->"Hyperlink", ButtonData:>"RefLenLL82"], ". Notice that only the basis ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["v", FontVariations->{"Underline"->True}], "n"]}], StyleBox["}", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " is adjusted in this algorithm. No vector ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["u", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " enters the reduced basis, they are only used in the calculations." }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Chor-Rivest Variant" }], "Section", CellTags->"SectKnap ChorR"], Cell[TextData[{ "The Chor-Rivest scheme ", ButtonBox["[ChoR85]", BaseStyle->"Hyperlink", ButtonData:>"RefChoR85"], " is a knapsack based cryptosystem that does not convert a secret knapsack, \ for which the knapsack problem is easy to solve, into the public knapsack, \ for which the knapsack problem should be intractable. It does make use of the \ standard conversion of integers to binary sequences of fixed length. Further, \ it employes a fixed constant, a fixed choice of an irreducible polynomial, a \ fixed choice of a primitive element, a fixed permutation, and an \ exponentiation in a finite field for which the logarithm problem is \ tractable. " }], "Text", GeneratedCell->True], Cell[TextData[{ "In ", ButtonBox["[Vaud98]", BaseStyle->"Hyperlink", ButtonData:>"RefVaud98"], ", it is shown that the parameters suggested in ", ButtonBox["[ChoR85]", BaseStyle->"Hyperlink", ButtonData:>"RefChoR85"], " are not secure. The author gives suggestions to repair the original \ proposal. Here we shall only explain the original idea of the Chor-Rivest \ scheme." }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell[TextData[StyleBox["Setting Up the System", FontWeight->"Bold"]], "Subsubsection", CellTags->"SubsubsKnap CR setting it up"], Cell[TextData[{ "1)\tEach user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " selects a finite field ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], RowBox[{"(", "q", ")"}]}], TraditionalForm]]], " for which the logarithm problem is feasible (also by the cryptanalist). \ For instance, in view of the ", ButtonBox["Pohlig-Hellman Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Pohlig Hellman"], " explained in Subsection 8.3.1, this can be achieved by letting ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " have only small prime factors. Further, the ", ButtonBox["characteristic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB characteristic"], " ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "k"]}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ", should satisfy ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "k"}], TraditionalForm]]], ".\nTo represent ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " uses a random irreducible polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], " The elements of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " can be represented by ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomials of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "k"}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field Iff Irred"], ").\nNote that, for reasons of clarity, we have omitted the subscript ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " in the above choices by ", Cell[BoxData[ FormBox["U", TraditionalForm]]], ")." }], "Text", GeneratedCell->True], Cell[TextData[{ "2)\tUser ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " selects a random ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " \[Alpha] in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ". Primitive means that each non-zero element in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " can be written as some power ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "i"], TraditionalForm]]], " of \[Alpha], where ", Cell[BoxData[ FormBox[ RowBox[{"i", "<", RowBox[{"q", "-", "1"}]}], TraditionalForm]]], ". Note that \[Alpha], being an element in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", is also a ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomial of degree less than ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "3)\tFor each ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[Element]", SubscriptBox["\[DoubleStruckCapitalZ]", "p"]}], TraditionalForm]]], ", user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " determines the discrete logarithm of the field elements ", Cell[BoxData[ FormBox[ RowBox[{"x", "+", "i"}], TraditionalForm]]], " with respect to the primitive element \[Alpha]. In other words, one needs \ to find exponents ", Cell[BoxData[ FormBox[ SubscriptBox["U", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[Element]", SubscriptBox["\[DoubleStruckCapitalZ]", "p"]}], TraditionalForm]]], ", satisfying " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["U", "i"]], "\[Congruent]", RowBox[{"x", "+", RowBox[{"i", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormKnap CR a^Ui=x+i"], Cell[" This is feasible by our assumption in 1).", "Text"], Cell[TextData[{ "4)\tFinally, user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " has to select a random permutation ", Cell[BoxData[ FormBox[ SubscriptBox["\[Pi]", "U"], TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", RowBox[{"p", "-", "1"}]}], "}"}], TraditionalForm]]], " and a random element ", Cell[BoxData[ FormBox[ SubscriptBox["D", "U"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "D", "<", RowBox[{"q", "-", "1"}]}], TraditionalForm]]], ". He computes the numbers" }], "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "i"], "\[Congruent]", RowBox[{ SubscriptBox["U", RowBox[{"\[Pi]", "(", "i", ")"}]], "+", RowBox[{ SubscriptBox["D", "U"], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "q"}], "-", "1"}], ")"}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormKnap u=U+D"], Cell[TextData[{ "and makes these numbers ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "0"], ",", SubscriptBox["u", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["u", RowBox[{"p", "-", "1"}]]}], TraditionalForm]]], " public together with the value ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "k"]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "(The reader should recall that ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " is the order of the multiplicative group of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", see ", ButtonBox["Theorem B.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Cyclic Struc"], ")." }], "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[" (Part 1)", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Bob selects the finite field ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["7", "3"], ")"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "7"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "3"}], TraditionalForm]]], ". An irreducible, binary polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " of degree 3 over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "7"], TraditionalForm]]], " can be found with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["IrreduciblePolynomial", FontFamily->"Times New Roman", FontVariations->{"Underline"->True}], ", once the package ", StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], " has been loaded." }], "Example", CellChangeTimes->{{3.4214694659974847`*^9, 3.4214694774037347`*^9}, { 3.4214695209818597`*^9, 3.4214695318099847`*^9}, {3.4214695786693597`*^9, 3.4214695787162347`*^9}, {3.423454913689972*^9, 3.423454917018076*^9}, { 3.4234550462516236`*^9, 3.4234550480953617`*^9}}, CellTags->"ExamKnap ChorR"], Cell[BoxData[ RowBox[{"<<", "FiniteFields`"}]], "Input", CellID->30826], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "7"}], ";", RowBox[{"k", "=", "3"}], ";", RowBox[{"q", "=", SuperscriptBox["p", "k"]}], ";", RowBox[{"f", "=", RowBox[{"IrreduciblePolynomial", "[", RowBox[{"x", ",", "p", ",", "k"}], "]"}]}]}]], "Input", CellChangeTimes->{{3.423300769165269*^9, 3.423300781602848*^9}}], Cell[BoxData[ RowBox[{"4", "+", "x", "+", RowBox[{"2", " ", SuperscriptBox["x", "2"]}], "+", SuperscriptBox["x", "3"]}]], "Output", CellChangeTimes->{ 3.4214695044193597`*^9, 3.4214698223099847`*^9, 3.423210364354393*^9, 3.4232109216165304`*^9, 3.4232202411986566`*^9, 3.4232987853869476`*^9, { 3.4233007642902374`*^9, 3.423300782477854*^9}, 3.423374099811776*^9, 3.4233754915341454`*^9, 3.4233762591548843`*^9}], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"2", SuperscriptBox["x", "2"]}], "+", "x", "+", "4"}]}], TraditionalForm]]], ". It turns out that ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", "x"}], TraditionalForm]]], " is a primitive element in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["7", "3"], ")"}], TraditionalForm]]], ". This can be checked as follows. From ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", RowBox[{ RowBox[{ SuperscriptBox["7", "3"], "-", "1"}], "=", RowBox[{"11", "\[Times]", "31"}]}]}], TraditionalForm]]], ", we see that the order of any element is either ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "11", ",", "31"}], TraditionalForm]]], ", or 342 (see ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], "). But ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", "x"}], TraditionalForm]]], " does not have order 11 or 31, as can be checked with the following \ calculations. (We use the ", StyleBox["GF", FontVariations->{"Underline"->True}], "-function. Note that f342 represents ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", SuperscriptBox["7", "3"], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "7"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}]}], TraditionalForm]]], ".) " }], "Text", CellChangeTimes->{{3.423460211643093*^9, 3.423460213955604*^9}}, FontSlant->"Italic"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"PowerListQ", "[", RowBox[{"GF", "[", RowBox[{"7", ",", RowBox[{"{", RowBox[{"4", ",", "1", ",", "2", ",", "1"}], "}"}]}], "]"}], "]"}], "=", "True"}], ";"}], "\n", RowBox[{ RowBox[{"f341", "=", RowBox[{"GF", "[", RowBox[{"7", ",", RowBox[{"{", RowBox[{"4", ",", "1", ",", "2", ",", "1"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{"om", "=", RowBox[{"FieldExp", "[", RowBox[{"f341", ",", "1"}], "]"}]}]}], "Input", CellChangeTimes->{{3.4233752376497602`*^9, 3.423375242477113*^9}, { 3.4233758285435123`*^9, 3.423375971775877*^9}, {3.42337628978204*^9, 3.4233762962356195`*^9}}], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}], "7"], Subscripted[ {0, 1, 0}[7]], Editable->False]], "Output", CellChangeTimes->{3.423375942849745*^9, 3.4233759728541613`*^9, 3.423376261264407*^9, 3.4233762975638375`*^9}], Cell[CellGroupData[{ Cell[BoxData[{ SuperscriptBox["om", "11"], "\[IndentingNewLine]", SuperscriptBox["om", "31"]}], "Input", CellChangeTimes->{{3.423210425572359*^9, 3.4232104543063664`*^9}, { 3.4232111204602804`*^9, 3.4232111353665304`*^9}, 3.4232202473861566`*^9, { 3.4232202896049066`*^9, 3.4232202932611566`*^9}, {3.423375495221386*^9, 3.4233754983149176`*^9}, {3.4233760086563053`*^9, 3.4233760099221163`*^9}}], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"6", ",", "1", ",", "3"}], "}"}], "7"], Subscripted[ {6, 1, 3}[7]], Editable->False]], "Output", CellChangeTimes->{3.4233760223614473`*^9, 3.423376264811532*^9, 3.4233763019235196`*^9}], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"3", ",", "3", ",", "6"}], "}"}], "7"], Subscripted[ {3, 3, 6}[7]], Editable->False]], "Output", CellChangeTimes->{3.4233760223614473`*^9, 3.423376264811532*^9, 3.4233763020329027`*^9}] }, Open ]] }, Open ]], Cell[TextData[{ "To get a random primitive element \[Alpha] in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["7", "3"], ")"}], TraditionalForm]]], ", Bob raises \[Omega] to the power ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"i", ",", RowBox[{"q", "-", "1"}]}], ")"}], "=", "1"}], TraditionalForm]]], " (see ", ButtonBox["Lemma B.4", BaseStyle->"Hyperlink", ButtonData:>"LemAppB order a^k"], "). We use the functions ", StyleBox["RandomInteger", FontVariations->{"Underline"->True}], ", ", StyleBox["GCD", FontVariations->{"Underline"->True}], ", and ", StyleBox["While", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423396667749354*^9, 3.4233966720462565`*^9}, 3.4233969035946136`*^9, {3.4234545444101872`*^9, 3.4234545456601872`*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"i", "=", RowBox[{"q", "-", "1"}]}], ";", RowBox[{"While", "[", RowBox[{ RowBox[{ RowBox[{"GCD", "[", RowBox[{"i", ",", RowBox[{"q", "-", "1"}]}], "]"}], "\[NotEqual]", "1"}], ",", RowBox[{"i", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{"1", ",", RowBox[{"q", "-", "2"}]}], "}"}], "]"}]}]}], "]"}], ";", "i"}]], "Input", CellChangeTimes->{{3.423210576992296*^9, 3.4232105939295793`*^9}}], Cell[BoxData["239"], "Output", CellChangeTimes->{3.423375533109343*^9}], Cell[TextData[{ "We find i=239. The random primitive element will be ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", SuperscriptBox["\[Omega]", "i"]}], TraditionalForm]]], ", which is ", Cell[BoxData[ FormBox[ RowBox[{"3", "+", RowBox[{"4", "x"}], "+", RowBox[{"5", SuperscriptBox["x", "2"]}]}], TraditionalForm]]], " by" }], "Text", CellChangeTimes->{{3.4232203114799066`*^9, 3.4232203126830316`*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"a", "=", SuperscriptBox["om", "i"]}]], "Input"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"3", ",", "4", ",", "5"}], "}"}], "7"], Subscripted[ {3, 4, 5}[7]], Editable->False]], "Output", CellChangeTimes->{ 3.423210501149517*^9, {3.4232106274760246`*^9, 3.4232106499915304`*^9}, 3.4232109683352804`*^9, 3.4232111514290304`*^9, 3.4232202710736566`*^9, 3.4233755398588676`*^9, 3.423376352489579*^9}], Cell[TextData[{ "It follows from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"83", "\[Times]", "239"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "q"}], "-", "1"}], ")"}]}]}], TraditionalForm]]], " that ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", SuperscriptBox["\[Alpha]", "83"]}], TraditionalForm]]], ".\nTo determine the numbers ", Cell[BoxData[ FormBox[ SubscriptBox["B", "i"], TraditionalForm]]], " satisfying ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["B", "i"]], "\[Congruent]", RowBox[{"x", "+", RowBox[{"i", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}]}], TraditionalForm]]], " we use" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"B", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"83", "*", RowBox[{"FieldInd", "[", RowBox[{"om", "+", "i"}], "]"}]}], ",", RowBox[{"q", "-", "1"}]}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", RowBox[{"p", "-", "1"}]}], "}"}]}], "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "83", ",", "101", ",", "175", ",", "90", ",", "170", ",", "321", ",", "213"}], "}"}]], "Output", CellChangeTimes->{3.4232112192571554`*^9}], Cell[TextData[{ "where the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["FieldInd", FontVariations->{"Underline"->True}], " computes the discrete logarithm of its argument." }], "Text", CellChangeTimes->{{3.4234726289267454`*^9, 3.4234726583956842`*^9}, { 3.4234727015678353`*^9, 3.4234727060678644`*^9}}, FontSlant->"Italic"], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["B", "0"], "=", "83"}], ",", RowBox[{ SubscriptBox["B", "1"], "=", "101"}], ",", RowBox[{ SubscriptBox["B", "2"], "=", "175"}], ",", RowBox[{ SubscriptBox["B", "3"], "=", "90"}], ",", RowBox[{ SubscriptBox["B", "4"], "=", "170"}], ",", RowBox[{ SubscriptBox["B", "5"], "=", "321"}], ",", RowBox[{ SubscriptBox["B", "6"], "=", "213"}]}], TraditionalForm]]], ". \nThis can be checked with:" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"B", "=", RowBox[{"{", RowBox[{ "83", ",", "101", ",", "175", ",", "90", ",", "170", ",", "321", ",", "213"}], "}"}]}], ";", SuperscriptBox["a", "B"]}]], "Input", CellChangeTimes->{{3.4232112355852804`*^9, 3.423211267319851*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}], "7"], Subscripted[ {0, 1, 0}[7]], Editable->False], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0"}], "}"}], "7"], Subscripted[ {1, 1, 0}[7]], Editable->False], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "1", ",", "0"}], "}"}], "7"], Subscripted[ {2, 1, 0}[7]], Editable->False], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"3", ",", "1", ",", "0"}], "}"}], "7"], Subscripted[ {3, 1, 0}[7]], Editable->False], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"4", ",", "1", ",", "0"}], "}"}], "7"], Subscripted[ {4, 1, 0}[7]], Editable->False], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"5", ",", "1", ",", "0"}], "}"}], "7"], Subscripted[ {5, 1, 0}[7]], Editable->False], ",", InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"6", ",", "1", ",", "0"}], "}"}], "7"], Subscripted[ {6, 1, 0}[7]], Editable->False]}], "}"}]], "Output", CellChangeTimes->{3.423211269038612*^9}], Cell[TextData[{ StyleBox["A few more things need to be done by Bob. He has to select a \ random number ", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"D", ",", " ", RowBox[{"0", "\[LessEqual]", "D", "<", RowBox[{"q", "-", "1"}]}], ","}], TraditionalForm]], FontSlant->"Italic"], StyleBox[" and a random permutation \[Pi] of ", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", " ", "1", ",", "\[Ellipsis]", " ", ",", " ", "6"}], "}"}], " "}], TraditionalForm]], FontSlant->"Italic"], StyleBox[". We load the Mathematica package", FontSlant->"Italic"], " ", StyleBox["Combinatorica", FontSlant->"Italic", FontVariations->{"Underline"->True}], " ", StyleBox["and use the functions ", FontSlant->"Italic"], StyleBox["RandomInteger", FontSlant->"Italic", FontVariations->{"Underline"->True}], " ", StyleBox["and", FontSlant->"Italic"], " ", StyleBox["RandomPermutation", FontSlant->"Italic", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4232984215564947`*^9, 3.4232985487916837`*^9}, { 3.4232985829794025`*^9, 3.4232986211827717`*^9}, {3.4232986644174232`*^9, 3.423298691308221*^9}, {3.4232987466679497`*^9, 3.423298753230492*^9}, { 3.423299604907818*^9, 3.423299623111059*^9}, {3.4232997209398108`*^9, 3.423299733205514*^9}, {3.4232997770651693`*^9, 3.423299795127785*^9}, { 3.423299842253087*^9, 3.4232998445499763`*^9}, {3.423299902565973*^9, 3.4232999172535667`*^9}, {3.4232999822227325`*^9, 3.4232999889415255`*^9}, { 3.423300065113888*^9, 3.423300069004538*^9}, {3.4234727273023753`*^9, 3.4234727993497114`*^9}, {3.4234728435062437`*^9, 3.4234728526625524`*^9}}], Cell[BoxData[ RowBox[{"<<", "Combinatorica`"}]], "Input", CellID->24456], Cell[BoxData[{ RowBox[{"RD", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{"0", ",", RowBox[{"q", "-", "2"}]}], "}"}], "]"}]}], "\n", RowBox[{"pi", "=", RowBox[{"RandomPermutation", "[", "7", "]"}]}]}], "Input"], Cell[BoxData["244"], "Output", CellChangeTimes->{3.4233764297606435`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"6", ",", "3", ",", "7", ",", "4", ",", "5", ",", "2", ",", "1"}], "}"}]], "Output", CellChangeTimes->{3.4233764298856525`*^9}], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{"RD", "=", "244"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Pi]", "=", RowBox[{"{", RowBox[{ "6", ",", "3", ",", "7", ",", "4", ",", "5", ",", "2", ",", "1"}], "}"}]}], TraditionalForm]]], ", meaning that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"\[Pi]", "(", "1", ")"}], "=", "6"}], ",", RowBox[{ RowBox[{"\[Pi]", "(", "2", ")"}], "=", "3"}], " ", ",", "\[Ellipsis]", ",", RowBox[{ RowBox[{"\[Pi]", "(", "7", ")"}], "=", "1"}]}], TraditionalForm]]], ".\n(The reader should watch out here. ", StyleBox["Mathematica", FontSlant->"Italic"], " labels the entries in a list starting with 1, while we start with 0. )" }], "Text", CellChangeTimes->{{3.4232116231502533`*^9, 3.4232116231502533`*^9}}, FontSlant->"Italic"], Cell[TextData[{ "The public key is given by the sequence ", ButtonBox["(12.12)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap u=U+D"], ": ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", "i"], "=", RowBox[{ SubscriptBox["B", RowBox[{"\[Pi]", "(", "i", ")"}]], "+", "D"}]}], TraditionalForm]]], ". We use the functions ", StyleBox["Table", FontVariations->{"Underline"->True}], " and ", StyleBox["Mod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.423393880012763*^9, 3.423396260309246*^9}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"BPerm", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"B", "[", RowBox[{"[", RowBox[{"pi", "[", RowBox[{"[", "i", "]"}], "]"}], "]"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "7"}], "}"}]}], "]"}]}], "\n", RowBox[{"b", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"BPerm", "+", "RD"}], ",", RowBox[{"q", "-", "1"}]}], "]"}]}]}], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "321", ",", "175", ",", "213", ",", "90", ",", "170", ",", "101", ",", "83"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "223", ",", "77", ",", "115", ",", "334", ",", "72", ",", "3", ",", "327"}], "}"}]], "Output"], Cell[TextData[{ "Bob makes ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["b", "i"], "}"}], RowBox[{"i", "=", "0"}], "6"], "=", RowBox[{"{", RowBox[{ "223", ",", "77", ",", "115", ",", "334", ",", "72", ",", "3", ",", "327"}], "}"}]}], TraditionalForm]]], " public and also ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "3"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["Encryption", FontWeight->"Bold"]], "Subsubsection", CellTags->"SubsubsKnap CR encryp"], Cell[TextData[{ "Now suppose that Alice wants to send a secret message to Bob. She looks up \ the public parameters ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", "0"], ",", SubscriptBox["b", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["b", RowBox[{"p", "-", "1"}]]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " of Bob. She calculates ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "B"], "=", SuperscriptBox["p", "k"]}], TraditionalForm]]], ". Alice's message is a number ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " in between 1 and ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"p"}, {"k"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], ".\nAlice represents her message (in a manner that is shown below) as a \ binary string ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "0"], ",", SubscriptBox["m", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"p", "-", "1"}]]}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", ButtonBox["weight", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl weight"], " ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " (exactly ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " of the ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], "'s are equal to 1), so" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], SubscriptBox["m", "i"]}], "=", "k"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormKnap Sum mi=k"], Cell["Alice will send ", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{ SubscriptBox["m", "i"], SubscriptBox["b", "i"], " ", "mod", " ", SubscriptBox["q", "B"]}]}], ")"}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormKnap CR encr"], Cell[TextData[{ "Example 12.7 (Part 2)", StyleBox["\nSuppose that Alice wants to send a message to Bob. She looks up \ Bob's public parameters ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"k", "=", "3"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" and ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["b", "i"], "}"}], RowBox[{"i", "=", "0"}], "6"], "=", RowBox[{"{", RowBox[{ "223", ",", "77", ",", "115", ",", "334", ",", "72", ",", "3", ",", "327"}], "}"}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" (see ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 12.7", BaseStyle->"Hyperlink", ButtonData:>"ExamKnap ChorR"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox["). So, she knows that ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"p", "=", "7"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" (and ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"q", "=", RowBox[{ SuperscriptBox["7", "3"], "=", "341"}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[").", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", FontWeight->"Bold"], Cell[TextData[{ "Let Alice's message be ", Cell[BoxData[ FormBox[ RowBox[{"M", "=", "19"}], TraditionalForm]]], " (which indeed lies in between 1 and ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"7"}, {"3"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], ").\nThis can be represented by the binary sequence ", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["m", "i"], "}"}], RowBox[{"i", "=", "0"}], "6"], "=", RowBox[{"{", RowBox[{ "0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0"}]}]}], TraditionalForm], ")"}]]], ", as shown below.\nThe ciphertext ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " that Alice will send will be ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "6"], RowBox[{ SubscriptBox["m", "i"], SubscriptBox["b", "i"]}]}], TraditionalForm]]], ", which is 264 in this case." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}]}], ";", RowBox[{"ct", "=", RowBox[{"m", ".", "b"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData["264"], "Output"], Cell[TextData[{ "There is a recursive way to map a number ", Cell[BoxData[ FormBox["M", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "M", "\[LessEqual]", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"p"}, {"k"} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], ", into a binary string ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "0"], ",", SubscriptBox["m", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"p", "-", "1"}]]}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and weight ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ". It makes use of the well-known identity:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"p"}, {"k"} }], "\[NegativeThinSpace]", ")"}], "=", RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"p", "-", "1"}]}, {"k"} }], "\[NegativeThinSpace]", ")"}], "+", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"p", "-", "1"}]}, { RowBox[{"k", "-", "1"}]} }], "\[NegativeThinSpace]", ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"M", ">", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"p", "-", "1"}]}, {"k"} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], ", we put ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", RowBox[{"p", "-", "1"}]], "=", "1"}], TraditionalForm]]], " and decrease ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " by ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"p", "-", "1"}]}, {"k"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], ". This new value will be in between 1 and ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"p", "-", "1"}]}, { RowBox[{"k", "-", "1"}]} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], " and can be described by a string ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "0"], ",", SubscriptBox["m", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"p", "-", "2"}]]}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " and weight ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "1"}], TraditionalForm]]], ".\nOn the other hand, if ", Cell[BoxData[ FormBox[ RowBox[{"M", "\[LessEqual]", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"p", "-", "1"}]}, {"k"} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], ", put ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", RowBox[{"p", "-", "1"}]], "=", "0"}], TraditionalForm]]], " and describe ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " by a string ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "0"], ",", SubscriptBox["m", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"p", "-", "2"}]]}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " and weight ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Algorithm ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\tConversion from ", FontWeight->"Bold"], Cell[BoxData[ FormBox["M", TraditionalForm]], FontWeight->"Bold"], StyleBox[" to ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "0"], ",", SubscriptBox["m", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"p", "-", "1"}]]}], TraditionalForm]], FontWeight->"Bold"], StyleBox[" of weight ", FontWeight->"Bold"], Cell[BoxData[ FormBox["k", TraditionalForm]], FontWeight->"Bold"], "\n\t", StyleBox["Input", FontWeight->"Bold"], "\t\t", Cell[BoxData[ FormBox["M", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "M", "\[LessEqual]", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"p"}, {"k"} }], ")"}]}], TraditionalForm]]], ".\n\t", StyleBox["Initialize", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{"l", "=", "k"}], TraditionalForm]]], "\n\t", StyleBox["For", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"i", "=", "1"}], TraditionalForm]]], " ", StyleBox["to", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " ", StyleBox["do if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"M", ">", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"p", "-", "i"}]}, {"l"} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], "\n\t\t\t ", StyleBox["then begin", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", RowBox[{"p", "-", RowBox[{"i", ":"}]}]], "=", "1"}], TraditionalForm]]], "\n\t\t\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{"M", ":=", RowBox[{"M", "-", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"p", "-", "i"}]}, {"l"} }], "\[NegativeThinSpace]", ")"}]}]}], TraditionalForm]]], "\n\t\t\t\t\t\t ", Cell[BoxData[ FormBox[ RowBox[{"l", ":=", RowBox[{"l", "-", "1"}]}], TraditionalForm]]], "\n\t\t\t \t ", StyleBox["end\n\t\t\t else", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", RowBox[{"p", "-", RowBox[{"i", ":"}]}]], "=", "0"}], TraditionalForm]]], "\t\t" }], "Theorem", CellTags->"AlgKnap conversion"], 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"], "Let", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"p", "=", "7"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "3"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"7"}, {"3"} }], "\[NegativeThinSpace]", ")"}], "=", "35"}], TraditionalForm]]], ". \nTo find out into which binary sequence of length 7 and weight 3 the \ integer ", Cell[BoxData[ FormBox[ RowBox[{"M", "=", "19"}], TraditionalForm]]], " will be mapped, we follow the algorithm below, which makes use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Table", FontVariations->{"Underline"->True}], ", ", StyleBox["If", FontVariations->{"Underline"->True}], ", ", StyleBox["Do", FontVariations->{"Underline"->True}], ", and ", StyleBox["Binomial", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{ 3.423392290971343*^9, 3.423393124836055*^9, 3.423393886262803*^9, { 3.4234732550557528`*^9, 3.4234732712746067`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "7"}], ";", RowBox[{"k", "=", "3"}], ";"}], "\n", RowBox[{ RowBox[{"Me", "=", "19"}], ";"}], "\n", RowBox[{ RowBox[{"l", "=", "k"}], ";"}], "\n", RowBox[{ RowBox[{"m", "=", RowBox[{"Table", "[", RowBox[{"0", ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "p"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"Do", "[", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{"Me", ">", RowBox[{"Binomial", "[", RowBox[{ RowBox[{"p", "-", "i"}], ",", "l"}], "]"}]}], ",", "\t\t\t\t\t\t", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"m", "[", RowBox[{"[", "i", "]"}], "]"}], "=", "1"}], ",", RowBox[{"Me", "=", RowBox[{"Me", "-", RowBox[{"Binomial", "[", RowBox[{ RowBox[{"p", "-", "i"}], ",", "l"}], "]"}]}]}], ",", RowBox[{"l", "=", RowBox[{"l", "-", "1"}]}]}], "}"}]}], "]"}], ",", "\t\t\t", RowBox[{"{", RowBox[{"i", ",", "1", ",", "p"}], "}"}]}], "]"}], ";"}], "\n", "m"}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["Decryption", FontWeight->"Bold"]], "Subsubsection", CellTags->"SubsubsKnap CR decryp"], Cell[TextData[{ "Bob receives ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ", which is in fact ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{ SubscriptBox["m", "i"], SubscriptBox["b", "i"], " ", "mod", " ", SubscriptBox["q", "B"]}]}], ")"}]}], TraditionalForm]]], " by ", ButtonBox["(12.14)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap CR encr"], ". He computes ", Cell[BoxData[ FormBox[ RowBox[{"C", "=", RowBox[{"c", "-", RowBox[{"k", ".", SubscriptBox["D", "B"]}]}]}], TraditionalForm]]], " with his secret ", Cell[BoxData[ FormBox[ SubscriptBox["D", "B"], TraditionalForm]]], " (see ", ButtonBox["(12.12)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap u=U+D"], ").\nNext, Bob computes ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "C"], TraditionalForm]]], ". Now note that in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ":" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "C"], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"c", "-", RowBox[{"k", ".", SubscriptBox["D", "B"]}]}]], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{ SubscriptBox["m", "i"], SubscriptBox["b", "i"]}]}], ")"}], "-", RowBox[{"k", ".", SubscriptBox["D", "B"]}]}]], OverscriptBox["=", RowBox[{" ", ButtonBox[ RowBox[{"(", "12.12", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormKnap u=U+D"]}]], SuperscriptBox["\[Alpha]", RowBox[{"(", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{ SubscriptBox["m", "i"], "(", RowBox[{ SubscriptBox["B", RowBox[{"\[Pi]", "(", "i", ")"}]], "+", SubscriptBox["D", "B"]}], ")"}]}], "-", RowBox[{"k", ".", SubscriptBox["D", "B"]}]}]}]]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["=", RowBox[{"(", "12.13", ")"}]], RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{ SubscriptBox["m", "i"], SubscriptBox["B", RowBox[{"\[Pi]", "(", "i", ")"}]]}]}]], "=", RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", SubscriptBox["B", RowBox[{"\[Pi]", "(", "i", ")"}]]], ")"}], SubscriptBox["m", "i"]]}], OverscriptBox["=", RowBox[{"(", "12.11", ")"}]], RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", RowBox[{"\[Pi]", "(", "i", ")"}]}], ")"}], SubscriptBox["m", "i"]]}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["This means that", "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "C"], "\[Congruent]", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", RowBox[{"\[Pi]", "(", "i", ")"}]}], ")"}], SubscriptBox["m", "i"]], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}]}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell[TextData[{ "Next, we add a suitable multiple of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "C"], TraditionalForm]]], " to make its polynomial representation ", ButtonBox["monic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB monic"], ". So, for some ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], ": ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["\[Alpha]", "C"], "+", RowBox[{"\[Beta]", ".", RowBox[{"f", "(", "x", ")"}]}]}]}], TraditionalForm]]], " is monic. \nSince also ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", RowBox[{"\[Pi]", "(", "i", ")"}]}], ")"}], SubscriptBox["m", "i"]]}], TraditionalForm]]], " is monic, the above in fact implies that" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "(", "x", ")"}], "=", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"p", "-", "1"}]], SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", RowBox[{"\[Pi]", "(", "i", ")"}]}], ")"}], SubscriptBox["m", "i"]]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "It follows that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "i"], "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"p", "-", "1"}]}], TraditionalForm]]], ", if and only if ", Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{"\[Pi]", "(", "i", ")"}]}], TraditionalForm]]], " is a zero of ", Cell[BoxData[ FormBox[ RowBox[{"a", "(", "x", ")"}], TraditionalForm]]], "." }], "Text"], Cell["\<\ We summarize the decryption process in the following algorithm.\ \>", "Text"], Cell[TextData[{ StyleBox["Algorithm ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t\tDecryption of Chor-Rivest Cryptosystem by Bob", FontWeight->"Bold"], "\n\t", StyleBox["Input", FontWeight->"Bold"], "\t\tciphertext c\n\t", StyleBox["Bob's Secret", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["D", "B"], ",", "k", ",", "\[Alpha]", ",", RowBox[{"f", "(", "x", ")"}], ",", "\[Pi]"}], TraditionalForm]]], ".\n\t", StyleBox["Compute ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"C", "=", RowBox[{"c", "-", RowBox[{"k", ".", SubscriptBox["D", "B"]}]}]}], TraditionalForm]]], " with secret ", Cell[BoxData[ FormBox[ SubscriptBox["D", "B"], TraditionalForm]]], " (see ", ButtonBox["(12.12)", BaseStyle->"Hyperlink", ButtonData:>"FormKnap u=U+D"], ").\n\t", StyleBox["Compute", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "C"], TraditionalForm]]], ", where \[Alpha] is Bob's primitive element \n\t", StyleBox["Add", FontWeight->"Bold"], "\t\tmultiple of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "C"], TraditionalForm]]], " to get monic ", Cell[BoxData[ FormBox[ RowBox[{"a", "(", "x", ")"}], TraditionalForm]]], "\n\t", StyleBox["Put", FontWeight->"Bold"], "\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "i"], "=", "1"}], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{"\[Pi]", "(", "i", ")"}]}], TraditionalForm]]], " is a zero of ", Cell[BoxData[ FormBox[ RowBox[{"a", "(", "x", ")"}], TraditionalForm]]], "." }], "Theorem", CellTags->"AlgKnap decrypt ChorR"], Cell[TextData[{ "Example 12.7 (Part 3)", StyleBox["\nWe continue with ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 12.7", BaseStyle->"Hyperlink", ButtonData:>"ExamKnap ChorR"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". Assume that Bob receives the ciphertext ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"c", "=", "264"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". \nBob's secret parameters are ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"k", "=", "3"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"D", "=", "244"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"\[Pi]", "=", RowBox[{"{", RowBox[{ "6", ",", "3", ",", "7", ",", "4", ",", "5", ",", "2", ",", "1"}], "}"}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"4", "+", "x", "+", RowBox[{"2", SuperscriptBox["x", "2"]}], "+", SuperscriptBox["x", "3"]}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" and ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"3", "+", RowBox[{"4", "x"}], "+", RowBox[{"5", SuperscriptBox["x", "2"]}]}]}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".\nBob subtracts ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"k", ".", "D"}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" from ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox["c", TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[",", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", FontWeight->"Bold"], Cell[BoxData[ RowBox[{"CT", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"ct", "-", RowBox[{"RD", "*", "k"}]}], ",", RowBox[{"q", "-", "1"}]}], "]"}]}]], "Input"], Cell[BoxData["216"], "Output", CellChangeTimes->{3.42336999534775*^9}], Cell[TextData[{ "Next he raises \[Alpha] to the power ", Cell[BoxData[ FormBox["C", TraditionalForm]]], ". To write this as a polynomial we use the function ", StyleBox["ElementToPolynomial", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234733481344733`*^9, 3.4234733595876713`*^9}}, FontSlant->"Italic"], Cell[BoxData[{ SuperscriptBox["a", "CT"], "\n", RowBox[{"u", "=", RowBox[{"ElementToPolynomial", "[", RowBox[{ SuperscriptBox["a", "CT"], ",", "x"}], "]"}]}]}], "Input"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "1", ",", "3"}], "}"}], "7"], Subscripted[ {2, 1, 3}[7]], Editable->False]], "Output"], Cell[BoxData[ RowBox[{"2", "+", "x", "+", RowBox[{"3", " ", SuperscriptBox["x", "2"]}]}]], "Output"], Cell[TextData[{ "Next, Bob has to add ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " to get the monic polynomial ", Cell[BoxData[ FormBox[ RowBox[{"a", "(", "x", ")"}], TraditionalForm]]], ". We use the function ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.4233946368613567`*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"AX", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"u", "+", "f"}], ",", "7"}], "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"6", "+", RowBox[{"2", " ", "x"}], "+", RowBox[{"5", " ", SuperscriptBox["x", "2"]}], "+", SuperscriptBox["x", "3"]}]], "Output"], Cell[TextData[{ "We factor this by means of the function ", StyleBox["Factor", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423454700253838*^9, 3.42345470159758*^9}}], Cell[BoxData[ RowBox[{"Factor", "[", RowBox[{"AX", ",", RowBox[{"{", RowBox[{"Modulus", "->", "7"}], "}"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"(", RowBox[{"2", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"4", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"6", "+", "x"}], ")"}]}], "}"}]], "Output"], Cell[TextData[{ "The inverse permutation of \[Pi] can be computed with ", StyleBox["InversePermutation", FontVariations->{"Underline"->True}], " " }], "Text", CellChangeTimes->{ 3.4215733442531757`*^9, {3.4234733805096807`*^9, 3.4234733892753615`*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"InversePermutation", "[", "pi", "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"7", ",", "6", ",", "2", ",", "4", ",", "5", ",", "1", ",", "3"}], "}"}]], "Output"], Cell[TextData[{ "We subtract 1 from these elements because \[Pi] acts on ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", "6"}], "}"}], TraditionalForm]]], " instead of ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "7"}], "}"}], TraditionalForm]]], ". We get" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"InversePermutation", "[", "pi", "]"}], "-", "1"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"6", ",", "5", ",", "1", ",", "3", ",", "4", ",", "0", ",", "2"}], "}"}]], "Output", CellChangeTimes->{3.423376606348534*^9}], Cell[TextData[{ "From this we see that the numbers ", Cell[BoxData[ FormBox[ RowBox[{"2", ",", "4"}], TraditionalForm]]], ", and 6 are mapped to ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "4"}], TraditionalForm]]], ", and 2 under ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Pi]", RowBox[{"-", "1"}]], TraditionalForm]]], ". In other words, \[Pi] maps", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"1", ",", "2", ",", " "}]}], TraditionalForm]]], "and 4 to 2, 4, resp. 6.\nWe conclude that the message vector has ones on \ the coordinates ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "2"}], TraditionalForm]]], ", and 4 (and thus zeros on the coordinates ", Cell[BoxData[ FormBox[ RowBox[{"0", ",", "3", ",", "5"}], TraditionalForm]]], ", and 6), i.e. the message vector is given by ", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["m", "i"], "}"}], RowBox[{"i", "=", "0"}], "6"], "=", RowBox[{"{", RowBox[{ "0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0"}]}]}], TraditionalForm], ")"}]]], ". \nThis is indeed equal to the value that was chosen during encryption." }], "Text", FontSlant->"Italic"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"Sectknap Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Solve the ", ButtonBox["knapsack problem", BaseStyle->"Hyperlink", ButtonData:>"FormKnap knapsack"], " if the elements are given by 333, 41, 4, 172, 19, 3, 80, and 11 and if the \ total size of the knapsack equals 227." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nSolve the knapsack problem if the elements are given by 31, 32, 46, 51 \ 63, 72 and 87 and if the total size of the knapsack equals 227." }], "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]]], "\nA ", ButtonBox["knapsack cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"TableKnap knapsack"], " has the numbers 381, 424, 2313, 2527, 2535, 3832, 3879, and 4169 as public \ key. They are obtained by multiplying the elements of a ", "super-increasing", " sequence by ", Cell[BoxData[ FormBox[ RowBox[{"W", " ", "=", " ", "4673"}], TraditionalForm]]], " and reducing the result modulo 5011.\nDecrypt message 11678." }], "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[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "n"]}], TraditionalForm]]], " be a sequence of different prime numbers and let ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " be their product. The numbers ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", are defined by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "=", RowBox[{"P", "/", SubscriptBox["p", "i"]}]}], TraditionalForm]]], ". \nLet ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["x", "i"], ".", SubscriptBox["a", "i"]}]}]}], TraditionalForm]]], ", where each element ", Cell[BoxData[ FormBox[ SubscriptBox["x", "i"], TraditionalForm]]], " is either 0 or 1.\nGive a simple algorithm to recover the numbers ", Cell[BoxData[ FormBox[ SubscriptBox["x", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", from ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "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]]], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"C", "=", "5738"}], TraditionalForm]]], " be the ciphertext obtained through a ", ButtonBox["knapsack encryption", BaseStyle->"Hyperlink", ButtonData:>"FormKnap encryption"], " with ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"{", RowBox[{ "437", ",", "1654", ",", "1311", ",", "625", ",", "1250", ",", "1720", ",", "663", ",", "1420", ",", "63", ",", "319"}], "}"}]}], TraditionalForm]]], " as public knapsack.\nApply the ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], "-attack to find the plaintext." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nWhich integer will be mapped to the binary vector ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1"}], ")"}], TraditionalForm]]], " by ", ButtonBox["Algorithm 12.5", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap conversion"], "?" }], "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]]], "\nWork out a complete ", ButtonBox["Chor-Rivest", BaseStyle->"Hyperlink", ButtonData:>"SectKnap ChorR"], " cryptosystem example (including encryption and decryption) for the \ parameters ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "11"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "2"}], TraditionalForm]]], ". " }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tHash Codes & Authentication Techniques" }], "Chapter", CellTags->"Chap Auth"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tIntroduction" }], "Section", CellTags->"SectAuth Introduction"], Cell[TextData[{ "In Section 1.1 we mentioned ", ButtonBox["confidentiality", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Privacy"], " (privacy) as the first reason why people use cryptosystem. Of course, this \ goal is very important and it does lead to interesting mathematical issues, \ but for the vast majority of data secrecy is not the user's prime concern.\n\ ", ButtonBox["Authentication", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Authen"], " and ", ButtonBox["integrity", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Integrity"], " on the other hand are almost always essential. Think, for instance, of \ receivers of data files, E-mail messages, fax, etc. Violation of the \ confidentiality does (in general) little harm, but significant damage may be \ done if somebody else is able to tamper with data files." }], "Text"], Cell["\<\ When studying authentication schemes one needs to distinguish between the \ following goals:\ \>", "Text"], Cell["\<\ i)\tDoes one want unconditional security or just computational security? ii)\tDo the various parties trust each other or not? iii)\tIs there a mutually trusted third party? iv)\tAre the data files typically very long or just short? v)\tIs confidentiality also an issue? vi)\tIs the system intended for multiple use or just for single use?\ \>", "Text"], Cell[TextData[{ "The first two distinctions especially, have lead to completely different \ research areas. The main topic of ", ButtonBox["Section 13.3", BaseStyle->"Hyperlink", ButtonData:>"SectAuth Auth Codes"], " will be authentication schemes with ", StyleBox["unconditional security", FontSlant->"Italic"], ". This means that even with unlimited computing power the opponent can not \ break the system.These schemes are usually called ", StyleBox["authentication codes", FontSlant->"Italic"], " and a particular subclass of them is called ", StyleBox["A-codes", FontSlant->"Italic"], ". " }], "Text", CellTags->"DefAuth comp secure"], Cell[TextData[{ StyleBox["Computationally secure", FontSlant->"Italic"], " systems are based on mathematical assumptions like the infeasibility of \ factoring large numbers or of taking discrete logarithms. These methods are \ called ", StyleBox["digital signature schemes", FontSlant->"Italic"], " and have already been discussed in Sections ", ButtonBox["8.1.2", BaseStyle->"Hyperlink", ButtonData:>"SubsDiscr Dif-Hel Key Exch"], ", ", ButtonBox["8.2.1", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal signature"], ", ", ButtonBox["8.2.2", BaseStyle->"Hyperlink", ButtonData:>"SubsDiscr Variations on ElGamal"], ", and ", ButtonBox["9.1.4", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA sign"], "." }], "Text", CellTags->"DefAuth Uncond secure"], Cell[TextData[{ "If a file is very long and confidentiality is not an issue a very common \ technique to add proof of authenticity and/or integrity to it, is to send it \ just like it is and then add a relatively short sequence of bits (e.g. \ 100-200) that depend in an intricate way on all the bits in the original \ message. This tail should be proof that the message indeed came from the \ assumed sender and that its contents have not been changed.\nThe standard way \ to realize this is to ", StyleBox["hash", FontSlant->"Italic"], " the file in a cryptographically secure way into a short sequence and \ compute a signature on this hash value. It is the signature of the hash value \ that is appended to the original file. If an authentication scheme is slow in \ its implementations (as is the case with digital signature schemes), this \ two-step approach may make them very practical.\nIn many applications, the \ hash function also makes use of a secret key that sender and receiver share. \ These systems, which are called Message Authentication Codes (MAC's) are not \ unconditionally secure, because somebody with unlimited computing power can, \ in principle, try out all keys.\nHash functions and MAC's are the topic of ", ButtonBox["Section 13.2", BaseStyle->"Hyperlink", ButtonData:>"SectAuth Hash"], "." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tHash Functions and MAC's" }], "Section", CellTags->"SectAuth Hash"], Cell[TextData[{ "We do not intend to give a formal description of various types of hash \ codes. For our purposes, a global understanding of these codes and their \ properties suffices.\nA ", StyleBox["hash function", FontSlant->"Italic"], " (or ", StyleBox["hash code", FontSlant->"Italic"], ") is a mapping ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ ButtonBox[ SuperscriptBox["\[ScriptCapitalA]", "*"], BaseStyle->"Hyperlink", ButtonData:>"DefIntro Language"], TraditionalForm]]], ", the set of all sequences of symbols from an alphabet ", Cell[BoxData[ FormBox["\[ScriptCapitalA]", TraditionalForm]]], ", to ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalA]", "m"], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is some fixed positive integer. So, each sequence over \[ScriptCapitalA] \ (of arbitrary length) will be mapped to a sequence over \[ScriptCapitalA] of \ length ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". In typical applications ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalA]", "=", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], TraditionalForm]]], " and the value of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " ranges somewhere between 64 and 256.\nSince one normally wants very fast \ implementations of hash functions ", Cell[BoxData[ FormBox["h", TraditionalForm]]], ", we also require that it is easy to evaluate the hash value for any \ sequence over ", Cell[BoxData[ FormBox["\[ScriptCapitalA]", TraditionalForm]]], "." }], "Text", CellTags->"DefAuth hash"], Cell["\<\ To make a hash function cryptographically secure, one often requires one or \ more of the following properties to hold.\ \>", "Text"], Cell[TextData[{ StyleBox["H1:", FontWeight->"Bold"], "\tThe hash function ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " is a ", ButtonBox["one-way function", BaseStyle->"Hyperlink", ButtonData:>"DefPubl one-way"], " (see Section 7.1.2), i.e. for almost all outputs ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " it is computationally infeasible to find an input ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Element]", SuperscriptBox["\[ScriptCapitalA]", "*"], " "}], TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", RowBox[{"h", "(", "a", ")"}]}], TraditionalForm]]], ". " }], "Text", CellTags->"DefAuth one-way"], Cell[TextData[{ StyleBox["H2:", FontWeight->"Bold"], "\tThe hash function ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " is ", StyleBox["weak collision resistant.", FontSlant->"Italic"], " This means that for a given value of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " it is computationally infeasible to find a second value ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "'"}], "\[Element]", SuperscriptBox["\[ScriptCapitalA]", "*"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[NotEqual]", RowBox[{"a", "'"}]}], TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"h", "(", "a", ")"}], "=", RowBox[{"h", "(", RowBox[{"a", "'"}], ")"}]}], TraditionalForm]]], "." }], "Text", CellTags->"DefAuth weak col res"], Cell[TextData[{ StyleBox["H3:", FontWeight->"Bold"], "\tThe hash function ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " is ", StyleBox["strong collision resistant", FontSlant->"Italic"], " This means that it is computationally infeasible to find a pair of values \ ", Cell[BoxData[ FormBox[ RowBox[{"a", ",", RowBox[{ RowBox[{"a", "'"}], "\[Element]", SuperscriptBox["\[ScriptCapitalA]", "*"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[NotEqual]", RowBox[{"a", "'"}]}], TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"h", "(", "a", ")"}], "=", RowBox[{"h", "(", RowBox[{"a", "'"}], ")"}]}], TraditionalForm]]], "." }], "Text", CellTags->"DefAuth strong col res"], Cell[TextData[{ "The implications of these requirements may be clear to the reader. For \ instance, H2 implies that if the hash values ", Cell[BoxData[ FormBox[ RowBox[{"h", "(", "a", ")"}], TraditionalForm]]], " of a file ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " is protected by a digital signature, one can not replace it by another \ file ", Cell[BoxData[ FormBox[ RowBox[{"a", "'"}], TraditionalForm]]], " with the same hash value, simply because it is infeasible to find such an \ ", Cell[BoxData[ FormBox[ RowBox[{"a", "'"}], TraditionalForm]]], ".\nProperty H3 is even much stronger and makes it possible to convince a \ judge that the system has been compromised." }], "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"], "Consider", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"m", "=", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalA]", "=", SubscriptBox["\[DoubleStruckCapitalZ]", "n"]}], TraditionalForm]]], ". To hash ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"(", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", " ", "\[Ellipsis]", ",", SubscriptBox["a", "l"]}], ")"}]}], TraditionalForm]]], " one simply takes ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "l"], RowBox[{ SubscriptBox["a", "i"], " ", "mod", " ", "n"}]}], ")"}]}], TraditionalForm]]], ". This hash value depends on all symbols in ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and is easy to compute, but it does not meet any of the requirements \ H1-H3." }], "Example"], 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 again ", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"m", "=", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalA]", "=", SubscriptBox["\[DoubleStruckCapitalZ]", "n"]}], TraditionalForm]]], ". To hash ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"(", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", " ", "\[Ellipsis]", ",", SubscriptBox["a", "l"]}], ")"}]}], TraditionalForm]]], " one computes ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "l"], SubscriptBox["a", "i"]}], ")"}], "2"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], ". If ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is a large composite number, property H1 will hold, because taking square \ roots modulo such an integer ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is considered to be infeasible (see ", ButtonBox["Theorem 9.18", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Rabin equiv compl"], "). \nWith the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Mod", FontVariations->{"Underline"->True}], " and ", StyleBox["Length", FontVariations->{"Underline"->True}], " this hash function can be easily evaluated." }], "Example", CellChangeTimes->{3.4233944025004816`*^9, 3.423396268340548*^9}], Cell[BoxData[{ RowBox[{ RowBox[{"h", "[", RowBox[{"inputfile_List", ",", "nn_Integer"}], "]"}], ":=", RowBox[{"Mod", "[", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"Length", "[", "inputfile", "]"}]], RowBox[{"inputfile", "[", RowBox[{"[", "i", "]"}], "]"}]}], ")"}], "2"], ",", "nn"}], "]"}]}], "\n", RowBox[{ RowBox[{"n", "=", "989"}], ";"}], "\n", RowBox[{ RowBox[{"in", "=", RowBox[{"{", RowBox[{"189", ",", "632", ",", "900", ",", "722", ",", "349"}], "}"}]}], ";"}], "\n", RowBox[{"h", "[", RowBox[{"in", ",", "n"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["955"], "Output"], Cell[TextData[{ "Properties H2 and H3 are not met, because ", Cell[BoxData[ FormBox[ RowBox[{"-", "a"}], TraditionalForm]]], " will have the same hash value as ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ". Also, when one coordinate is increased and the next one decreased by the \ same amount, the hash value remains the same." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"alternative", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"-", "in"}], ",", "n"}], "]"}]}], "\n", RowBox[{"h", "[", RowBox[{"alternative", ",", "n"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"800", ",", "357", ",", "89", ",", "267", ",", "640"}], "}"}]], "Output"], Cell[BoxData["955"], "Output"], Cell[TextData[{ "Even if a hash function meets properties H1-H3, it is still possible to \ intercept a transmission ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"a", ",", RowBox[{"h", "(", "a", ")"}]}], ")"}], TraditionalForm]]], " and replace it with another file ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"a", "'"}], ",", RowBox[{"h", "(", RowBox[{"a", "'"}], ")"}]}], ")"}], TraditionalForm]]], ". For this reason, one sometimes wants to introduce a secret key, shared by \ sender and receiver. The hash function ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " will now be called a ", StyleBox["message authentication code", FontSlant->"Italic"], " (MAC) and is a function of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[ScriptCapitalA]", "*"], "\[Times]", "\[ScriptCapitalK]"}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalA]", "m"], TraditionalForm]]], ", where \[ScriptCapitalK] is the ", ButtonBox["key space", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], ", just as in conventional cryptosystems." }], "Text", CellTags->"DefAuth MAC"], 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[{"m", "=", "64"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalA]", "=", SubscriptBox["\[DoubleStruckCapitalZ]", "2"]}], TraditionalForm]]], ". With ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["DES", "k"], "(", "u", ")"}], TraditionalForm]]], " we denote a ", ButtonBox["DES", BaseStyle->"Hyperlink", ButtonData:>"DefBlock DES"], " encryption of a block ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " of length under key ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " . Assume that ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is the key that Alice and Bob share.\nNow, consider a binary file ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "l"]}], "}"}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " that Alice is going to send to Bob. Alice first pads it with sufficient \ zeros to make the length a multiple of 64. Let ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " be this new length. To compute the hash value on ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "L"]}], "}"}], TraditionalForm]]], " Alice follows the following algorithm:" }], "Example"], Cell[TextData[{ StyleBox["Algorithm ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\tUsing DES as Message Authentication Code", FontWeight->"Bold"], "\n\n\t", StyleBox["input", FontWeight->"Bold"], "\t\tbinary string ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "L"]}], "}"}], TraditionalForm]]], ", padded to make ", Cell[BoxData[ FormBox[ RowBox[{"64", "|", "L"}], TraditionalForm]]], ".\n\t", StyleBox["initialize", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{"h", "=", OverscriptBox[ OverscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "\[Ellipsis]", ",", "0"}], "}"}], "\[OverBrace]"], "64"]}], TraditionalForm]]], "\n\t", StyleBox["for", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"i", "=", "0"}], TraditionalForm]]], " ", StyleBox["to", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"L", "/", "64"}], ")"}], "-", "1"}], TraditionalForm]]], " ", StyleBox["do", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"h", "=", RowBox[{ SubscriptBox["DES", "k"], "(", RowBox[{"h", "\[CirclePlus]", RowBox[{"{", RowBox[{ SubscriptBox["a", RowBox[{ RowBox[{"64", "i"}], "+", "1"}]], ",", SubscriptBox["a", RowBox[{ RowBox[{"64", "i"}], "+", "2"}]], ",", "\[Ellipsis]", ",", SubscriptBox["a", RowBox[{ RowBox[{"64", "i"}], "+", "64"}]]}], "}"}]}], ")"}]}], TraditionalForm]]], "\n\t", StyleBox["output", FontWeight->"Bold"], "\t\thash value ", Cell[BoxData[ FormBox["h", TraditionalForm]]] }], "Theorem", CellTags->"AlgAuth MAC on DES"], Cell[TextData[{ "The receiver duplicates the above calculations to verify that the file has \ not been changed and was indeed sent by Alice.\nOf course, we could have used \ any other ", ButtonBox["block cipher", BaseStyle->"Hyperlink", ButtonData:>"DefBlock block"], " instead of DES in this example." }], "Text", FontSlant->"Italic"], Cell["\<\ It is also possible to use a block cipher as a keyless hash function. To this \ end one also makes the key a public parameter.\ \>", "Text"], Cell["\<\ The implicit assumption when using a block cipher for authentication purposes \ is that for a fixed key it behaves as a random permutation on the input set. \ Also, one hopes that the block cipher is cryptographically secure. In the \ next section, authentication codes will be discussed that are not based on \ any mathematical assumption.\ \>", "Text"], Cell[TextData[{ "There are many different standards for hash functions. The reader is \ referred to ", ButtonBox["[MeOoV97]", BaseStyle->"Hyperlink", ButtonData:>"RefMeOV97"], " and ", ButtonBox["[Schn96]", BaseStyle->"Hyperlink", ButtonData:>"RefSchne96"], "." }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tUnconditionally Secure Authentication Codes" }], "Section", CellTags->"SectAuth Auth Codes"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tNotions and Bounds" }], "Subsection", CellTags->"SubsAuth notions"], Cell["\<\ No authentication scheme can give an absolute guarantee that an accepted \ message comes from a particular user, say Alice. For instance, there is \ always a small probability that a (randomly or otherwise) generated sequence \ could have been made by Alice, but in fact was not. It will then be accepted \ by others as a genuine document from Alice.\ \>", "Text"], Cell["\<\ It follows that it is necessary to define and compute the probability of a \ successful fraud. However, in such computations there is an essential \ difference between assuming the computational security of certain problems \ (as we do in public key cryptosystems), or not making any further assumptions \ at all (unconditional security). This last situation will be the topic of \ this section.\ \>", "Text"], Cell["\<\ We shall assume that Alice and Bob trust each other and have agreed upon a \ secret key. This assumption is not really necessary, but then the notion of a \ trusted third party (like an arbitrator) must be introduced. Let us start with a simple example.\ \>", "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"], "Alice wants to send a single bit of information (a yes or a no) to Bob by \ means of a word of length 2. Alice and Bob have 4 possible keys available. \ Alice and Bob make use of the following matrix:" }], "Example", CellTags->"ExamAuth 1 bit"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{"key", "\\", "sent"}], "00", "01", "10", "11"}, {"1", "0", "1", "-", "-"}, {"2", "1", "-", "0", "-"}, {"3", "-", "0", "-", "1"}, {"4", "-", "-", "1", "0"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}], TraditionalForm]]], "\n\nAuthentication Code for two messages." }], "NumberedTable", CellTags->"TableAuth 1 bit"], Cell["So, message 1 will be sent as word 11 under the third key.", "Text", FontSlant->"Italic"], Cell[TextData[{ "The probability that somebody else can successfully impersonate Alice is \ 1/2, because only two of the four words in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"00", ",", "01", ",", "10", ",", "11"}], "}"}], TraditionalForm]]], " are possible as transmitted word under the joint secret key of Alice and \ Bob." }], "Text", FontSlant->"Italic"], Cell["\<\ An opponent Eve who tries to replace a transmitted message by another one \ will know that only two keys can possibly have been used, but she does not \ know which one. So, the probability of a successful substitution is also 1/2. \ For instance, if Eve intercepts 01, she knows that either message 1 was sent \ (under key 1) or message 0 was sent (under key 3). In the first case, she \ needs to transmit 00 and in the second case it should be 11, therefore, she \ succeeds with probability 1/2.\ \>", "Text", FontSlant->"Italic"], Cell["\<\ The above scheme even gives secrecy, because every transmitted word can come \ from message 0 or from message 1 (both with probability 1/2).\ \>", "Text", FontSlant->"Italic"], Cell["\<\ The general definition of an authentication code (we deviate here from the \ standard notation in the theory of authentication codes in order to avoid \ confusion with the standard notation in the theory of error-correcting codes) \ is as follows:\ \>", "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["authentication code", FontSlant->"Italic"], " is a triple ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ "\[ScriptCapitalM]", ",", "\[ScriptCapitalK]", ",", "\[ScriptCapitalC]"}], ")"}], TraditionalForm]]], " and a mapping ", Cell[BoxData[ FormBox[ RowBox[{"f", ":", RowBox[{ RowBox[{"\[ScriptCapitalM]", "\[Times]", "\[ScriptCapitalK]"}], "\[RightArrow]", "\[ScriptCapitalC]"}]}], TraditionalForm]]], " such that for all ", Cell[BoxData[ FormBox[ RowBox[{"m", ",", RowBox[{ RowBox[{"m", "'"}], "\[Element]", "\[ScriptCapitalM]"}]}], TraditionalForm]]], " and for all ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], TraditionalForm]]] }], "Definition", CellTags->"DefAuth auth code"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["f", "k"], "(", "m", ")"}], "=", RowBox[{ SubscriptBox["f", "k"], "(", RowBox[{"m", "'"}], ")"}]}], TraditionalForm]]], "\t \[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{"m", "'"}]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.500008, 1, 0.900008], CellTags->"FormAuth one-to-one"], Cell[TextData[{ "The set \[ScriptCapitalM] is called the ", StyleBox["message set", FontSlant->"Italic"], ", \[ScriptCapitalK] the ", StyleBox["key set", FontSlant->"Italic"], ", and \[ScriptCapitalC] the ", StyleBox["codeword set", FontSlant->"Italic"], "." }], "Definition", CounterIncrements->"None"], Cell[TextData[{ "An authentication code can be depicted by a table ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " with the rows indexed by the keys ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " in ", Cell[BoxData[ FormBox["\[ScriptCapitalK]", TraditionalForm]]], ", the columns indexed by the codewords ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " in ", Cell[BoxData[ FormBox["\[ScriptCapitalC]", TraditionalForm]]], " and entry ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"k", ",", "c"}], ")"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " given by ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " if an ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Element]", "\[ScriptCapitalM]"}], TraditionalForm]]], " exists such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["f", "k"], "(", "m", ")"}], "=", "c"}], TraditionalForm]]], " (such an ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is unique by (13.1)) and by a hyphen if such an ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " does not exist. We shall call this table the ", StyleBox["authentication matrix", FontSlant->"Italic"], " of the code." }], "Text", CellTags->"DefAuth scheme"], Cell[TextData[{ "In ", ButtonBox["Example 13.4", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth 1 bit"], " above, ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalM]", "=", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalK]", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "3", ",", "4"}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalC]", "=", RowBox[{"{", RowBox[{"00", ",", "01", ",", "10", ",", "11"}], "}"}]}], TraditionalForm]]], ". The authentication matrix of this code is given by ", ButtonBox["Table 13.1", BaseStyle->"Hyperlink", ButtonData:>"TableAuth 1 bit"], "." }], "Text"], Cell[TextData[{ "Condition (13.1) implies that ", Cell[BoxData[ FormBox[ SubscriptBox["f", "k"], TraditionalForm]]], " is an injective mapping for each possible key." }], "Text"], Cell[TextData[{ "When Bob receives codeword ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Element]", "\[ScriptCapitalC]"}], TraditionalForm]]], " from Alice, he will accept it as a signed version of message ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Element]", "\[ScriptCapitalM]"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is uniquely determined by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["f", "k"], "(", "m", ")"}], "=", "c"}], TraditionalForm]]], ". Here ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is the key that Alice and Bob have agreed upon. To make the system \ practical, ", Cell[BoxData[ FormBox[ SubscriptBox["f", "k"], TraditionalForm]]], " should be easily invertible for each key. To this end, ", Cell[BoxData[ FormBox[ SubscriptBox["f", "k"], TraditionalForm]]], " (and \[ScriptCapitalC]) will often have a much simpler structure." }], "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["A-code", FontSlant->"Italic"], " is a triple ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ "\[ScriptCapitalM]", ",", "\[ScriptCapitalK]", ",", "\[ScriptCapitalT]"}], ")"}], TraditionalForm]]], " and a mapping ", Cell[BoxData[ FormBox[ RowBox[{"g", ":", RowBox[{ RowBox[{"\[ScriptCapitalM]", "\[Times]", "\[ScriptCapitalK]"}], "\[RightArrow]", "\[ScriptCapitalT]"}]}], TraditionalForm]]], ".\nGiven key ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], TraditionalForm]]], ", message ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Element]", "\[ScriptCapitalM]"}], TraditionalForm]]], " will be transmitted as ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"m", ",", "t"}], ")"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", RowBox[{ SubscriptBox["g", "k"], "(", "m", ")"}]}], TraditionalForm]]], " is called the ", StyleBox["authenticator", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Definition", CellTags->"DefAuth A-code"], Cell[TextData[{ "By taking ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["f", "k"], "(", "m", ")"}], "=", RowBox[{"(", RowBox[{"m", ",", RowBox[{ SubscriptBox["g", "k"], "(", "m", ")"}]}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalC]", "=", RowBox[{"\[ScriptCapitalM]", "\[Cross]", "\[ScriptCapitalT]"}]}], TraditionalForm]]], " we see that an A-code is a special case of an authentication code. " }], "Text"], Cell[TextData[{ "A good authentication code is designed in such a way that fraudulent words \ ", Cell[BoxData[ FormBox[ OverscriptBox["c", "^"], TraditionalForm]]], " are spread evenly over ", Cell[BoxData[ FormBox["\[ScriptCapitalC]", TraditionalForm]]], ", while the subset of words that the legitimate receiver expects, knowing \ the common key ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], TraditionalForm]]], ", is only a fraction of this set." }], "Text"], Cell[TextData[{ "Thus the aim of an authentication code is that not only Bob, but also an \ arbitrator, can check the authenticity of a properly made ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " (in the case of an A-code by verifying that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["g", "k"], "(", "m", ")"}], "=", "t"}], TraditionalForm]]], ", in the case of a general authentication code by checking that ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " is in the image space of ", Cell[BoxData[ FormBox[ SubscriptBox["f", "k"], TraditionalForm]]], "), but an impersonator who does not know the key has only a small \ probability of getting a word ", Cell[BoxData[ FormBox[ OverscriptBox["c", "^"], TraditionalForm]]], " accepted. An attack by an impersonator is called an ", StyleBox["impersonation attack", FontSlant->"Italic"], "." }], "Text", CellTags->"DefAuth imp attack"], Cell[TextData[{ "The same should be true if the enemy wants to replace a genuine codeword ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " (made with the proper key) by another one, say ", Cell[BoxData[ FormBox[ OverscriptBox["c", "^"], TraditionalForm]]], ", that represents a different message. This kind of attack is called a ", StyleBox["substitution attack", FontSlant->"Italic"], ". Note that in this case, some information on the key is available to the \ opponent. We shall not discuss systems in which the same key can be safely \ used more than once by the legitimate users." }], "Text", CellTags->"DefAuth subs attack"], Cell["\<\ In the following definitions we shall assume that keys will be chosen from \ \[ScriptCapitalK] with a uniform distribution and that messages will be \ chosen from \[ScriptCapitalM] with a uniform distribution.\ \>", "Text"], Cell[TextData[{ "Let us assume that a general authentication code is being used by Alice and \ Bob. To maximize the probability of a successful impersonation, the opponent \ can do no better than select and send a codeword ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Element]", "\[ScriptCapitalC]"}], TraditionalForm]]], " that will have the highest probability of being accepted by the \ legitimate receiver. This is the case if for the maximum number of keys ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], TraditionalForm]]], " the codeword ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " will be in the image space of ", Cell[BoxData[ FormBox[ SubscriptBox["f", "k"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Another way of saying this is that one looks for the column in the ", ButtonBox["authentication matrix", BaseStyle->"Hyperlink", ButtonData:>"DefAuth scheme"], " that has the maximum number of non-hyphen entries. The column index ", Cell[BoxData[ FormBox[ RowBox[{"c", " "}], TraditionalForm]]], "of that column will be sent." }], "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 probability ", Cell[BoxData[ FormBox[ SubscriptBox["P", "I"], TraditionalForm]], FontSlant->"Italic"], " is the maximum probability of a successful impersonation attack, i.e." }], "Definition", CellTags->"DefAuth P_I"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", SubscriptBox["max", RowBox[{"c", "\[Element]", "\[ScriptCapitalC]"}]]}], TraditionalForm]]], Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"|", RowBox[{"{", RowBox[{ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], "|", RowBox[{"c", "\[Element]", RowBox[{ SubscriptBox["f", "k"], "(", "\[ScriptCapitalM]", ")"}]}]}], "}"}], "|"}], RowBox[{"|", "\[ScriptCapitalK]", "|"}]], TraditionalForm]]] }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.500008, 1, 0.900008]], Cell[TextData[{ "In ", ButtonBox["Example 13.4", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth 1 bit"], ", each codeword is the image of a message under exactly two of the four \ keys (each column counts two non-hyphens). So, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", RowBox[{ RowBox[{"2", "/", "4"}], "=", RowBox[{"1", "/", "2"}]}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "In case of a substitution attack one has intercepted a codeword ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Element]", "\[ScriptCapitalC]"}], TraditionalForm]]], ". This restricts the possible keys that may have been used by sender and \ receiver to ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], "|", RowBox[{"c", "\[Element]", RowBox[{ SubscriptBox["f", "k"], "(", "\[ScriptCapitalM]", ")"}]}]}], "}"}], TraditionalForm]]], ". The best attack for the opponent is to search among those codewords that \ are possible with these keys for the one that occurs the most often. " }], "Text"], Cell[TextData[{ "A different way of saying this is that in the ", ButtonBox["authentication matrix", BaseStyle->"Hyperlink", ButtonData:>"DefAuth scheme"], " of the code one looks at the column under the intercepted ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " and removes all rows from the matrix that have a hyphen in that column \ (these rows are indexed by a key that can not have been used). Also delete \ the column indexed by ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ". Among the remaining columns one looks for the one with the largest number \ of non-hyphen entries. The column index ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "'"}], " "}], TraditionalForm]]], "of that column will be substituted for ", Cell[BoxData[ FormBox["c", TraditionalForm]]], "." }], "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 probability ", Cell[BoxData[ FormBox[ StyleBox[ SubscriptBox["P", "S"], FontSlant->"Italic"], TraditionalForm]]], " is the maximum probability of a successful substitution attack, i.e." }], "Definition", CellTags->"DefAuth P_S"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "S"], "=", RowBox[{ SubscriptBox["max", RowBox[{"c", ",", RowBox[{ RowBox[{"c", "'"}], "\[Element]", "\[ScriptCapitalC]"}], ",", RowBox[{ RowBox[{"c", "'"}], "\[NotEqual]", "c"}]}]], FormBox[ FractionBox[ RowBox[{"|", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ RowBox[{ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], "|", RowBox[{"c", "\[Element]", RowBox[{ SubscriptBox["f", "k"], "(", "\[ScriptCapitalM]", ")"}]}]}], " ", "&"}], " ", RowBox[{"c", "'"}]}], "\[Element]", RowBox[{ SubscriptBox["f", "k"], "(", "\[ScriptCapitalM]", ")"}]}], "}"}], "|"}], RowBox[{"|", RowBox[{"{", RowBox[{ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], "|", RowBox[{"c", "\[Element]", RowBox[{ SubscriptBox["f", "k"], "(", "\[ScriptCapitalM]", ")"}]}]}], "}"}], "|"}]], TraditionalForm]}]}], TraditionalForm]]]], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.500008, 1, 0.900008], CellTags->"FormAuth P_S"], Cell[TextData[{ "In ", ButtonBox["Example 13.4", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth 1 bit"], ", each codeword is the image of a message under exactly two of the four \ keys. For each of these two keys, the other possible message will be mapped \ to a distinct codeword. So, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "S"], "=", RowBox[{"1", "/", "2"}]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "The maximum of the two probabilities in (13.2) and (13.3) is often called \ the probability of successful ", StyleBox["deception", FontSlant->"Italic"], ". In formula" }], "Text", CellTags->"DefAuth deception"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ SubscriptBox["P", "D"], FontSlant->"Italic"], "=", RowBox[{"max", RowBox[{"{", RowBox[{ SubscriptBox["P", "I"], ",", SubscriptBox["P", "S"]}], "}"}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"DefAuth P_D"], Cell[TextData[{ "Since an authentication function ", Cell[BoxData[ FormBox[ SubscriptBox["f", "k"], TraditionalForm]]], " is injective for each ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], TraditionalForm]]], ", it follows that exactly ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalM]", "|"}], TraditionalForm]]], " codewords must be authentic for any given key. In other words, it follows \ that each row of the authentication matrix ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " of an authentication code has exactly ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalM]", "|"}], TraditionalForm]]], " non-hyphen entries. Since ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " has ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalK]", "|"}], TraditionalForm]]], " rows and ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalC]", "|"}], TraditionalForm]]], " columns it follows that the average number of non-hyphen entries over the \ columns of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalK]", "|", RowBox[{"\[Times]", RowBox[{"|", "\[ScriptCapitalM]", "|", RowBox[{"/", RowBox[{"|", "\[ScriptCapitalC]", "|"}]}]}]}]}], TraditionalForm]]], ". So, the maximum fraction of non-hyphen entries per column is at least ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalM]", "|", RowBox[{"/", RowBox[{"|", "\[ScriptCapitalC]", "|"}]}]}], TraditionalForm]]], ". This proves the following theorem." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe maximum probability ", Cell[BoxData[ FormBox[ SubscriptBox["P", "I"], TraditionalForm]]], " of a successful impersonation in an authentication scheme for ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ "\[ScriptCapitalM]", ",", "\[ScriptCapitalK]", ",", "\[ScriptCapitalC]"}], ")"}], TraditionalForm]]], " satisfies\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "\[GreaterEqual]", FractionBox[ RowBox[{"|", "\[ScriptCapitalM]", "|"}], RowBox[{"|", "\[ScriptCapitalC]", "|"}]]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAuth PI>M/C"], Cell[TextData[{ "Similarly, in the case of the substitution attack the restriction of the \ authentication matrix ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " to the rows where an intercepted codeword ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " has non-hyphen entries consists of ", Cell[BoxData[ FormBox[ RowBox[{"|", RowBox[{"{", RowBox[{ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], "|", RowBox[{"c", "\[Element]", RowBox[{ SubscriptBox["f", "k"], "(", "\[ScriptCapitalM]", ")"}]}]}], "}"}], "|"}], TraditionalForm]]], " rows, each with ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalM]", "|", RowBox[{"-", "1"}]}], TraditionalForm]]], " non-hyphen entries. After deleting the column indexed by ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ", this restriction has ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalC]", "|", RowBox[{"-", "1"}]}], TraditionalForm]]], " columns. So, the average value of the relative frequency of non-hyphen \ entries in this restriction of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"|", "\[ScriptCapitalM]", "|", RowBox[{"-", "1"}]}], ")"}], "/", RowBox[{"(", RowBox[{"|", "\[ScriptCapitalC]", "|", RowBox[{"-", "1"}]}], ")"}]}], TraditionalForm]]], ". This proves the following bound." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe maximum probability ", Cell[BoxData[ FormBox[ SubscriptBox["P", "S"], TraditionalForm]]], " of a successful substitution in an authentication scheme for ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ "\[ScriptCapitalM]", ",", "\[ScriptCapitalK]", ",", "\[ScriptCapitalC]"}], ")"}], TraditionalForm]]], " satisfies\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "S"], "\[GreaterEqual]", FractionBox[ RowBox[{"|", "\[ScriptCapitalM]", "|", RowBox[{"-", "1"}]}], RowBox[{"|", "\[ScriptCapitalC]", "|", RowBox[{"-", "1"}]}]]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAuth PS>(M-1)/(C-1)"], Cell[TextData[{ "If the messages and keys are not uniformly distributed over the message \ space and key space, it is still possible to derive lowerbounds on ", Cell[BoxData[ FormBox[ SubscriptBox["P", "I"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["P", "S"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "D"], TraditionalForm]]], ". In these lowerbounds, functions appear that we have discussed in ", ButtonBox["Chapter 5", BaseStyle->"Hyperlink", ButtonData:>"Chap Shannon"], ". For the proofs of the next two theorems, we refer the interested reader \ to ", ButtonBox["[Joha94b]", BaseStyle->"Hyperlink", ButtonData:>"RefJoha94b"], "." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["M", TraditionalForm]]], ", ", Cell[BoxData[ FormBox["K", TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " denote random variables defined on \[ScriptCapitalM], \[ScriptCapitalK], \ and \[ScriptCapitalC], related by a function ", Cell[BoxData[ FormBox[ RowBox[{"f", ":", RowBox[{ RowBox[{"\[ScriptCapitalM]", "\[Times]", "\[ScriptCapitalK]"}], "\[RightArrow]", "\[ScriptCapitalC]"}]}], TraditionalForm]]], ", satisfying ", ButtonBox["(13.1)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth one-to-one"], ". Further, let ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"I", "(", RowBox[{"X", ";", "Y"}], ")"}], TraditionalForm]]], " denote the ", ButtonBox["conditional entropy", BaseStyle->"Hyperlink", ButtonData:>"DefShann cond entropy"], " function resp. the ", ButtonBox["mutual information", BaseStyle->"Hyperlink", ButtonData:>"DefShann mutual inf"], " function. Then" }], "Theorem"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ SubscriptBox["P", "I"], "\[GreaterEqual]"}], TraditionalForm], SuperscriptBox["2", RowBox[{"-", RowBox[{"I", "(", RowBox[{"C", ";", "K"}], ")"}]}]]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ SubscriptBox["P", "S"], "\[GreaterEqual]"}], TraditionalForm], SuperscriptBox["2", RowBox[{"-", RowBox[{"H", "(", RowBox[{"K", "|", "C"}], ")"}]}]]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "D"], "\[GreaterEqual]", FractionBox["1", SqrtBox[ RowBox[{"|", "\[ScriptCapitalK]", "|"}]]]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ "The bound in (13.7) is called the ", StyleBox["square root bound", FontSlant->"Italic"], ". Authentication codes meeting this bound are called ", StyleBox["perfect", FontSlant->"Italic"], "." }], "Text", CellTags->"DefAuth square root"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nA necessary condition for an authentication code to be perfect is that\n\n\ \t\t", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalM]", "|", RowBox[{"\[LessEqual]", RowBox[{ SqrtBox[ RowBox[{"|", "\[ScriptCapitalK]", "|"}]], "+", "1"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAuth M<=K+1"], Cell[TextData[{ "For further reading on authentication codes, we refer the reader to ", ButtonBox["[GilMW74]", BaseStyle->"Hyperlink", ButtonData:>"RefGilMS74"], ", ", ButtonBox["[MeOoV97]", BaseStyle->"Hyperlink", ButtonData:>"RefMeOV97"], ", ", ButtonBox["[Schn96]", BaseStyle->"Hyperlink", ButtonData:>"RefSchne96"], ", and ", ButtonBox["[Simm92]", BaseStyle->"Hyperlink", ButtonData:>"RefSimm92"], "." }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Projective Plane Construction" }], "Subsection", CellTags->"SubsAuth PG constr"], Cell[TextData[{ "In ", ButtonBox["[GilMW74]", BaseStyle->"Hyperlink", ButtonData:>"RefGilMS74"], " one can find a nice description of a perfect authentication scheme. We \ first need to describe what a projective plane is, before we can explain this \ construction" }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell["A Finite Projective Plane", "Subsubsection", CellTags->"SubsubsAuth PG def"], Cell["\<\ A projective plane is a kind of geometric object that differs somewhat from \ planes in regular Euclidean geometry. It is defined in a formal way by a set \ of axioms, that among others does not allow for parallel lines! After the \ definition we shall give a construction of these projective planes that will \ explain the name \"projective\".\ \>", "Text"], Cell[TextData[{ "We start with a finite set \[ScriptCapitalP], whose elements are called ", StyleBox["points", FontSlant->"Italic"], ". Further, \[ScriptCapitalL] is a collection of subsets ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptL]", "\[Subset]", "\[ScriptCapitalP]"}], TraditionalForm]]], ", called ", StyleBox["lines", FontSlant->"Italic"], ". We shall say that a point ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " \"lies\" on a line \[ScriptL], if ", Cell[BoxData[ FormBox[ RowBox[{"P", "\[Element]", "\[ScriptL]"}], TraditionalForm]]], ". Also, two lines may \"intersect\" in a point, etc., so, we adopt all the \ regular terminology from geometry. To avoid trivialities, we shall assume \ that all lines contain at least two points (", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"\[ScriptL]", "\[Element]", "\[ScriptCapitalL]"}], ")"}], "\[DoubleLongRightArrow]", RowBox[{"(", RowBox[{"|", "\[ScriptL]", "|", RowBox[{"\[GreaterEqual]", "2"}]}], ")"}]}], TraditionalForm]]], "). " }], "Text", CellTags->"DefAuth point and line"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "The pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[ScriptCapitalP]", ",", "\[ScriptCapitalL]"}], ")"}], TraditionalForm]]], " is called a finite ", StyleBox["projective plane", FontSlant->"Italic"], " if the following axioms hold:\n\n", StyleBox["PP-1:\t", FontWeight->"Bold"], "There are at least four points, no three of which lie on the same line.\n", StyleBox["PP-2:\t", FontWeight->"Bold"], "For every pair of points there is a unique line going through them.\n", StyleBox["PP-3:\t", FontWeight->"Bold"], "Every pair of lines intersect in a unique point." }], "Definition", CellTags->"DefAuth Proj Plane"], Cell["\<\ Property PP-1 is there to avoid the following object in our considerations. \ All lines have cardinality two and go through the same point (depicted below) \ except for one line which goes through the remaining points\ \>", "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.0595238 0.510625 0.0772446 [ [ 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 .02381 .04716 m .97619 .04716 L s .025 w .5 .51063 Mdot .5 Mabswid .46429 .60332 m .69107 .01472 L s .025 w .67857 .04716 Mdot .5 Mabswid .44048 .60332 m .81845 .01472 L s .025 w .79762 .04716 Mdot .5 Mabswid .41667 .60332 m .94583 .01472 L s .025 w .91667 .04716 Mdot .5 Mabswid .53571 .60332 m .30893 .01472 L s .025 w .32143 .04716 Mdot .5 Mabswid .55952 .60332 m .18155 .01472 L s .025 w .20238 .04716 Mdot .5 Mabswid .58333 .60332 m .05417 .01472 L s .025 w .08333 .04716 Mdot .012 w .47024 .1244 Mdot .5 .1244 Mdot .52976 .1244 Mdot % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{241.25, 149}, ImageMargins->{{15.625, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 J+Q=\ \>"], ImageRangeCache->{{{0, 360.875}, {222.5, 0}} -> {-8.42015, -6.61053, \ 0.0699978, 0.0539395}}], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[ScriptCapitalP]", ",", "\[ScriptCapitalL]"}], ")"}], TraditionalForm]]], " be a projective plane. Then there exists a constant ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", called the ", StyleBox["order", FontSlant->"Italic"], " of the plane, such that:\n\n", StyleBox["PP-4", FontWeight->"Bold"], "\tEvery line contains exactly ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " points.\n", StyleBox["PP-5", FontWeight->"Bold"], "\tEvery point lies on exactly ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " lines.\n", StyleBox["PP-6", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalP]", "|"}], "=", RowBox[{ RowBox[{"|", "\[ScriptCapitalL]", "|"}], "=", RowBox[{ SuperscriptBox["n", "2"], "+", "n", "+", "1."}]}]}], TraditionalForm]]] }], "Theorem", CellTags->"DefAuth order PG2"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], " \n", StyleBox["Proof of PP-4", FontVariations->{"Underline"->True}], ": Every line contains exactly ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " points.\nOur first step is to show the claim that each point in \ \[ScriptCapitalP] lies on at least three different lines. Let us start with \ four points ", Cell[BoxData[ FormBox[ RowBox[{"P", ",", "Q", ",", "R"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " no three of which are colinear (see PP-1). For each of these points, any \ of the other three defines a unique line through them by PP-2. For a point ", Cell[BoxData[ FormBox["T", TraditionalForm]]], " not on any of the lines going through two of the points ", Cell[BoxData[ FormBox[ RowBox[{"P", ",", "Q", ",", "R"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", the claim is also trivial (each of these four points defines a unique \ line through ", Cell[BoxData[ FormBox["T", TraditionalForm]]], "). We leave it as an exercise to the reader to prove the claim for a point \ that is on one of the six lines going through two of the points ", Cell[BoxData[ FormBox[ RowBox[{"P", ",", "Q", ",", "R"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Now, consider an arbitrary point ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ". We know that at least three lines go through it. Let ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " be a point on one of these lines, say on line \[ScriptL]. We shall show \ that all the other lines through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " have the same cardinality. To this end, let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["A", "0"], "=", "P"}], ",", SubscriptBox["A", "1"], ",", SubscriptBox["A", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["A", "m"]}], TraditionalForm]]], " be the points on line \[ScriptM] through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " (where ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptM]", "\[NotEqual]", "\[ScriptL]"}], TraditionalForm]]], ") and let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["B", "0"], "=", "P"}], ",", SubscriptBox["B", "1"], ",", SubscriptBox["B", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["B", "n"]}], TraditionalForm]]], " be the points on line \[ScriptN] through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " (where ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptN]", "\[NotEqual]", "\[ScriptL]"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptN]", "\[NotEqual]", "\[ScriptM]"}], TraditionalForm]]], "). We need to show that ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "n"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[GraphicsData["Metafile", "\<\ CF5dJ6E]HGAYHf4PEfU^I6mgLb15CDHPAVmbKF5d0@00022H0@0005P0001k00001`000:02001I0@00 8PX009<0001d=`00PQ`00215CDH00040V2000>H000090000000000000000000000D00004000>0@00 f0000140000<0000200000T0000@00009P8005<1000;0000400002H2001C0@009@0000`000000020 C@0006`0001k00001`000:02001I0@00N`0000L0000V0P00D`400240l000000000000000P3l00000 00000000P3l00000000000000000000000000000000000000000000000000000B`000400000`0000 1@000200000100000@000100001k00001`000:42001J0@00N`0000L0002Q0P00FP4001X0000@0000 00000000001;0000@0000300000500008000004000010000400007/000070000X@8005X1001k0000 1`000:42001J0@006P00010000000000000002D0000<00000000P4d0001/0000N`0000L0002P0P00 F@40000000000000ogl00?mo000Q0?00000000000000080o000000000000080o0000000000000000 00000000000000000000000000000000000004/000100000<00000D0000P00000@000040000@0000 N`0000L0002Q0P00FP4007/000070000X@8005X1000J000040000000000000006`000100001D0`00 1P0002H0000L00000@0000000000000000000000o`8U000030000040000U000030000000080f0000 400005P3000600003`0001@0001H0`001P000000o`8U000030000040000f0000400005P3001I0@00 3`0001@0001H0`00F@400000o`8U000030000040000f0000400005@3001I0@003`0001@0001D0`00 F@400000o`8K0000400005D3000800009@0000`000010000=P000100001H0`00200000l0000D0000 F0<000P000000?l2B`000400000`00001@000200000100000@000100001k00001`000:42001J0@00 N`0000L0002Q0P00FP4001X0000@000000000000000U000030000000081=0000K00007/000070000 X08005T1001k00001`0002H2001C0@008@3`0000000000000020?`00000000000020?`0000000000 0000000000000000000000000000000000000000000U0000300000L0080U000030000000081G0000 9000000009@0000`000040020 :P0001P0003i0000U@000081002N00009@0000`000040020:P0001P0003i0000L`000081001l0000 9@0000`000040020:P0001P000110@00YP0004X1002_00009@0000`000040020:P0001P000110@00 H`0004X1001/0000600000`0000000025P0000`0000I00004P0000`0000100006`000100002`0000 N@0002D0000<00000000P580001<0@000P0001@00000000000000000002@0@0000000@B00@1306l0 M@1b06T0I@1b0200CP1U07L000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000@410@410@410@009@0000`000020000 E00005@00000000000000?oooooooooo0@000030Z440`:Q10000000000010000C000000000000000 0000000000000000D0000500000:00004P0000`0000200004P0000`0000100006`000100001L0P00 5@0005@0001D000000000000003oooooooooo`400000`:Q10<2X@@00000000000@0004`000000000 000000000000000000000500001200002P000180000<00000P000180000<00000@0001/0000@0000 I`8001L0001B0000C04000<0000@00000000000000000000T04000000044P040@`1_07D0LP1Y06D0 LP0P04h0I@1g00000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000410@410@410@4002D0000<00000`0005@0001D0000 00000000003oooooooooo`400000`:Q10<2X@@00000000000@0004`0000000000000000000000000 00000500001^000020000180000<00000P000180000<00000@0001/0000@0000G08000D1000U0000 30000080001D0000E000000000000000ooooooooool100000<2X@@30Z440000000000040001<0000 000000000000000000000000001@0000@@0000X0000B000030000080000B000030000040000K0000 400006L200080@009@0000`000030000E00005@00000000000000?oooooooooo0@000030Z440`:Q1 0000000000010000C0000000000000000000000000000000D00006d0000800004P0000`000020000 4P0000`0000100006`000100003O0@00;@4002D0000<00000P0005@0001D000000000000003ooooo ooooo`400000`:Q10<2X@@00000000000@0004`000000000000000000000000000000500001A0000 2P000180000<00000P0001P0000<0000o`000Q80000<00000@0001/0000@0000[`400>00000U0000 30000080001D0000E000000000000000ooooooooool100000<2X@@30Z440000000000040001<0000 000000000000000000000000001@0000@@0000X0000B000030000080000B000030000040000K0000 40000;X1003S00009@0000`000030000E00005@00000000000000?oooooooooo0@000030Z440`:Q1 0000000000010000C0000000000000000000000000000000D00006T0000800004P0000`000020000 4P0000`0000100006`000100002C0@00>@0002D0000<00000P0005@0001D000000000000003ooooo ooooo`400000`:Q10<2X@@00000000000@0004`00000000000000000000000000000050000120000 2P000180000<00000P000180000<00000@0001/0000@0000WP4003`0001B0000C04000@0000>0000 0000000000000000T04000000044P040C@1Q07@0J00a04d0K`1^06l0000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000410@410@410@4002D0000<0000100005<0001D000000000000003oooooooooo`400000`:Q1 0<2X@@00000000000@0004`000000000000000000000000000000500001`000020000180000<0000 0P000180000<00000@0001/0000@0000YP4003`0001C0000E000000000000000ooooooooool10000 0<2X@@30Z440000000000040001<0000000000000000000000000000001@0000800000<0000B0000 30000080000B000030000040000K000040000:T1000l0000DP0004`100050000E@00000000000000 0000090100000001180104d0H@1d06P0000050000000000@00005000 \>"], "Graphics", ImageSize->{289., 178.25}, ImageMargins->{{0.625, 0.}, {0., 0.}}], Cell[TextData[{ "For each ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], " there is a unique line through ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["A", "i"], TraditionalForm]]], " by PP-2. By ", ButtonBox["PP-3", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], " this line will intersect \[ScriptN] in a point, say ", Cell[BoxData[ FormBox[ SubscriptBox["B", RowBox[{"\[Pi]", "(", "i", ")"}]], TraditionalForm]]], ". This is a one-to-one mapping, because a line through ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["B", RowBox[{"\[Pi]", "(", "i", ")"}]], TraditionalForm]]], " can not intersect \[ScriptM] in two points (by PP-3). We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[GreaterEqual]", "n"}], TraditionalForm]]], ". By interchanging the role of \[ScriptM] and \[ScriptN] we may conclude \ that ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "n"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "So, all the lines through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ", except possibly for the line that also meets ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], ", have the same cardinality ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], ". By putting ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " on one of the other lines through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ", say \[ScriptN], and repeating the above argument, we may conclude that \ all lines through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " have cardinality ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], ". " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " be another point. For exactly the same reason as above, all the lines \ through ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " have the same cardinality, say ", Cell[BoxData[ FormBox[ RowBox[{"u", "+", "1"}], TraditionalForm]]], ". However one of these lines also goes through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " by PP-2. It follows that ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "n"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Proof of PP-5", FontVariations->{"Underline"->True}], ": Every point lies on exactly ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " lines.\nConsider a point ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and a line \[ScriptM] not through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ". Let the points on \[ScriptM] be numbered ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["M", "1"], ",", SubscriptBox["M", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["M", RowBox[{"n", "+", "1"}]]}], TraditionalForm]]], ". Each point ", Cell[BoxData[ FormBox[ SubscriptBox["M", "i"], TraditionalForm]]], " on \[ScriptM] together with ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " defines a unique line passing through them (property ", ButtonBox["PP-2", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], "). These lines are all different by the uniqueness property in PP-2. On the \ other hand, every line through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " must intersect \[ScriptM] in a unique point. We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " lines pass through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Proof of PP-6", FontVariations->{"Underline"->True}], ": ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalP]", "|"}], "=", RowBox[{ RowBox[{"|", "\[ScriptCapitalL]", "|"}], "=", RowBox[{ SuperscriptBox["n", "2"], "+", "n", "+", "1."}]}]}], TraditionalForm]]], "\nConsider a point ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ". There are ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " lines through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], ", each containing ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " other points. This gives rise to ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", RowBox[{ RowBox[{"(", RowBox[{"n", "+", "1"}], ")"}], "n"}]}], TraditionalForm]]], " points. There are no other points in \[ScriptCapitalP] by PP-2.\n\ Similarly, consider a line \[ScriptL]. There are ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " points on it, each being on ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " other lines. This gives rise to ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", RowBox[{ RowBox[{"(", RowBox[{"n", "+", "1"}], ")"}], "n"}]}], TraditionalForm]]], " lines. There are no other lines in \[ScriptCapitalL] by ", ButtonBox["PP-3", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], ". (Notice the symmetry between points and lines in ", ButtonBox["Definition 13.5", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], ".)" }], "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"], "Take", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"n", "=", "2"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalP]", "|"}], "=", RowBox[{ RowBox[{"|", "\[ScriptCapitalL]", "|"}], "=", "7."}]}], TraditionalForm]]], " Each line contains three points and each point lies on three lines. This \ projective plane is depicted in the following figure." }], "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 0.005 0 0.00386271 [ [ 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 gsave .3 .05794 -69.5938 -11.4063 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.8125 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.812500 moveto 464.000000 18.812500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.812500 lineto closepath clip newpath 63.000000 15.062500 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 15.062500 moveto %%IncludeResource: font Math5Mono %%IncludeFont: Math5Mono /Math5Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor ({) show 69.125000 17.437500 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 76.187500 15.062500 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 Math5Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math5Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math5Mono %%+ font Courier grestore gsave .25 .14678 -69.5938 -11.4063 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.8125 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.812500 moveto 464.000000 18.812500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.812500 lineto closepath clip newpath 63.000000 15.062500 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 15.062500 moveto %%IncludeResource: font Math5Mono %%IncludeFont: Math5Mono /Math5Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor ({) show 69.125000 17.437500 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 76.187500 15.062500 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 Math5Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math5Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math5Mono %%+ font Courier grestore gsave .375 .44421 -69.5938 -11.4063 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.8125 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.812500 moveto 464.000000 18.812500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.812500 lineto closepath clip newpath 63.000000 15.062500 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 15.062500 moveto %%IncludeResource: font Math5Mono %%IncludeFont: Math5Mono /Math5Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor ({) show 69.125000 17.437500 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 (3) show 76.187500 15.062500 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 Math5Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math5Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math5Mono %%+ font Courier grestore gsave .525 .44421 -69.5938 -11.4063 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.8125 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.812500 moveto 464.000000 18.812500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.812500 lineto closepath clip newpath 63.000000 15.062500 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 15.062500 moveto %%IncludeResource: font Math5Mono %%IncludeFont: Math5Mono /Math5Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor ({) show 69.125000 17.437500 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 (4) show 76.187500 15.062500 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 Math5Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math5Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math5Mono %%+ font Courier grestore gsave .6 .11588 -69.5938 -11.4063 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.8125 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.812500 moveto 464.000000 18.812500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.812500 lineto closepath clip newpath 63.000000 15.062500 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 15.062500 moveto %%IncludeResource: font Math5Mono %%IncludeFont: Math5Mono /Math5Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor ({) show 69.125000 17.437500 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 (5) show 76.187500 15.062500 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 Math5Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math5Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math5Mono %%+ font Courier grestore gsave .75 .14678 -69.5938 -11.4063 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.8125 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.812500 moveto 464.000000 18.812500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.812500 lineto closepath clip newpath 63.000000 15.062500 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 15.062500 moveto %%IncludeResource: font Math5Mono %%IncludeFont: Math5Mono /Math5Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor ({) show 69.125000 17.437500 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 (6) show 76.187500 15.062500 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 Math5Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math5Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math5Mono %%+ font Courier grestore gsave .625 .44421 -69.5938 -11.4063 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.8125 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.812500 moveto 464.000000 18.812500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.812500 lineto closepath clip newpath 63.000000 15.062500 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 15.062500 moveto %%IncludeResource: font Math5Mono %%IncludeFont: Math5Mono /Math5Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor ({) show 69.125000 17.437500 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 (7) show 76.187500 15.062500 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 Math5Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math5Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math5Mono %%+ font Courier grestore gsave .1 .05794 -70.4375 -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 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 (P) 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 .9 .05794 -70.4375 -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 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 (P) 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 .5 .58421 -70.4375 -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 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 (P) 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 (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 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 .725 .33073 -70.4375 -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 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 (P) 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 (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 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 .275 .33073 -70.4375 -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 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 (P) 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 (7) 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 .5 .03863 -70.4375 -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 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 (P) 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 .535 .18701 -70.4375 -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 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 (P) 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 .15 .07725 -66 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .85 .07725 -66 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .5 .54558 -66 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .675 .31142 -66 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .325 .31142 -66 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .5 .07725 -66 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .5 .23336 -66 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore .5 Mabswid .15 .07725 m .85 .07725 L .5 .54558 L .15 .07725 L s .15 .07725 m .675 .31142 L s .85 .07725 m .325 .31142 L s .5 .07725 m .5 .54558 L s newpath matrix currentmatrix 0.202073 0.15611 scale 2.47436 1.49485 1 0 365.73 arc setmatrix s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{291.25, 179.875}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJzFnVmUnUURxzuzT5bJOkMggRmGhCVAYgAJAbJAIKwRBAFBEWIEJwohhLAI AVGUTc7xeHwSAogsERRR0UdcUAyKQlgk5BzkHB55403fxnRXf1X9fffXX76b BL0nufPdquqqf+/V1d33rlm7eeya69duXr9u7chZm9ZuHFu/7qaR1Tds2k3q nODchN/s/j9lxPnnceeKt/Hd/8Z/69885X/3/L7/0+MhvJUQXKcTVEHUdQBt h4j/C1jvCOsDYL0trJC41zP6QCgieQtYk4D2Zl68t73MfEdhnbXvyu4D1tlA CyXQ5SmxcBYqiotyKkKFvagJ50vCxSBeZGTbtm3uo48+Cp/6GyLrBNoLDQth dM+QUlpTSF1AezFvfrS2ne1vID9RaxPzkOYBi8QLcGvWrHEff/zxPoN7Kme3 I2lBTcGdGc3s2rXL7dixwz300EP+mUSbNqyngTZ534uxQPrhhx8GlL44X3rp JRJd7d/7POWn+44ltLdAOidyfTl56x5JjxZ8LIsi6b9BVdNxJ0UTBghKWFSH R7Jly5aAqlfR/EfTdvundHChTFI9XhAL/OGHHw7NwxvaPfAE5oSGOo7Om6Sm Pd2/d3vKSeFzt9u+fbuOeBGAu1SlfqhPVKlkYUF7gKb59zAQLImAfA/2QPwn D84X/SUq9QN9ovltPwCa6t/7U0C+dHb3g/BpbGwstIOLVer7+kQdpU1AVMPT WgClJVQMKU0B1bShUe3UM7XWQ387bjx0PhenhiCyUNIs017Q6YWWJh3Y15sv ujCs9Hluj6p1XdKP7dWnUt/ULhZUho61vGpNePrq8J9uD+r900CNoWkqFeRD SsmcSqYml5vJrvG00Iq0m0Pv90+zdByooBtSkZv8kzClZcSXZnSFUFdYBkKF qeVOVXC9Kj0w0Cp2vfBBKrxB4XaLmnLp+beVYnl1wi814pB6TDWOgNzBCmlM U/SA3Kq8qR5N+BV9OgzkDgW5vryps4DVqwmv0lzNB7nDlPslfeoHuTPE1NnA 6tOEl+vTkSB3uEK6Qp8mgZzM1MV0WWJN1ISX6NPRIHekAgkt5yIVngzCq/P2 JmvCz+rTsTl71Zl5XBu40j+jWgbyQM4F1hRNuEafFoHcsSA3FeSkybjzgDWg ZXe2qlgMcgstz+Pxv6QIYtMghTQedz6wpqmpM4FL5mMXLa1nJsUOncipyqB8 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\ \>"], ImageRangeCache->{{{0, 435.875}, {268.813, 0}} -> {-0.213539, -0.000800003, \ 0.68974, 0.892819}}], Cell["\<\ The 7 lines in this figure are the three outer edges, the three bisectors and \ the circle in the middle. So, \[ScriptCapitalL] consists of the following \ seven lines:\ \>", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[ScriptL]", "1"], "=", RowBox[{"{", RowBox[{ SubscriptBox["P", "1"], ",", SubscriptBox["P", "2"], ",", SubscriptBox["P", "3"]}], "}"}]}], TraditionalForm]]], ",\t ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[ScriptL]", "2"], "=", RowBox[{"{", RowBox[{ SubscriptBox["P", "1"], ",", SubscriptBox["P", "4"], ",", SubscriptBox["P", "5"]}], "}"}]}], TraditionalForm]]], ", \n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[ScriptL]", "3"], "=", RowBox[{"{", RowBox[{ SubscriptBox["P", "1"], ",", SubscriptBox["P", "6"], ",", SubscriptBox["P", "7"]}], "}"}]}], TraditionalForm]]], ",\t ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[ScriptL]", "4"], "=", RowBox[{"{", RowBox[{ SubscriptBox["P", "2"], ",", SubscriptBox["P", "4"], ",", SubscriptBox["P", "6"]}], "}"}]}], TraditionalForm]]], ", \n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[ScriptL]", "5"], "=", RowBox[{"{", RowBox[{ SubscriptBox["P", "2"], ",", SubscriptBox["P", "5"], ",", SubscriptBox["P", "7"]}], "}"}]}], TraditionalForm]]], ",\t ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[ScriptL]", "6"], "=", RowBox[{"{", RowBox[{ SubscriptBox["P", "3"], ",", SubscriptBox["P", "4"], ",", SubscriptBox["P", "7"]}], "}"}]}], TraditionalForm]]], ", \n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[ScriptL]", "7"], "=", RowBox[{"{", RowBox[{ SubscriptBox["P", "3"], ",", SubscriptBox["P", "5"], ",", SubscriptBox["P", "6"]}], "}"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "The projective plane of order 2 is unique and is called the ", StyleBox["Fano plane", FontSlant->"Italic"], "." }], "Text", FontSlant->"Italic", CellTags->"DefAuth Fano"], Cell[TextData[{ "A projective plane is often described by means of its ", StyleBox["incidence matrix", FontSlant->"Italic"], ". This the matrix ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " of which the rows are indexed by the lines ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptL]", "\[Element]", "\[ScriptCapitalL]"}], TraditionalForm]]], ", the columns by the points ", Cell[BoxData[ FormBox[ RowBox[{"P", "\[Element]", "\[ScriptCapitalP]"}], TraditionalForm]]], " and where " }], "Text", CellTags->"DefAuth incid matr"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["A", RowBox[{"P", ",", "\[ScriptL]"}]], "=", RowBox[{"{", GridBox[{ {"1"}, {"0"} }]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", "P", " ", "on", " ", "\[ScriptL]"}], ","}], " "}]}, { RowBox[{"otherwise", "."}]} }], TraditionalForm]]] }], "DisplayFormula"], Cell["\<\ The incidence matrix of the Fano plane (with the labeling given in the figure \ above) is\ \>", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"A", " ", "=", " ", RowBox[{"(", GridBox[{ {"1", "1", "1", "0", "0", "0", "0"}, {"1", "0", "0", "1", "1", "0", "0"}, {"1", "0", "0", "0", "0", "1", "1"}, {"0", "1", "0", "1", "0", "1", "0"}, {"0", "1", "0", "0", "1", "0", "1"}, {"0", "0", "1", "1", "0", "0", "1"}, {"0", "0", "1", "0", "1", "1", "0"} }], ")"}]}], ";"}]], "Input"], Cell[TextData[{ "The properties in ", ButtonBox["Definition 13.5", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], " and ", ButtonBox["Theorem 13.6", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], " can be directly translated into the following matrix requirements." }], "Text"], Cell[TextData[{ ButtonBox["PP-2", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], "\tEvery two different columns of ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " have inner product 1.\n", ButtonBox["PP-3", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], "\tEvery two different rows of ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " have inner product 1.\n", ButtonBox["PP-4", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], "\tEvery row of ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " has ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " ones.\n", ButtonBox["PP-5", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], "\tEvery column of ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " has ", Cell[BoxData[ FormBox[ RowBox[{"n", "+", "1"}], TraditionalForm]]], " ones.\n", ButtonBox["PP-6", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], "\tMatrix ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " has ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["n", "2"], "+", "n", "+", "1"}], TraditionalForm]]], " rows and columns." }], "DisplayFormula"], Cell["These properties can be summarized in the formula", "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"A", ".", SuperscriptBox["A", "T"]}], "=", RowBox[{ RowBox[{ SuperscriptBox["A", "T"], ".", "A"}], "=", RowBox[{ RowBox[{"n", ".", "I"}], "+", "J"}]}]}], TraditionalForm]]], ". " }], "NumberedEquation", CellTags->"FormAuth A.A^T"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox["J", TraditionalForm]]], " is the all-one matrix of size ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["n", "2"], "+", "n", "+", "1"}], ")"}], "\[Times]", RowBox[{"(", RowBox[{ SuperscriptBox["n", "2"], "+", "n", "+", "1"}], ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"I", " "}], TraditionalForm]]], "the identity matrix (of the same size). " }], "Text"], Cell[TextData[{ "For the example above we can check this with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Transpose", FontVariations->{"Underline"->True}], " and ", StyleBox["MatrixForm", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.423395228630769*^9, 3.423397149002434*^9}], Cell[BoxData[{ RowBox[{"MatrixForm", "[", RowBox[{"A", ".", RowBox[{"Transpose", "[", "A", "]"}]}], "]"}], "\n", RowBox[{"MatrixForm", "[", RowBox[{ RowBox[{"Transpose", "[", "A", "]"}], ".", "A"}], "]"}]}], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"3", "1", "1", "1", "1", "1", "1"}, {"1", "3", "1", "1", "1", "1", "1"}, {"1", "1", "3", "1", "1", "1", "1"}, {"1", "1", "1", "3", "1", "1", "1"}, {"1", "1", "1", "1", "3", "1", "1"}, {"1", "1", "1", "1", "1", "3", "1"}, {"1", "1", "1", "1", "1", "1", "3"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"3", "1", "1", "1", "1", "1", "1"}, {"1", "3", "1", "1", "1", "1", "1"}, {"1", "1", "3", "1", "1", "1", "1"}, {"1", "1", "1", "3", "1", "1", "1"}, {"1", "1", "1", "1", "3", "1", "1"}, {"1", "1", "1", "1", "1", "3", "1"}, {"1", "1", "1", "1", "1", "1", "3"} }], ")"}], MatrixForm[#]& ]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["A General Construction of a Projective Plane", "Subsubsection", CellTags->"SubsubsAuth PG constr"], Cell[TextData[{ "There is a general construction of ", ButtonBox["projective planes", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], " of ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], " ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is a prime power. There are other constructions of projective planes, but \ they all have an order that is a prime power. It has been shown that no \ projective plane exists of order 6 and 10." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " denote a 3-dimensional vectorspace over ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], RowBox[{"(", "q", ")"}]}], TraditionalForm]]], ", the ", ButtonBox["finite field", BaseStyle->"Hyperlink", ButtonData:>"DefAppB field"], " of ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " elements. Its elements are vectors ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["a", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", SubscriptBox["a", "3"]}], ")"}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ". The cardinality of ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ SuperscriptBox["q", "3"], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["0", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{"0", ",", "0", ",", "0"}], ")"}]}], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "Each line through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], " can be described by a non-zero vector ", Cell[BoxData[ FormBox[ StyleBox["a", FontVariations->{"Underline"->True}], TraditionalForm]]], ": " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ StyleBox[ RowBox[{"\[Lambda]", StyleBox["a", FontVariations->{"Underline"->True}]}]], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormAuth line"], Cell[TextData[{ "Of course, non-zero scalar multiples of ", Cell[BoxData[ FormBox[ StyleBox["a", FontVariations->{"Underline"->True}], TraditionalForm]]], " will give rise to the same line in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], ". So, there are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["q", "3"], "-", "1"}], ")"}], "/", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "2"], "+", "q", "+", "1"}], TraditionalForm]]], " different lines through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "Similarly, a plane through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " can be described by a non-zero vector ", Cell[BoxData[ FormBox[ StyleBox["u", FontVariations->{"Underline"->True}], TraditionalForm]]], ": " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", SubscriptBox["a", "3"]}], ")"}], "\[Element]", RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}]}], "|", RowBox[{ RowBox[{ SubscriptBox["a", "1"], SubscriptBox["u", "1"]}], "+", RowBox[{ SubscriptBox["a", "2"], SubscriptBox["u", "2"]}], "+", RowBox[{ SubscriptBox["a", "3"], SubscriptBox["u", "3"]}]}]}], "=", "0"}], "}"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormAuth plane"], Cell[TextData[{ "Again, non-zero scalar multiples of ", Cell[BoxData[ FormBox[ StyleBox["u", FontVariations->{"Underline"->True}], TraditionalForm]]], " will give rise to the same plane in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], ", therefore, there are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["q", "3"], "-", "1"}], ")"}], "/", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "2"], "+", "q", "+", "1"}], TraditionalForm]]], " different planes through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], ". A different way to describe a plane through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ StyleBox[ RowBox[{"\[Lambda]", StyleBox["a", FontVariations->{"Underline"->True}]}]], "+", StyleBox[ RowBox[{"\[Mu]", StyleBox["b", FontVariations->{"Underline"->True}]}]]}], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], ",", RowBox[{"\[Mu]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Each non-zero point on a plane through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], " defines a line through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], ". As before, non-zero scalar multiples of this point define the same line. \ We conclude that there are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["q", "2"], "-", "1"}], ")"}], "/", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"q", "+", "1"}]}], TraditionalForm]]], " lines (through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], ") on a plane (", Cell[BoxData[ FormBox[ RowBox[{"through", " ", FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]}], TraditionalForm]]], ")." }], "Text"], Cell[TextData[{ "Each line ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ StyleBox[ RowBox[{"\[Lambda]", StyleBox["a", FontVariations->{"Underline"->True}]}]], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], " can be embedded in a plane ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ StyleBox[ RowBox[{"\[Lambda]", StyleBox["a", FontVariations->{"Underline"->True}]}]], "+", StyleBox[ RowBox[{"\[Mu]", StyleBox["b", FontVariations->{"Underline"->True}]}]]}], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], ",", RowBox[{"\[Mu]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], " by selecting any of the ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "3"], "-", "q"}], TraditionalForm]]], " points not on the line. Of course, not all these planes are different. A \ particular plane containing ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ StyleBox[ RowBox[{"\[Lambda]", StyleBox["a", FontVariations->{"Underline"->True}]}]], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], " can be obtained by any of the ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "2"], "-", "q"}], TraditionalForm]]], " points in the plane not on the line. It follows that each line ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"through", " ", FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]}], ")"}], TraditionalForm]]], " lies on exactly ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["q", "3"], "-", "q"}], ")"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["q", "2"], "-", "q"}], ")"}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"q", "+", "1"}]}], TraditionalForm]]], " planes ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"through", " ", FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]}], ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet \[ScriptCapitalP] be the set of lines through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is prime power, and let \[ScriptCapitalL] be the set of planes through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[ScriptCapitalP]", ",", "\[ScriptCapitalL]"}], ")"}], TraditionalForm]]], " is a projective plane of order ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAuth PG constr"], Cell[TextData[{ StyleBox["Remark 1:", FontWeight->"Bold"], "\nIt is easy to get confused here. The projective points correspond to \ lines in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " (through 0) and the projective lines correspond to planes in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " ", "(through 0)", "." }], "Text"], Cell[TextData[{ StyleBox["Remark 2:", FontWeight->"Bold"], "\nNote that we have already verified the properties PP-4, PP5, and PP-6 \ mentioned in ", ButtonBox["Theorem 13.6", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], "." }], "Text"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], " \n", StyleBox["Proof of PP-1", FontVariations->{"Underline"->True}], ":\nThe four lines through ", StyleBox["0", FontVariations->{"Underline"->True}], " and each of the points ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "0", ",", "0"}], ")"}], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "1", ",", "0"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "0", ",", "1"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "1", ",", "1"}], ")"}], TraditionalForm]]], " define four projective points in \[ScriptCapitalP], no three of which lie \ on a projective line. The reason is that no three of these four points in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " lie on the same plane through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Proof of PP-2", FontVariations->{"Underline"->True}], ":", StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " be two different projective points, and let them be defined by the lines \ ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ StyleBox[ RowBox[{"\[Lambda]", StyleBox["a", FontVariations->{"Underline"->True}]}]], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ StyleBox[ RowBox[{"\[Lambda]", StyleBox["b", FontVariations->{"Underline"->True}]}]], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], ". There is exactly one plane containing these two lines, namely ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ StyleBox[ RowBox[{"\[Lambda]", StyleBox["a", FontVariations->{"Underline"->True}]}]], "+", StyleBox[ RowBox[{"\[Mu]", StyleBox["b", FontVariations->{"Underline"->True}]}]]}], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], ",", RowBox[{"\[Mu]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], ". This plane defines the unique projective line through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Proof of PP-3", FontVariations->{"Underline"->True}], ":", StyleBox["\n", FontWeight->"Bold"], "Let \[ScriptL] and \[ScriptM] be two different projective lines. They \ correspond to two planes in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], ". The line of intersection of these two planes is a line through ", Cell[BoxData[ FormBox[ StyleBox["0", FontVariations->{"Underline"->True}], TraditionalForm]]], ", which defines the unique projective point on both \[ScriptL] and \ \[ScriptM]." }], "Text", TextAlignment->Left, TextJustification->0, 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 different techniques of generating a set of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "2"], "+", "q", "+", "1"}], TraditionalForm]]], " non-zero points in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " that will give rise to different lines and planes through ", StyleBox["0", FontVariations->{"Underline"->True}], " in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " (see ", ButtonBox["(13.9)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth line"], " and ", ButtonBox["(13.10)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth plane"], "), i.e. to ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "2"], "+", "q", "+", "1"}], TraditionalForm]]], " different projective points and projective planes." }], "Text"], Cell[TextData[{ "A nice way, as we shall see in the following example, is to take a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["q", "3"], ")"}], TraditionalForm]]], ", say \[Omega], represent it as vector in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], ", and take as points the elements ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Omega]", ",", "\[Ellipsis]", ",", SuperscriptBox["\[Omega]", RowBox[{ SuperscriptBox["q", "2"], "+", "q"}]]}], TraditionalForm]]], ". Indeed, let ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{ SuperscriptBox["\[Omega]", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["q", "3"], "-", "1"}], ")"}], "/", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]], "=", SuperscriptBox["\[Omega]", RowBox[{ SuperscriptBox["q", "2"], "+", "q", "+", "1"}]]}]}], TraditionalForm]]], ". Since \[Omega] has order ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "3"], "-", "1"}], TraditionalForm]]], ", it follows that \[Alpha] has order ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], ". It also follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Alpha]", ",", "\[Ellipsis]", ",", SuperscriptBox["\[Alpha]", RowBox[{"q", "-", "2"}]]}], "}"}], "=", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.29", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Is In F?"], " and the ", ButtonBox["Remark", BaseStyle->"Hyperlink", ButtonData:>"RemAppB p->q"], " at the end of Subsection B.4.6). This means that for each ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"q", "-", "2"}]}], TraditionalForm]]], " the points ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Omega]", "i"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Omega]", RowBox[{"i", "+", RowBox[{ RowBox[{"j", "(", RowBox[{ SuperscriptBox["q", "3"], "-", "1"}], ")"}], "/", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}]], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"3", ",", "q"}], ")"}], TraditionalForm]]], " give rise to the same projective point and thus we only have to consider \ ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Omega]", ",", "\[Ellipsis]", ",", SuperscriptBox["\[Omega]", RowBox[{ SuperscriptBox["q", "2"], "+", "q"}]]}], 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"], StyleBox[" ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Take", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"q", "=", "3"}], TraditionalForm]]], ". To find a primitive polynomial of degree 3 over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "3", ")"}], TraditionalForm]]], ", we first have to load the ", StyleBox["Mathematica", FontSlant->"Italic"], " package ", StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], ". After that we can apply the function ", StyleBox["FieldIrreducible", FontVariations->{"Underline"->True}], "." }], "Example", CellChangeTimes->{{3.423454923814907*^9, 3.423454926314891*^9}, { 3.4234551436728754`*^9, 3.423455145110366*^9}}, CellTags->"ExamAuth PG2-3"], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "3"}], ";", " ", RowBox[{"p", "=", "3"}], ";", RowBox[{"FieldIrreducible", "[", RowBox[{ RowBox[{"GF", "[", RowBox[{"p", ",", "m"}], "]"}], ",", "x"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", RowBox[{"2", " ", SuperscriptBox["x", "2"]}], "+", SuperscriptBox["x", "3"]}]], "Output", CellChangeTimes->{3.423370077646205*^9, 3.4233701620228252`*^9}], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["3", "3"], ")"}], TraditionalForm]]], " can be described by the set of ternary polynomials modulo ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"2", SuperscriptBox["x", "2"]}], "+", "1"}]}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["3", "3"], ")"}]}], TraditionalForm]]], " be a zero of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is a primitive polynomial, it follows that \[Omega] has order 26. This can \ be checked with" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"f27", "=", RowBox[{"GF", "[", RowBox[{"3", ",", RowBox[{"{", RowBox[{"1", ",", "0", ",", "2", ",", "1"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"om", "=", RowBox[{"f27", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}], "]"}]}], ";"}], "\n", SuperscriptBox["om", "2"], "\n", SuperscriptBox["om", "13"]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1"}], "}"}], "3"], Subscripted[ {0, 0, 1}[3]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "0", ",", "0"}], "}"}], "3"], Subscripted[ {2, 0, 0}[3]], Editable->False]], "Output"], Cell[TextData[{ "The element ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", SuperscriptBox["\[Omega]", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["q", "3"], "-", "1"}], ")"}], "/", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]]}], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "13"], "=", "2"}], TraditionalForm]]], " in this case. Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Alpha]"}], "}"}], "=", RowBox[{"GF", "(", "3", ")"}]}], TraditionalForm]]], ".\nSo, the ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["3", "2"], "+", "3", "+", "1"}], "=", "13"}], TraditionalForm]]], " projective points can be found by computing ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Omega]", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", "13"}], TraditionalForm]]], ". In this example, we take the equivalent set ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "13"}], TraditionalForm]]], " to keep the output uniform in appearance." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"Do", "[", RowBox[{ RowBox[{"Print", "[", SuperscriptBox["om", "i"], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "13"}], "}"}]}], "]"}]], "Input"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}], "3"], Subscripted[ {0, 1, 0}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1"}], "}"}], "3"], Subscripted[ {0, 0, 1}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "0", ",", "1"}], "}"}], "3"], Subscripted[ {2, 0, 1}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "2", ",", "1"}], "}"}], "3"], Subscripted[ {2, 2, 1}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "2", ",", "0"}], "}"}], "3"], Subscripted[ {2, 2, 0}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "2", ",", "2"}], "}"}], "3"], Subscripted[ {0, 2, 2}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1"}], "}"}], "3"], Subscripted[ {1, 0, 1}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "1", ",", "1"}], "}"}], "3"], Subscripted[ {2, 1, 1}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "2", ",", "2"}], "}"}], "3"], Subscripted[ {2, 2, 2}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "2", ",", "1"}], "}"}], "3"], Subscripted[ {1, 2, 1}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "1", ",", "0"}], "}"}], "3"], Subscripted[ {2, 1, 0}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "2", ",", "1"}], "}"}], "3"], Subscripted[ {0, 2, 1}[3]], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"2", ",", "0", ",", "0"}], "}"}], "3"], Subscripted[ {2, 0, 0}[3]], Editable->False]], "Print"], Cell[TextData[{ "To check if a projective point ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "i"], "=", RowBox[{"(", RowBox[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", SubscriptBox["a", "3"]}], ")"}]}], TraditionalForm]]], " lies on the projective line defined by ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "j"], "=", RowBox[{"(", RowBox[{ SubscriptBox["u", "1"], ",", SubscriptBox["u", "2"], ",", SubscriptBox["u", "3"]}], ")"}]}], TraditionalForm]]], " (see ", ButtonBox["(13.10)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth plane"], "), we need to check if ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["a", "1"], SubscriptBox["u", "1"]}], "+", RowBox[{ SubscriptBox["a", "2"], SubscriptBox["u", "2"]}], "+", RowBox[{ SubscriptBox["a", "3"], SubscriptBox["u", "3"]}]}], "=", "0"}], TraditionalForm]]], ". In ", StyleBox["Mathematica", FontSlant->"Italic"], " this can be done as follows (the ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{"[", "1", "]"}], "]"}], TraditionalForm]]], " removes the subscript in the presented output)." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"i", "=", "5"}], ";", RowBox[{"j", "=", "12"}], ";", RowBox[{"a", "=", RowBox[{ SuperscriptBox["om", "i"], "[", RowBox[{"[", "1", "]"}], "]"}]}]}], "\n", RowBox[{"b", "=", RowBox[{ SuperscriptBox["om", "j"], "[", RowBox[{"[", "1", "]"}], "]"}]}], "\n", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", ".", "b"}], ",", "3"}], "]"}], "==", "0"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"2", ",", "2", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "2", ",", "1"}], "}"}]], "Output"], Cell[BoxData["False"], "Output"], Cell[TextData[{ "So, we are now ready to generate the projective plane of order 3. We \ present it by means of its ", ButtonBox["incidence matrix", BaseStyle->"Hyperlink", ButtonData:>"DefAuth incid matr"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"A", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["om", "i"], "[", RowBox[{"[", "1", "]"}], "]"}], ")"}], ".", RowBox[{"(", RowBox[{ SuperscriptBox["om", "j"], "[", RowBox[{"[", "1", "]"}], "]"}], ")"}]}], ",", "3"}], "]"}], "==", "0"}], ",", "1", ",", "0"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "13"}], "}"}], ",", RowBox[{"{", RowBox[{"j", ",", "1", ",", "13"}], "}"}]}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "A", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"0", "1", "1", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1"}, {"1", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1"}, {"1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0", "0"}, {"0", "0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0"}, {"0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0"}, {"0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1"}, {"1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0", "0", "0"}, {"0", "0", "0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0"}, {"0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0"}, {"0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0"}, {"0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0", "0"}, {"0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0", "0", "1"}, {"1", "1", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "We can check the properties ", ButtonBox["PP-2, PP3", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], " and ", ButtonBox["PP4, PP5", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], " by computing (see ", ButtonBox["(13.8)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth A.A^T"], ")" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"MatrixForm", "[", RowBox[{"A", ".", RowBox[{"Transpose", "[", "A", "]"}]}], "]"}]], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"4", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"}, {"1", "4", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"}, {"1", "1", "4", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"}, {"1", "1", "1", "4", "1", "1", "1", "1", "1", "1", "1", "1", "1"}, {"1", "1", "1", "1", "4", "1", "1", "1", "1", "1", "1", "1", "1"}, {"1", "1", "1", "1", "1", "4", "1", "1", "1", "1", "1", "1", "1"}, {"1", "1", "1", "1", "1", "1", "4", "1", "1", "1", "1", "1", "1"}, {"1", "1", "1", "1", "1", "1", "1", "4", "1", "1", "1", "1", "1"}, {"1", "1", "1", "1", "1", "1", "1", "1", "4", "1", "1", "1", "1"}, {"1", "1", "1", "1", "1", "1", "1", "1", "1", "4", "1", "1", "1"}, {"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "4", "1", "1"}, {"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "4", "1"}, {"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "4"} }], ")"}], MatrixForm[#]& ]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["The Projective Plane Authentication Code", "Subsubsection", CellTags->"SubsubsAuth PG A-code"], 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[{"\[ScriptCapitalP]", ",", "\[ScriptCapitalL]"}], ")"}], TraditionalForm]]], " denote a ", ButtonBox["projective plane", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], ". Let \[ScriptL] be one of the projective lines.\nThe corresponding ", ButtonBox["authentication code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth auth code"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ "\[ScriptCapitalM]", ",", "\[ScriptCapitalK]", ",", "\[ScriptCapitalC]"}], ")"}], TraditionalForm]]], " is defined by ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalM]", "=", "\[ScriptL]"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalK]", "=", RowBox[{"\[ScriptCapitalP]", "\\", RowBox[{"{", RowBox[{"P", "|", RowBox[{"P", " ", "on", " ", "\[ScriptL]"}]}], "}"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalC]", "=", RowBox[{"\[ScriptCapitalL]", "\\", RowBox[{"{", "\[ScriptL]", "}"}]}]}], TraditionalForm]]], " and the mapping \n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "P"], "(", "Q", ")"}], TraditionalForm]]], " is the unique line \[GothicC] through ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], ",\t\t", Cell[BoxData[ FormBox[ RowBox[{"P", "\[Element]", "\[ScriptCapitalK]"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"Q", "\[Element]", "\[ScriptCapitalM]"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAuth PG AC"], Cell["\<\ In words, the message set \[ScriptCapitalM] consists of the points on \ \[ScriptL], the key space \[ScriptCapitalK] consists of all points not on \ \[ScriptL], the code set \[ScriptCapitalC] consists of all lines in \ \[ScriptCapitalL], except for \[ScriptL] itself.\ \>", "Text"], Cell[TextData[{ "Finding the message back from the received codeword \[GothicC] is quite \ easy. Just intersect ", Cell[BoxData[ FormBox[ RowBox[{"\[GothicC]", "=", RowBox[{ SubscriptBox["f", "P"], "(", "Q", ")"}]}], TraditionalForm]]], " with \[ScriptL]. Their intersection point is the message." }], "Text"], Cell["\<\ That the above scheme defines an authentication code is easy to check. Its \ parameters are given in the following theorem.\ \>", "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe A-code defined by a projective plane of order ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " has parameters \n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalM]", "|"}], "=", RowBox[{"n", "+", "1"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalK]", "|"}], "=", SuperscriptBox["n", "2"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalC]", "|"}], "=", RowBox[{ SuperscriptBox["n", "2"], "+", "n"}]}], TraditionalForm]]], ".\n\nThe probabilities of success for the impersonation and substitution \ attack are given by\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", RowBox[{ SubscriptBox["P", "S"], "=", FractionBox["1", "n"]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAuth PG-AC"], Cell[TextData[{ "The reader may want to check the above theorem on the ", ButtonBox["Fano plane", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Fano"], " below. The four points not on \[ScriptL] form the key space \ \[ScriptCapitalK], the three points on \[ScriptL] the message space \ \[ScriptCapitalM], and the other six lines the codeword set \ \[ScriptCapitalC]. " }], "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .86603 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.274929 0.295548 0.274929 [ [.66496 .68045 -5.84375 -8.6875 ] [.66496 .68045 5.84375 8.6875 ] [ 0 0 0 0 ] [ 1 .86603 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .5 Mabswid newpath matrix currentmatrix 0.274929 0.274929 scale 1.81865 1.07501 1 0 365.73 arc setmatrix s 1 0 0 r .03 w .2619 .43301 Mdot .02381 .02062 Mdot .5 .02062 Mdot .5 .29555 Mdot 0 g .97619 .02062 Mdot .7381 .43301 Mdot .5 .84541 Mdot .5 Mabswid .5 .02062 m .5 .84541 L .02381 .02062 L .97619 .02062 L .2619 .43301 L s .7381 .43301 m .02381 .02062 L s 0 1 0 r .97619 .02062 m .5 .84541 L s 0 g gsave .66496 .68045 -66.8438 -12.6875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25.375 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.375000 moveto 464.000000 21.375000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.375000 lineto closepath clip newpath 63.000000 17.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 20.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 17.625000 moveto %%IncludeResource: font Math5Mono %%IncludeFont: Math5Mono /Math5Mono findfont 20.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor ({) show 70.687500 17.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 20.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 Math5Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math5Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math5Mono %%+ font Courier grestore 0 0 m 1 0 L 1 .86603 L 0 .86603 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Text", ImageSize->{189.813, 164}, ImageMargins->{{45.75, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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\ \>"], ImageRangeCache->{{{0, 283.688}, {245, 0}} -> {-1.82373, -1.07501, 0.019286, \ 0.019286}}], Cell[TextData[{ StyleBox["Proof of Theorem 13.8", FontWeight->"Bold"], ": \nThe parameters in this theorem follow directly from ", ButtonBox["Theorem 13.6", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "To compute ", Cell[BoxData[ FormBox[ SubscriptBox["P", "I"], TraditionalForm]]], ", we observe that an opponent can do no better than to select as a codeword \ a line \[GothicC] (\[GothicC]\[NotEqual]\[ScriptL]) that contains as many \ points outside \[ScriptL] (these are the possible keys) as possible. However, \ this number of points outside \[ScriptL] is independent of the choice of \ \[GothicC]. It is ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " by ", ButtonBox["PP-4", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], ". So, by ", ButtonBox["(13.2)", BaseStyle->"Hyperlink", ButtonData:>"DefAuth P_I"], "," }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", RowBox[{ FractionBox["n", RowBox[{"|", "\[ScriptCapitalK]", "|"}]], "=", RowBox[{ FractionBox["n", SuperscriptBox["n", "2"]], "=", FractionBox["1", "n"]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Similarly, if the opponent has observed codeword \[GothicC] (not equal to \ \[ScriptL]), there are still ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " keys (points on \[GothicC] but not on \[ScriptL]) possible. Let ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " be the intersection of \[GothicC] with \[ScriptL]. To replace it with \ another message (point ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " on \[ScriptL]) the opponent can do no better than select a line \[ScriptD] \ through such a point ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " with as many points on \[GothicC] as possible. But by ", ButtonBox["PP-2", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], " this number is 1, independent of the choice of \[GothicC] and \[ScriptD], \ namely the unique point of intersection of \[GothicC] and \[ScriptD]. So, by \ ", ButtonBox["(13.3)", BaseStyle->"Hyperlink", ButtonData:>"DefAuth P_S"], "," }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "S"], "=", FractionBox["1", "n"]}], 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 authentication codes coming from projective planes, are ", ButtonBox["perfect", BaseStyle->"Hyperlink", ButtonData:>"DefAuth square root"], " because ", Cell[BoxData[ FormBox[ SubscriptBox["P", "I"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["P", "S"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["P", "D"], TraditionalForm]]], " are all ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "n"}], TraditionalForm]]], ", which is equal to ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", SqrtBox[ RowBox[{"|", "\[ScriptCapitalK]", "|"}]]}], TraditionalForm]]], ". \nMoreover, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalM]", "|"}], "=", RowBox[{ RowBox[{"n", "+", "1"}], "=", RowBox[{ SqrtBox[ RowBox[{"|", "\[ScriptCapitalK]", "|"}]], "+", "1"}]}]}], TraditionalForm]]], ", so, ", ButtonBox["Theorem 13.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAuth M<=K+1"], ", tells us that the message set is of maximal size given this key set." }], "Text"], Cell[TextData[{ "A construction of authentication codes by means of shift register sequences \ can be found in ", ButtonBox["[Joha94a]", BaseStyle->"Hyperlink", ButtonData:>"RefJoha94a"], ". Its implementation is simpler than the projective plane construction \ above. For large message sets, e.g. data files, the codes discussed in ", ButtonBox["Section 13.3.4", BaseStyle->"Hyperlink", ButtonData:>"SubsAuth EC AC"], " may be more practical." }], "Text", GeneratedCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tA-Codes From Orthogonal Arrays" }], "Subsection", CellTags->"SubsAuth OA AC"], 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["orthogonal array", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"OA", "(", RowBox[{"n", ",", "k", ",", "\[Lambda]"}], ")"}], TraditionalForm]]], " is a ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Times]", RowBox[{"(", RowBox[{"\[Lambda]", ".", SuperscriptBox["n", "2"]}], ")"}]}], TraditionalForm]]], " matrix of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " symbols, such that in any two rows every possible pair of symbols occurs \ exactly \[Lambda] times.\nThe number \[Lambda] is called the ", StyleBox["index", FontSlant->"Italic"], " of the orthogonal array and ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " its ", StyleBox["depth", FontSlant->"Italic"], ". " }], "Definition", CellTags->"DefAuth OA"], Cell[TextData[{ "Note that the above implies that each symbol occurs exactly ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", ".", "n"}], TraditionalForm]]], " times in each row." }], "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"], "An example of an ", Cell[BoxData[ FormBox[ RowBox[{"OA", "(", RowBox[{"4", ",", "5", ",", "1"}], ")"}], TraditionalForm]]], " is given by" }], "Example", CellTags->"ExamAuth OA4-5-1"], Cell[BoxData[ RowBox[{ RowBox[{"U", "=", RowBox[{"(", GridBox[{ {"0", "0", "0", "0", "1", "1", "1", "1", "2", "2", "2", "2", "3", "3", "3", "3"}, {"0", "1", "2", "3", "0", "1", "2", "3", "0", "1", "2", "3", "0", "1", "2", "3"}, {"0", "1", "2", "3", "1", "0", "3", "2", "2", "3", "0", "1", "3", "2", "1", "0"}, {"0", "1", "2", "3", "2", "3", "0", "1", "3", "2", "1", "0", "1", "0", "3", "2"}, {"0", "1", "2", "3", "3", "2", "1", "0", "1", "0", "3", "2", "2", "3", "0", "1"} }], ")"}]}], ";"}]], "Input"], Cell["\<\ The following theorem shows how orthogonal arrays define A-codes in a natural \ way.\ \>", "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " be an orthogonal array ", Cell[BoxData[ FormBox[ RowBox[{"OA", "(", RowBox[{"n", ",", "k", ",", "\[Lambda]"}], ")"}], TraditionalForm]]], ". Let the rows of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " be indexed by the set \[ScriptCapitalM] and the columns by the set \ \[ScriptCapitalK]. Further, put ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalT]", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "n"}], "}"}]}], TraditionalForm]]], ". Define the mapping ", Cell[BoxData[ FormBox[ RowBox[{"g", ":", RowBox[{ RowBox[{"\[ScriptCapitalM]", "\[Times]", "\[ScriptCapitalK]"}], "\[RightArrow]", "\[ScriptCapitalT]"}]}], TraditionalForm]]], " by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["g", "k"], "(", "m", ")"}], "=", SubscriptBox["U", RowBox[{"m", ",", "k"}]]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " defines an ", ButtonBox["A-code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth A-code"], " with parameters: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalM]", "|"}], "=", "k"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalK]", "|"}], "=", RowBox[{"\[Lambda]", ".", SuperscriptBox["n", "2"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalT]", "|"}], "=", "n"}], TraditionalForm]]], ".\nFurther\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", RowBox[{ SubscriptBox["P", "S"], "=", RowBox[{"1", "/", "n"}]}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The parameters of this A-code follow from those of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "The chance that an impersonation attack succeeds is ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "n"}], TraditionalForm]]], ", because each symbol occurs equally often in a row of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "The probability of a successful substitution attack is also ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "n"}], TraditionalForm]]], ". The reason is that each intercepted authenticator occurs \[Lambda] with \ each possible symbol, no matter which message was intercepted and which \ message one wants it to be replaced with." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Example 13.7 (Part 2)", StyleBox["\nFor instance, in the matrix ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox["U", TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" defined above, message 4 under key 13 will be authenticated by", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", FontWeight->"Bold"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "4"}], ";", RowBox[{"k", "=", "13"}], ";", RowBox[{"U", "[", RowBox[{"[", RowBox[{"4", ",", "13"}], "]"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output"], Cell[TextData[{ "When, message 4 is intercepted with authenticator 1, one knows that the key \ is among ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"2", ",", "8", ",", "11", ",", "13"}], "}"}], TraditionalForm]]], ". ", StyleBox["Mathematica", FontSlant->"Italic"], " can find these positions with the functions ", StyleBox["Flatten", FontVariations->{"Underline"->True}], " and ", StyleBox["Position", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234562848314724`*^9, 3.4234562855815105`*^9}, { 3.4234638368015857`*^9, 3.42346383756723*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"l", "=", RowBox[{"Flatten", "[", RowBox[{"Position", "[", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "4", "]"}], "]"}], ",", "1"}], "]"}], "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"2", ",", "8", ",", "11", ",", "13"}], "}"}]], "Output"], Cell[TextData[{ "Each other row has all four symbols on these four locations. This can be \ checked with the functions ", StyleBox["MatrixForm", FontVariations->{"Underline"->True}], " and ", StyleBox["Transpose", FontVariations->{"Underline"->True}], ". The ", StyleBox["[[l]]", FontSlant->"Plain"], " below gives the restriction of the matrix to the rows indexed by the \ elements of the list l." }], "Text", CellChangeTimes->{3.423395233146423*^9, 3.423397155205599*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"SubU", "=", RowBox[{ RowBox[{"Transpose", "[", "U", "]"}], " ", "[", RowBox[{"[", " ", "l", " ", "]"}], "]"}]}], " ", ";", RowBox[{"MatrixForm", "[", RowBox[{"Transpose", "[", "SubU", "]"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"0", "1", "2", "3"}, {"1", "3", "2", "0"}, {"1", "2", "0", "3"}, {"1", "1", "1", "1"}, {"1", "0", "3", "2"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "There is a great deal of literature on orthogonal arrays. See ", ButtonBox["[Hall67]", BaseStyle->"Hyperlink", ButtonData:>"RefHall67"], " or ", ButtonBox["[BeJL86]", BaseStyle->"Hyperlink", ButtonData:>"RefBeJL86"], " for constructions, bounds and existence results. For instance, it is known \ that an ", Cell[BoxData[ FormBox[ RowBox[{"OA", "(", RowBox[{"q", ",", RowBox[{"q", "+", "1"}], ",", "1"}], ")"}], TraditionalForm]]], " exist for all prime powers ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ", because orthogonal arrays with these parameters exist if and only if ", ButtonBox["projective planes", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], " of order ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " exist (see ", ButtonBox["Theorem. 13.7", BaseStyle->"Hyperlink", ButtonData:>"TheoAuth PG constr"], " for a construction of a projective plane of order ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ") .\nBelow we give a sketch of the proof of this result. " }], "Text", GeneratedCell->True], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[ScriptCapitalP]", ",", "\[ScriptCapitalL]"}], ")"}], TraditionalForm]]], " be a projective plane of ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], " ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". Pick any of the lines \[ScriptL] in \[ScriptCapitalL]. Number the points \ on \[ScriptL] by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "1"], ",", SubscriptBox["P", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["P", RowBox[{"q", "+", "1"}]]}], TraditionalForm]]], " and the other points by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Q", "1"], ",", SubscriptBox["Q", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["Q", SuperscriptBox["q", "2"]]}], TraditionalForm]]], ". \nLet ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalL]", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"q", "+", "1"}]}], TraditionalForm]]], ", be the collection of all lines through ", Cell[BoxData[ FormBox[ SubscriptBox["P", "i"], TraditionalForm]]], " except for \[ScriptL] itself. By ", ButtonBox["PP-5", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], ", each ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalL]", "i"], TraditionalForm]]], " has cardinality ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". Number the lines in each ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalL]", "i"], TraditionalForm]]], " from 1 to ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Define ", Cell[BoxData[ FormBox[ SubscriptBox["U", RowBox[{"i", ",", "j"}]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"q", "+", "1"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", SuperscriptBox["q", "2"]}], TraditionalForm]]], ", as ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "k", "\[LessEqual]", "q"}], TraditionalForm]]], ", is the index of the unique line in ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalL]", "i"], TraditionalForm]]], " that meets ", Cell[BoxData[ FormBox[ SubscriptBox["Q", "j"], TraditionalForm]]], " (which is the unique line in \[ScriptCapitalL] through ", Cell[BoxData[ FormBox[ SubscriptBox["P", "i"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["Q", "j"], TraditionalForm]]], "). Then ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " is an ", Cell[BoxData[ FormBox[ RowBox[{"OA", "(", RowBox[{"q", ",", RowBox[{"q", "+", "1"}], ",", "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"], StyleBox["\n", FontWeight->"Bold"], StyleBox["Consider the ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["incidence matrix", BaseStyle->"Hyperlink", ButtonData:>"DefAuth incid matr"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox["A", TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" of the projective plane of order 3 in ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 13.6", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth PG2-3"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". ", FontWeight->"Plain", FontSlant->"Italic"] }], "Example", FontWeight->"Bold", FontSlant->"Plain"], Cell[BoxData[ RowBox[{ RowBox[{"A", "=", TagBox[ RowBox[{"(", GridBox[{ {"0", "1", "1", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1"}, {"1", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1"}, {"1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0", "0"}, {"0", "0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0"}, {"0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0"}, {"0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1"}, {"1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0", "0", "0"}, {"0", "0", "0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0"}, {"0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0"}, {"0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0"}, {"0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0", "0"}, {"0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0", "0", "1"}, {"1", "1", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0"} }], ")"}], MatrixForm[#]& ]}], ";"}]], "Input"], Cell["\<\ We define a function RowSwap to perform row exchanges in a matrix.\ \>", "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"RowSwap", "[", RowBox[{"B_", ",", "i_", ",", "j_"}], "]"}], ":=", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"U", ",", "V"}], "}"}], ",", RowBox[{ RowBox[{"U", "=", "B"}], ";", RowBox[{"V", "=", RowBox[{"U", "[", RowBox[{"[", "i", "]"}], "]"}]}], ";", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "i", "]"}], "]"}], "=", RowBox[{"U", "[", RowBox[{"[", "j", "]"}], "]"}]}], ";", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "j", "]"}], "]"}], "=", "V"}], ";", "U"}]}], "]"}]}]], "Input"], Cell[TextData[{ "Next we perform some column permutations on ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " to get a line \[ScriptL] as top row with all its points on the left. We \ use the ", StyleBox["Transpose", FontVariations->{"Underline"->True}], " function." }], "Text", CellChangeTimes->{3.4233952387714586`*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"B", "=", RowBox[{"Transpose", "[", "A", "]"}]}], ";", RowBox[{"B", "=", RowBox[{"RowSwap", "[", RowBox[{"B", ",", "1", ",", "7"}], "]"}]}], ";", RowBox[{"B", "=", RowBox[{"RowSwap", "[", RowBox[{"B", ",", "4", ",", "13"}], "]"}]}], ";", RowBox[{"B", "=", RowBox[{"Transpose", "[", "B", "]"}]}], ";", RowBox[{"MatrixForm", "[", "B", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0"}, {"0", "0", "0", "1", "1", "0", "1", "0", "0", "0", "1", "0", "0"}, {"1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0", "0"}, {"1", "0", "0", "0", "0", "1", "0", "0", "0", "0", "1", "0", "1"}, {"0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0"}, {"0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1"}, {"0", "0", "1", "0", "0", "0", "1", "1", "0", "0", "0", "0", "1"}, {"1", "0", "0", "0", "1", "0", "0", "1", "0", "0", "0", "1", "0"}, {"0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0"}, {"0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0"}, {"0", "1", "0", "0", "1", "0", "0", "0", "1", "0", "0", "0", "1"}, {"0", "0", "0", "1", "0", "1", "0", "1", "1", "0", "0", "0", "0"}, {"0", "1", "0", "0", "0", "1", "1", "0", "0", "0", "0", "1", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "Next we perform a number of row exchanges to get the subsets ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalL]", "i"], TraditionalForm]]], " nicely aligned ", Cell[BoxData[ FormBox[ RowBox[{"(", SubscriptBox["\[ScriptCapitalL]", "1"]}], TraditionalForm]]], " will appear in rows ", Cell[BoxData[ FormBox[ RowBox[{"2", ",", "3", ",", "4"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalL]", "2"], TraditionalForm]]], " in rows ", Cell[BoxData[ FormBox[ RowBox[{"5", ",", "6", ",", "7"}], TraditionalForm]]], ", etc)." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"BB", "=", "B"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"BB", "=", RowBox[{"RowSwap", "[", RowBox[{"BB", ",", "2", ",", "8"}], "]"}]}], ";", RowBox[{"BB", "=", RowBox[{"RowSwap", "[", RowBox[{"BB", ",", "6", ",", "11"}], "]"}]}], ";", RowBox[{"BB", "=", RowBox[{"RowSwap", "[", RowBox[{"BB", ",", "7", ",", "13"}], "]"}]}], ";", RowBox[{"BB", "=", RowBox[{"RowSwap", "[", RowBox[{"BB", ",", "8", ",", "13"}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{"MatrixForm", "[", "BB", "]"}]}], "Input", CellChangeTimes->{{3.4234737072281947`*^9, 3.4234737097438035`*^9}}], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0"}, {"1", "0", "0", "0", "1", "0", "0", "1", "0", "0", "0", "1", "0"}, {"1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0", "0"}, {"1", "0", "0", "0", "0", "1", "0", "0", "0", "0", "1", "0", "1"}, {"0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "0"}, {"0", "1", "0", "0", "1", "0", "0", "0", "1", "0", "0", "0", "1"}, {"0", "1", "0", "0", "0", "1", "1", "0", "0", "0", "0", "1", "0"}, {"0", "0", "1", "0", "0", "0", "1", "1", "0", "0", "0", "0", "1"}, {"0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0"}, {"0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0"}, {"0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1"}, {"0", "0", "0", "1", "0", "1", "0", "1", "1", "0", "0", "0", "0"}, {"0", "0", "0", "1", "1", "0", "1", "0", "0", "0", "1", "0", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "The last 9 columns define the orthogonal array ", Cell[BoxData[ FormBox[ RowBox[{"OA", "(", RowBox[{"3", ",", "4", ",", "1"}], ")"}], TraditionalForm]]], ". For instance, column 5 minus its first entry looks like ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ StyleBox["1", FontColor->RGBColor[0, 0, 1]], StyleBox[",", FontColor->RGBColor[0, 0, 1]], StyleBox["0", FontColor->RGBColor[0, 0, 1]], StyleBox[",", FontColor->RGBColor[0, 0, 1]], StyleBox["0", FontColor->RGBColor[0, 0, 1]], StyleBox[",", FontColor->RGBColor[0, 0, 1]], "0", ",", "1", ",", "0", ",", StyleBox["0", FontColor->RGBColor[0, 0, 1]], StyleBox[",", FontColor->RGBColor[0, 0, 1]], StyleBox["0", FontColor->RGBColor[0, 0, 1]], StyleBox[",", FontColor->RGBColor[0, 0, 1]], StyleBox["1", FontColor->RGBColor[0, 0, 1]], StyleBox[",", FontColor->RGBColor[0, 0, 1]], "0", ",", "0", ",", "1"}], ")"}], TraditionalForm]]], ". This vector is the concatenation of four three-tuples, each containing \ one 1. It will be mapped to four entries in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "2", ",", "3"}], "}"}], TraditionalForm]]], ", depending on whether the 1 is on the first coordinate, the second, or the \ third, therefore, column 5 will be mapped to ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ StyleBox["1", FontColor->RGBColor[0, 0, 1]], ",", "2", ",", StyleBox["3", FontColor->RGBColor[0, 0, 1]], ",", "3"}], ")"}], TraditionalForm]]], ". " }], "Text", FontSlant->"Italic"], Cell[TextData[{ "In this way the last 9 columns are mapped with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Table", FontVariations->{"Underline"->True}], ", ", StyleBox["If", FontVariations->{"Underline"->True}], ", and ", StyleBox["Do", FontVariations->{"Underline"->True}], " to the ", Cell[BoxData[ FormBox[ RowBox[{"4", "\[Times]", "9"}], TraditionalForm]]], " matrix:" }], "Text", CellChangeTimes->{3.4233923079089513`*^9, 3.423393134507992*^9, 3.4233938928097196`*^9}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"U", "=", RowBox[{"Table", "[", RowBox[{"0", ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"j", ",", "1", ",", "9"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"b", "=", RowBox[{"{", RowBox[{ RowBox[{"BB", "[", RowBox[{"[", RowBox[{ RowBox[{"2", "+", RowBox[{ RowBox[{"(", RowBox[{"i", "-", "1"}], ")"}], "*", "3"}]}], ",", "j"}], "]"}], "]"}], ",", RowBox[{"BB", "[", RowBox[{"[", RowBox[{ RowBox[{"3", "+", RowBox[{ RowBox[{"(", RowBox[{"i", "-", "1"}], ")"}], "*", "3"}]}], ",", "j"}], "]"}], "]"}], ",", RowBox[{"BB", "[", RowBox[{"[", RowBox[{ RowBox[{"4", "+", RowBox[{ RowBox[{"(", RowBox[{"i", "-", "1"}], ")"}], "*", "3"}]}], ",", "j"}], "]"}], "]"}]}], "}"}]}], ";", "\t\t\t", RowBox[{ RowBox[{"U", "[", RowBox[{"[", RowBox[{"i", ",", RowBox[{"j", "-", "4"}]}], "]"}], "]"}], "=", RowBox[{"If", "[", RowBox[{ RowBox[{"b", "==", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0"}], "}"}]}], ",", "1", ",", RowBox[{"If", "[", RowBox[{ RowBox[{"b", "==", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}]}], ",", "2", ",", "3"}], "]"}]}], "]"}]}]}], ",", "\t\t\t", RowBox[{"{", RowBox[{"i", ",", "1", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"j", ",", "5", ",", "13"}], "}"}]}], "]"}], ";"}], "\n", RowBox[{"MatrixForm", "[", "U", "]"}]}], "Input", CellChangeTimes->{{3.423473717775002*^9, 3.42347373374365*^9}}], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "3", "2", "1", "2", "2", "3", "1", "3"}, {"2", "3", "3", "1", "2", "1", "1", "3", "2"}, {"3", "3", "1", "1", "2", "3", "2", "2", "1"}, {"3", "2", "3", "2", "2", "1", "3", "1", "1"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "This is indeed an ", Cell[BoxData[ FormBox[ RowBox[{"OA", "(", RowBox[{"3", ",", "4", ",", "1"}], ")"}], TraditionalForm]]], " and hence it defines an A-code with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalM]", "|"}], "=", "4"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalK]", "|"}], "=", "9"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalT]", "|"}], "=", "3"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", RowBox[{ SubscriptBox["P", "S"], "=", RowBox[{"1", "/", "3"}]}]}], TraditionalForm]]], ".", "\n", "Note that the last 9 columns in ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " (or ", Cell[BoxData[ FormBox["A", TraditionalForm]]], ") can be further permuted to get" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ TagBox[ RowBox[{"(", GridBox[{ {"1", "1", "1", "2", "2", "2", "3", "3", "3"}, {"1", "2", "3", "1", "2", "3", "1", "2", "3"}, {"1", "3", "2", "3", "2", "1", "2", "1", "3"}, {"2", "3", "1", "1", "2", "3", "3", "1", "2"} }], ")"}], MatrixForm[#]& ], ";"}]], "Input"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tA-Codes From Error-Correcting Codes" }], "Subsection", CellTags->"SubsAuth EC AC"], Cell[TextData[{ "In ", ButtonBox["[JohKS93]", BaseStyle->"Hyperlink", ButtonData:>"RefJohKS93"], " it is shown how authentication codes can be constructed from \ error-correcting codes (EC-codes) and vice versa. In this subsection we shall \ show how to convert an EC-code to an ", ButtonBox["A-code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth A-code"], ". Our description is slightly different from the original one." }], "Text", GeneratedCell->True], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " be any ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", RowBox[{"|", "C", "|"}], ",", SubscriptBox["d", "H"]}]}], TraditionalForm]]], ") EC-code over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " is a subset of ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"V", "(", RowBox[{"n", ",", "q"}], ")"}], FontSlant->"Italic"], TraditionalForm]]], ", the ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-dimensional vectorspace over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", with minimum ", ButtonBox["Hamming distance", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], " ", Cell[BoxData[ FormBox[ SubscriptBox["d", "H"], TraditionalForm]]], ". The latter means that all elements in ", Cell[BoxData[ FormBox["C", TraditionalForm]]], ", which are called ", ButtonBox["codewords", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], ", differ in at least ", Cell[BoxData[ FormBox[ SubscriptBox["d", "H"], TraditionalForm]]], " coordinates from each other. The dimension ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"n", ",", "q"}], ")"}], TraditionalForm]]], " is also called the length of ", Cell[BoxData[ FormBox["C", TraditionalForm]]], ". " }], "Text", CellTags->"DefAuth V(n q)"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " have the additional property that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "\[Element]", "C"}], TraditionalForm]]], "\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "+", StyleBox[ RowBox[{"\[Lambda]", StyleBox["1", FontVariations->{"Underline"->True}]}]]}], "\[Element]", "C"}], TraditionalForm]]], ",\tfor all ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], ",\t" }], "NumberedEquation", CellTags->"FormAuth c+l1 in C"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ StyleBox["1", FontVariations->{"Underline"->True}], TraditionalForm]]], " stands for the all-one vector." }], "Text"], Cell[TextData[{ "For instance, any linear code containing the all-one vector satisfies \ (13.11). Note that (13.11) implies that ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " divides the cardinality of ", Cell[BoxData[ FormBox["C", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "The relation \[Tilde] defined on ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " by " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], "\[Tilde]", StyleBox[ RowBox[{"c", "'"}], FontVariations->{"Underline"->True}]}], TraditionalForm]]], " \t if and only if\t ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["c", FontVariations->{"Underline"->True}], StyleBox["-", FontVariations->{"Underline"->False}], StyleBox[ RowBox[{"c", "'"}], FontVariations->{"Underline"->True}]}], StyleBox["=", FontVariations->{"Underline"->True}], StyleBox[ RowBox[{ StyleBox["\[Lambda]", FontVariations->{"Underline"->False}], StyleBox["1", FontVariations->{"Underline"->True}]}]]}], TraditionalForm]]], "\t for some ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], ",\t" }], "NumberedEquation", CellTags->"FormAuth c~c'"], Cell[TextData[{ "defines an ", ButtonBox["equivalence relation", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Equiv Rel"], " on ", Cell[BoxData[ FormBox["C", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " be a subcode of ", Cell[BoxData[ FormBox["C", TraditionalForm]]], ", containing one representative from each equivalence class. So, ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " has cardinality ", Cell[BoxData[ FormBox[ RowBox[{"|", "C", "|", RowBox[{"/", "q"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"C", "=", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "+", RowBox[{"\[Lambda]", StyleBox[ RowBox[{".", StyleBox["1", FontVariations->{"Underline"->True}]}]]}]}], "|", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "\[Element]", "M"}]}], ",", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}]}], TraditionalForm]]], ". " }], "Text", GeneratedCell->True], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["m", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"0", "\[LessEqual]", "i", "<"}], "|", "C", "|", RowBox[{"/", "q"}]}], TraditionalForm]]], ", be any enumeration of the codewords in ", Cell[BoxData[ FormBox["M", TraditionalForm]]], ". As ", ButtonBox["message set", BaseStyle->"Hyperlink", ButtonData:>"DefAuth auth code"], " \[ScriptCapitalM] for the authentication code that we are constructing, we \ take ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalM]", "=", RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", RowBox[{ RowBox[{"(", RowBox[{"|", "C", "|", RowBox[{"/", "q"}]}], ")"}], "-", "1"}]}], "}"}]}], TraditionalForm]]], ". This means that we have a 1-1 correspondence between the subcode ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " and the index set \[ScriptCapitalM]. It is often convenient not to \ distinguish between these two sets. So, from now on we shall speak of message \ ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["m", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " instead of message ", Cell[BoxData[ FormBox["i", 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[" (Part 1)", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Consider the binary linear code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " with", StyleBox[" ", FontWeight->"Bold"], ButtonBox["generator matrix", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"] }], "Example", CellTags->"ExamAuth Hamming"], Cell[BoxData[ RowBox[{ RowBox[{"G", "=", RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "1", "1", "0"}, {"0", "1", "0", "0", "1", "0", "1"}, {"0", "0", "1", "0", "0", "1", "1"}, {"0", "0", "0", "1", "1", "1", "1"} }], ")"}]}], ";"}]], "Input"], Cell[TextData[{ "This means that ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " consists of the 16 vectors in the (binary) linear span of the rows. It is \ easy to check that different codewords in ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " differ in at least 3 coordinates. This makes ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"7", ",", "16", ",", "3"}], ")"}], TraditionalForm]]], " code in ", Cell[BoxData[ FormBox[ RowBox[{"V", "(", RowBox[{"7", ",", "2"}], ")"}], TraditionalForm]]], ". Some readers may recognize ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " as a Hamming code.\nThat the all-one word is in ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " can easily be checked." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"inf", "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"inf", ".", "G"}], ",", "2"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "It follows that ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " satisfies ", ButtonBox["(13.11)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth c+l1 in C"], ".\nAs subcode ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " we take all codewords in ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " with first coordinate equal to 0. So, ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " consists of the linear span of the lower three rows of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ". The message set ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalM]", "=", RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", "7"}], "}"}]}], TraditionalForm]]], " will be identified with ", Cell[BoxData[ FormBox["M", TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "The ", ButtonBox["key set", BaseStyle->"Hyperlink", ButtonData:>"DefAuth auth code"], " \[ScriptCapitalK] of the authentication code that we are constructing, \ will consist of the pairs ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"i", ",", "\[Lambda]"}], ")"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalK]", "=", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "n"}], "}"}], "\[Times]", RowBox[{"GF", "(", "q", ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalK]", "|"}], "=", RowBox[{"n", ".", "q"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "The ", ButtonBox["authenticator", BaseStyle->"Hyperlink", ButtonData:>"DefAuth A-code"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["g", "k"], "(", StyleBox["m", FontVariations->{"Underline"->True}], StyleBox[")", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " of message ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "\[Element]", "M"}], TraditionalForm]]], " under key ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", RowBox[{"(", RowBox[{"i", ",", "\[Lambda]"}], ")"}]}], TraditionalForm]]], " is simply given by " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["g", "k"], "(", StyleBox["m", FontVariations->{"Underline"->True}], ")"}], "=", RowBox[{ SubscriptBox["m", "i"], "+", "\[Lambda]"}]}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "So, the authenticator set \[ScriptCapitalT] is just ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " be an ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", RowBox[{"|", "C", "|"}], ",", SubscriptBox["d", "H"]}], ")"}], TraditionalForm]]], " code satisfying ", ButtonBox["(13.11)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth c+l1 in C"], ". Let \[ScriptCapitalM] be a subcode of ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " containing one element of each equivalence class under relation ", ButtonBox["(13.12)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth c~c'"], ". \nLet ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalK]", "=", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "n"}], "}"}], "\[Times]", RowBox[{"GF", "(", "q", ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalT]", "=", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], ". Further, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["g", "k"], "(", StyleBox["m", FontVariations->{"Underline"->True}], StyleBox[")", FontVariations->{"Underline"->True}]}], ":", RowBox[{"\[ScriptCapitalM]", "\[Times]", RowBox[{ "\[ScriptCapitalK]", "\[LongRightArrow]", "\[ScriptCapitalT]"}]}]}], TraditionalForm]]], " is defined by (13.13).\nThen ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ "\[ScriptCapitalM]", ",", "\[ScriptCapitalK]", ",", "\[ScriptCapitalT]"}], ")"}], TraditionalForm]]], " is an A-code with parameters" }], "Theorem", CellTags->"TheoAuth EC=>A"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalM]", "|"}], "=", RowBox[{"|", "C", "|", RowBox[{"/", "q"}]}]}], TraditionalForm]]], ",\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalK]", "|"}], "=", RowBox[{"n", ".", "q"}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalT]", "|"}], "=", "q"}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", RowBox[{"1", "/", "q"}]}], TraditionalForm]]], ",\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "S"], "\[LessEqual]", RowBox[{"1", "-", RowBox[{ SubscriptBox["d", "H"], "/", "n"}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormAuth P_I in Joh"], Cell[TextData[{ StyleBox["Remark:", FontWeight->"Bold"], "\nTo make ", Cell[BoxData[ FormBox[ SubscriptBox["P", "S"], TraditionalForm]]], " acceptably low, one needs EC-codes with ", Cell[BoxData[ FormBox[ SubscriptBox["d", "H"], TraditionalForm]]], " close to ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". For ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "-ary codes this is no problem, as we shall see in ", ButtonBox["Example 13.10", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth RS-1"], ". Of course, ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " also needs to be large." }], "Text"], Cell[TextData[{ StyleBox["Proof of Theorem 13.10", FontWeight->"Bold"], ":\nThe parameters in (13.14) follow immediately from the construction." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "To compute ", Cell[BoxData[ FormBox[ SubscriptBox["P", "I"], TraditionalForm]]], ", we note that an opponent who wants to impersonate the sender needs to \ find the right authenticator for his message ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], ". However, for each coordinate ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], " the set ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{ SubscriptBox["m", "i"], "+", "\[Lambda]"}], "|", RowBox[{"\[Lambda]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}]}], "}"}], TraditionalForm]]], " is equal to ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ". In other words, each symbol occurs equally often as authenticator of ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}], TraditionalForm]]], ". So, the probability that the opponent will choose the correct \ authenticator is ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "q"}], TraditionalForm]]], ", independent of the choice of the authenticator and independent of the \ message ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], TraditionalForm]]], " that the opponent tries to transmit. This proves that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", RowBox[{"1", "/", "q"}]}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "An opponent who wants to replace an authenticated message ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], ",", "t"}], ")"}], TraditionalForm]]], ", (where ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", RowBox[{ SubscriptBox["g", "k"], "(", FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm], ")"}]}], TraditionalForm]]], ") by another authenticated message, knows that the key in use is from a set \ of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " possible keys ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"i", ",", "\[Lambda]"}], ")"}], TraditionalForm]]], ". To be more precise, for each coordinate ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], " there is exactly one value of \[Lambda] such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["m", "i"], "+", "\[Lambda]"}], "=", "t"}], TraditionalForm]]], ".\nThe optimal strategy for the opponent who wants to substitute another \ authenticated message for ", Cell[BoxData[ FormBox[ RowBox[{"(", StyleBox[ RowBox[{"m", ",", "t"}], FontVariations->{"Underline"->True}], ")"}], TraditionalForm]]], " is to find a message ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], " "}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], " ", "\[NotEqual]", StyleBox["m", FontVariations->{"Underline"->True}]}], TraditionalForm]]], ", such that in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["g", "k"], "(", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}], ")"}], "=", RowBox[{"t", "'"}]}], TraditionalForm]]], " for as many of those ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " keys as possible. This symbol ", Cell[BoxData[ FormBox[ RowBox[{"t", "'"}], TraditionalForm]]], " is the authenticator for ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], " "}], TraditionalForm]]], " that will be accepted most likely. \nIt remains to show that ", Cell[BoxData[ FormBox[ RowBox[{"t", "'"}], TraditionalForm]]], " will be accepted in at most ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", SubscriptBox["d", "H"]}], TraditionalForm]]], " cases, which implies that the probability of a successful substitution is \ at most ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"n", "-", SubscriptBox["d", "H"]}], ")"}], "/", "n"}], "=", RowBox[{"1", "-", RowBox[{ SubscriptBox["d", "H"], "/", "n"}]}]}], TraditionalForm]]], ". This assertion follows from" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"|", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"i", ",", "\[Lambda]"}], ")"}], "\[Element]", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]n"}], "}"}], "\[Times]", RowBox[{"GF", "(", "q", ")"}]}]}], "|", RowBox[{ SubscriptBox[ RowBox[{"(", FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm], ")"}], "i"], "+", "\[Lambda]"}]}], "=", RowBox[{ RowBox[{ RowBox[{ RowBox[{"t", " ", "&"}], " ", SubscriptBox[ RowBox[{"(", FormBox[ StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}], TraditionalForm], ")"}], "i"]}], "+", "\[Lambda]"}], "=", RowBox[{"t", "'"}]}]}], " ", "}"}], "|"}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"=", RowBox[{ RowBox[{"|", SubscriptBox[ RowBox[{"{", RowBox[{ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], "|", RowBox[{ FormBox[ RowBox[{"(", StyleBox["m", FontVariations->{"Underline"->True}]}], TraditionalForm], "-", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}]}]}], ")"}], "i"]}], "=", RowBox[{"t", " ", "-", RowBox[{"t", "'"}]}]}]}], " ", "}"}], "|"}], TraditionalForm]]], "\n \n \t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"n", "-", RowBox[{ SubscriptBox["d", "H"], "(", RowBox[{ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], StyleBox["-", FontVariations->{"Underline"->False}], StyleBox[ RowBox[{"m", "'"}], FontVariations->{"Underline"->True}]}], ",", RowBox[{ RowBox[{"(", RowBox[{"t", " ", "-", RowBox[{"t", "'"}]}], " ", ")"}], StyleBox["1", FontVariations->{"Underline"->True}]}]}], ")"}]}]}], TraditionalForm]]], "\n \n \t", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", RowBox[{"n", "-", SubscriptBox["d", "H"]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "because ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "-", RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"t", " ", "-", RowBox[{"t", "'"}]}], " ", ")"}], StyleBox["1", FontVariations->{"Underline"->True}]}], TraditionalForm]]], " are different words in the code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " (", Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}], TraditionalForm]]], " are in different equivalence classes)." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Example 13.9 (Part 2)\n", StyleBox["To illustrate the second part of the proof above, we continue with \ the code of ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[ButtonBox["Example 13.9", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth Hamming"], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". If Alice wants to send message 7, she finds ", FontWeight->"Plain", FontSlant->"Italic"], Cell[BoxData[ FormBox[ StyleBox["m", FontVariations->{"Underline"->True}], TraditionalForm]], FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" with the Mathematica function ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["IntegerDigits", FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"Underline"->True}], StyleBox[" from:", FontWeight->"Plain", FontSlant->"Italic"] }], "Text", CellChangeTimes->{{3.423455979980023*^9, 3.423455981667512*^9}}, FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"mes", "=", "7"}], ";"}], "\n", RowBox[{"inf", "=", RowBox[{"IntegerDigits", "[", RowBox[{"mes", ",", "2", ",", "4"}], "]"}]}], "\n", RowBox[{"m", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"inf", ".", "G"}], ",", "2"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]], "Output"], Cell["\<\ (Remember that all messages had their first coordinate equal to 0.) \ \>", "Text", FontSlant->"Italic"], Cell[TextData[{ "Suppose, that Alice and Bob have agreed upon key ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"3", ",", "1"}], ")"}], ","}], TraditionalForm]]], ". Then Alice will append the authenticator ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", RowBox[{ RowBox[{ SubscriptBox[ RowBox[{"(", StyleBox["m", FontVariations->{"Underline"->True}], ")"}], "3"], "+", "1"}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "2"}], ")"}]}]}]}], TraditionalForm]]], " to her message, therefore, Alice will send" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"i", "=", "3"}], ";", RowBox[{"lam", "=", "1"}], ";"}], "\n", RowBox[{"{", RowBox[{"mes", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"m", "[", RowBox[{"[", "i", "]"}], "]"}], "+", "lam"}], ",", "2"}], "]"}]}], "}"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"7", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "Opponent Eve, observing this codeword, can conclude that the key is in the \ set ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"i", ",", "\[Lambda]"}], ")"}], "|", RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "7"}]}], ",", RowBox[{ RowBox[{ SubscriptBox["m", "i"], "+", "\[Lambda]"}], "\[Congruent]", RowBox[{"t", " ", RowBox[{"(", RowBox[{"mod", " ", "2"}], ")"}]}]}]}], "}"}], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"(", RowBox[{"1", ",", "0"}], ")"}], ",", RowBox[{"(", RowBox[{"2", ",", "1"}], ")"}], ",", RowBox[{"(", RowBox[{"3", ",", "1"}], ")"}], ",", RowBox[{"(", RowBox[{"4", ",", "1"}], ")"}], ",", RowBox[{"(", RowBox[{"5", ",", "0"}], ")"}], ",", RowBox[{"(", RowBox[{"6", ",", "0"}], ")"}], ",", RowBox[{"(", RowBox[{"7", ",", "1"}], ")"}]}], "}"}], TraditionalForm]]], ". To verify this, we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Table", FontVariations->{"Underline"->True}], " and ", StyleBox["Mod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.423393896153491*^9, 3.423396276934353*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"t", "=", "0"}], ";", RowBox[{"T", "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"{", RowBox[{"i", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"t", "-", RowBox[{"m", "[", RowBox[{"[", "i", "]"}], "]"}]}], ",", "2"}], "]"}]}], "}"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "7"}], "}"}]}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"6", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "Suppose now that Alice wants to send message 5. The corresponding codeword \ ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["m", FontVariations->{"Underline"->True}], "'"}], TraditionalForm]]], " is given by" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"mes", "'"}], "=", "5"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"inf", "'"}], "=", RowBox[{"IntegerDigits", "[", RowBox[{ RowBox[{"mes", "'"}], ",", "2", ",", "4"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"m", "'"}], "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"inf", "'"}], ".", "G"}], ",", "2"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "If Eve chooses ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"t", "'"}], "=", "0"}], TraditionalForm]]], " as authenticator she has a probability of ", Cell[BoxData[ FormBox[ RowBox[{"4", "/", "7"}], TraditionalForm]]], " of getting her message accepted, because exactly four of the possible keys \ would lead to this authenticator. With authenticator ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"t", "'"}], "=", "1"}], TraditionalForm]]], " this probability is ", Cell[BoxData[ FormBox[ RowBox[{"3", "/", "7"}], TraditionalForm]]], ". (We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Length", FontVariations->{"Underline"->True}], " and ", StyleBox["Intersection", FontVariations->{"Underline"->True}], " to test this.) " }], "Text", CellChangeTimes->{ 3.423394407563014*^9, {3.4234737989307327`*^9, 3.423473806040062*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"t", "'"}], "=", "0"}], ";"}], "\n", RowBox[{ RowBox[{"T", "'"}], "=", RowBox[{"Table", "[", RowBox[{ RowBox[{"{", RowBox[{"i", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"t", "'"}], "-", RowBox[{ RowBox[{"m", "'"}], "[", RowBox[{"[", "i", "]"}], "]"}]}], ",", "2"}], "]"}]}], "}"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "7"}], "}"}]}], "]"}]}], "\n", RowBox[{"Length", "[", RowBox[{"Intersection", "[", RowBox[{"T", ",", RowBox[{"T", "'"}]}], "]"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"6", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "0"}], "}"}]}], "}"}]], "Output"], Cell[BoxData["4"], "Output"], 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"], "\nThe ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "-ary Reed-Solomon code of dimension ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " (see ", ButtonBox["[MacW77]", BaseStyle->"Hyperlink", ButtonData:>"RefMacW77"], ") has length ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"q", "-", "1"}]}], TraditionalForm]]], " and minimum distance ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["d", "H"], "=", RowBox[{"n", "-", "k"}]}], TraditionalForm]]], ". By multiplying each coordinate with a suitable constant, one may assume \ that ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["1", FontVariations->{"Underline"->True}], "\[Element]", "C"}], TraditionalForm]]], ". ", ButtonBox["Theorem 13.10", BaseStyle->"Hyperlink", ButtonData:>"TheoAuth EC=>A"], " gives an A-code with parameters:" }], "Example", GeneratedCell->True, CellTags->"ExamAuth RS-1"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"|", "\[ScriptCapitalM]", "|"}], "=", SuperscriptBox["q", RowBox[{"k", "-", "1"}]]}], ",", "\t", FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalK]", "|"}], "=", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "q"}]}], TraditionalForm], ",", "\t", RowBox[{ FormBox[ RowBox[{ RowBox[{"|", "\[ScriptCapitalT]", "|"}], "=", "q"}], TraditionalForm], "."}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "I"], "=", RowBox[{"1", "/", "q"}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "S"], "\[LessEqual]", RowBox[{"k", "/", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "The method explained in this section is certainly not the only way to make \ A-codes from EC-codes. It does have the property that each impersonation \ attack has the same probability of success (namely ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "q"}], TraditionalForm]]], ")." }], "Text"], Cell[TextData[{ "Since every message can have each symbol in ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalT]", "=", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], " as authenticator, it follows that the codeword set \[ScriptCapitalC] has \ cardinality ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalM]", "|", RowBox[{".", "q"}]}], TraditionalForm]]], ". This implies that ", ButtonBox["Theorem 13.2", BaseStyle->"Hyperlink", ButtonData:>"TheoAuth PI>M/C"], " holds with equality. " }], "Text"], Cell[TextData[{ "In ", ButtonBox["[JohKS93]", BaseStyle->"Hyperlink", ButtonData:>"RefJohKS93"], " the authors also show how to convert an A-code into an error-correcting \ code." }], "Text", GeneratedCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectAuth Problems"], 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 properties ", ButtonBox["PP-1,PP2,PP3", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], " in Definition 13.5 imply that a projective plane also contain four lines, \ no three of which go through the same point. " }], "Problem"], 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["Fano plane", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Fano"], " is unique (apart from a relabelling of the points and lines) ." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Compare the ", ButtonBox["Projective Plane Authentication Code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth PG AC"], " construction (see Definition 13.6) with the authentication code with ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalM]", "=", RowBox[{"\[ScriptCapitalK]", "=", RowBox[{"\[ScriptCapitalC]", "=", SubscriptBox["\[DoubleStruckCapitalZ]", "q"]}]}]}], TraditionalForm]]], " defined by the ", ButtonBox["one-time path", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vernam"], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[LongRightArrow]", "c"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"c", "\[Congruent]", RowBox[{"m", "+", RowBox[{"k", " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}]}], TraditionalForm]]], ".\nAlso, answer this question when ", Cell[BoxData[ FormBox["\[ScriptCapitalM]", TraditionalForm]]], " is a random subset of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], TraditionalForm]]], " of size ", Cell[BoxData[ FormBox[ SqrtBox["q"], TraditionalForm]]], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nCheck that the rows of the ", ButtonBox["incidence matrix", BaseStyle->"Hyperlink", ButtonData:>"DefAuth incid matr"], " in ", ButtonBox["Example 13.6", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth PG2-3"], " can be permuted in such a way that the matrix becomes a circulant (each \ row is cyclic shift to the right of the previous row)." }], "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 same technique as in ", ButtonBox["Example 13.6", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth PG2-3"], ", to determine the top row of an incidence matrix of a ", ButtonBox["projective plane", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], " of order 5.\nCycle this row around and check that it does define a \ projective plane of order 5." }], "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]]], "\nConvert the orthogonal array ", Cell[BoxData[ FormBox[ RowBox[{"OA", "(", RowBox[{"4", ",", "5", ",", "1"}], ")"}], TraditionalForm]]], " in ", ButtonBox["Example 13.7", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth OA4-5-1"], " into a projective plane of order 4." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nShow that condition ", ButtonBox["(13.11)", BaseStyle->"Hyperlink", ButtonData:>"FormAuth c+l1 in C"], " in ", ButtonBox["Theorem 13.10", BaseStyle->"Hyperlink", ButtonData:>"TheoAuth EC=>A"], " can be replaced by the requirement that ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " contains at least one codeword of ", ButtonBox["weight", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl weight"], " ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". " }], "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]]], "\nRepeat ", ButtonBox["Example 13.9", BaseStyle->"Hyperlink", ButtonData:>"ExamAuth Hamming"], " (both parts) for the ternary ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"11", ",", SuperscriptBox["3", "6"], ",", "5"}], ")"}], TraditionalForm]]], " code generated by " }], "Problem"], Cell[BoxData[ RowBox[{ RowBox[{"G", "=", RowBox[{"(", GridBox[{ {"2", "0", "1", "2", "1", "1", "0", "0", "0", "0", "0"}, {"0", "2", "0", "1", "2", "1", "1", "0", "0", "0", "0"}, {"0", "0", "2", "0", "1", "2", "1", "1", "0", "0", "0"}, {"0", "0", "0", "2", "0", "1", "2", "1", "1", "0", "0"}, {"0", "0", "0", "0", "2", "0", "1", "2", "1", "1", "0"}, {"0", "0", "0", "0", "0", "2", "0", "1", "2", "1", "1"} }], ")"}]}], ";"}]], "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tZero Knowledge Protocols" }], "Chapter", CellTags->"Chap Zero Knowledge"], Cell[TextData[{ StyleBox["Cryptographic protocols", FontSlant->"Italic"], " are exchanges of data between two or more parties following a precise \ order and format with the goal of achieving a particular security. Of course, \ the above definition is not very precise, but we have already seen some \ examples of cryptographic protocols. One is the ", ButtonBox["identity verification protocol", BaseStyle->"Hyperlink", ButtonData:>"DefBlock identity ver prot"], " in Subsection 4.1.2, another is the Diffie-Hellman ", ButtonBox["key exchange protocol", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr key exch"], " in Subsection 8.1.2 and a few others are mentioned in ", ButtonBox["Section 8.2", BaseStyle->"Hyperlink", ButtonData:>"SectDiscr Other Log Systems"], "." }], "Text", CellTags->"DefProt protocol"], Cell[TextData[{ "A ", StyleBox["zero-knowledge proof", FontSlant->"Italic"], " is a technique to convince somebody else that one has certain knowledge, \ without having to reveal even a single bit of information (or a fraction \ thereof) about that knowledge. As a consequence, the verifier nor any passive \ eavesdropper gains any information from taking part in any number of \ executions of the protocol.\nOne may think of using a zero-knowledge protocol \ in the situation that one wants to use an ATM to withdraw money from a bank \ account. Instead of having to enter a PIN-code it should be enough to \ convince the teller that one knows this PIN-code. One wants to do this in \ such a way that no information about the PIN-code is released. In the next \ section, we shall give an example of how this can be done. In Section 14.2, \ another identity verification will be presented." }], "Text", CellTags->"DefProt zero-know"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Fiat-Shamir Protocol" }], "Section", CellTags->"SectZero Zero Knowledge"], Cell[TextData[{ "As in ", ButtonBox["Subsection 4.1.2", BaseStyle->"Hyperlink", ButtonData:>"DefBlock identity ver prot"], ", we are again in the situation that a smart card wants to convince a smart \ card reader that it is genuine. A trusted party that has to issue these cards \ selects a large composite number ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", for instance ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is the product of two large primes ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ", just as in the RSA system. The number ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is a system parameter known to all parties.\nThe security of the ", StyleBox["Fiat-Shamir protocol", FontSlant->"Italic"], " ", ButtonBox["[FiaS87]", BaseStyle->"Hyperlink", ButtonData:>"RefFiaS87"], " will be based on the assumption that taking square roots modulo a large \ composite number ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is, in general, intractable. This is the same assumption that was made in \ the ", ButtonBox["Rabin variant", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Rabin"], " of the RSA system (Section 9.5). In ", ButtonBox["Theorem 9.18", BaseStyle->"Hyperlink", ButtonData:>"TheoRSA Rabin equiv compl"], ", it was shown that the problem of finding a square root modulo a composite \ number is as hard as factoring it." }], "Text", GeneratedCell->True], Cell["\<\ The trusted party computes an identity number ID for the smart card that \ should have the additional property that \ \>", "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"ID", "\[Congruent]", RowBox[{ SuperscriptBox["s", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]]], "NumberedEquation"], Cell[TextData[{ "for some integer ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ". The number ID may be computed from the name of the card holder and other \ relevant data, but a few bits should be left open for the trusted party to \ complete in order to make ID the square of an integer modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " (ID has to be a ", ButtonBox["quadratic residue", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " mod ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and mod ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "). " }], "Text", GeneratedCell->True], Cell[TextData[{ "The trusted party computes the square root ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " of ID (it can do this, because it knows the factorization of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", see ", ButtonBox["Subsection 9.5.3", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA find square root"], ") and stores ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " in a segment of the memory of the smart card that is not accessible from \ the outside world." }], "Text"], Cell["\<\ One round of the Fiat-Shamir Protocol is depicted in Figure 4.1 below.\ \>", "Text"], Cell[TextData[{ "\n", Cell[BoxData[ RowBox[{"\t\t ", GridBox[{ { StyleBox[ RowBox[{"Smart", " ", "Card"}], FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], StyleBox[ RowBox[{"Card", " ", "Reader"}], FontWeight->"Bold"]}, {" ", " ", " "}, { RowBox[{ RowBox[{"knows", StyleBox[" ", FontSlant->"Italic"], StyleBox["s", FontSlant->"Italic"]}], StyleBox[",", FontSlant->"Italic"], StyleBox["ID", FontSlant->"Italic"], StyleBox[",", FontSlant->"Italic"], StyleBox["n", FontSlant->"Italic"]}], " ", RowBox[{"knows", " ", StyleBox["n", FontSlant->"Italic"]}]}, {" ", OverscriptBox["\[LongRightArrow]", RowBox[{" ", StyleBox["ID", FontSlant->"Italic"], " "}]], " "}, { RowBox[{"generates", " ", "a", " ", "random", " ", StyleBox["r", FontSlant->"Italic"]}], " ", " "}, { RowBox[{ RowBox[{"computes", " ", StyleBox["t", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{"(", RowBox[{ SuperscriptBox["r", "2"], " ", "mod", " ", "n"}], ")"}], FontSlant->"Italic"]}], " ", " "}, {" ", OverscriptBox["\[LongRightArrow]", RowBox[{" ", StyleBox["t", FontSlant->"Italic"], " "}]], " "}, {" ", " ", RowBox[{"selects", " ", "random", " ", StyleBox["e", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "from", " ", StyleBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], FontSlant->"Italic"]}]}, {" ", OverscriptBox["\[LongLeftArrow]", RowBox[{" ", StyleBox["e", FontSlant->"Italic"], " "}]], " "}, { RowBox[{ RowBox[{"computes", " ", StyleBox["u", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{"(", RowBox[{ RowBox[{"r", ".", SuperscriptBox[ StyleBox["s", FontSlant->"Italic"], "e"]}], " ", "mod", " ", "n"}], ")"}], FontSlant->"Italic"]}], " ", " "}, {" ", OverscriptBox["\[LongRightArrow]", RowBox[{" ", StyleBox["u", FontSlant->"Italic"], " "}]], " "}, {" ", " ", RowBox[{ RowBox[{"checks", " ", "if", " ", StyleBox[ SuperscriptBox["u", "2"], FontSlant->"Italic"]}], StyleBox["\[Congruent]", FontSlant->"Italic"], StyleBox[ RowBox[{ RowBox[{"t", ".", SuperscriptBox["ID", "e"]}], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}], FontSlant->"Italic"]}]} }]}]], TextAlignment->Left, TextJustification->0], "\n\n\nFiat-Shamir identification protocol (one round)" }], "NumberedFigure", CellMargins->{{Inherited, 150}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0, CellTags->"FigProt Fiat-Shamir"], Cell[TextData[{ "The smartcard or card holder makes the identity number ID known to the card \ reader. To prove that the card was indeed issued by the trusted party, the \ card wants to convince the card reader that it knows ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ", the square root of ID modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "To this end, the card generates a random number ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", computes its square " }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"t", "=", RowBox[{"(", RowBox[{ SuperscriptBox["r", "2"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]]], "NumberedEquation"], Cell[TextData[{ "and sends that to the card reader. In the jargon of this field, ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " is called a ", StyleBox["witness", FontSlant->"Italic"], " to the card's knowledge of ", Cell[BoxData[ FormBox["r", TraditionalForm]]], "." }], "Text", CellTags->"DefProt witness"], Cell[TextData[{ "The card reader selects a random number ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], " and presents that as a ", StyleBox["challenge", FontSlant->"Italic"], " to the card." }], "Text", CellTags->"DefProt challenge"], Cell[TextData[{ "How the protocol ", StyleBox["responds", FontSlant->"Italic"], " to the challenge depends on the value of ", Cell[BoxData[ FormBox["e", TraditionalForm]]], "." }], "Text", CellTags->"DefProt response"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "0"}], TraditionalForm]]], ", the card simply sends the random number ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " back. The card reader then checks if its square is indeed equal to the \ value ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " that it received earlier from the card.\nIf ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "1"}], TraditionalForm]]], ", the card computes ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"r", ".", "s"}]}], TraditionalForm]]], ", the product of the random number ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " and the secret square root ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ", and sends ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " to the card reader. The card reader checks if ", Cell[BoxData[ FormBox[ SuperscriptBox["u", "2"], TraditionalForm]]], " is indeed equal to ", Cell[BoxData[ FormBox[ RowBox[{"t", "\[Times]", "ID"}], TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", which should be the case, since ", Cell[BoxData[ FormBox[ RowBox[{"t", "\[Congruent]", RowBox[{ SuperscriptBox["r", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"ID", "\[Congruent]", RowBox[{ SuperscriptBox["s", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "In ", ButtonBox["Figure 14.1", BaseStyle->"Hyperlink", ButtonData:>"FigProt Fiat-Shamir"], ", these two alternatives are combined in the response ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"(", RowBox[{ RowBox[{"r", ".", SuperscriptBox["s", "e"]}], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], ". The card reader checks if" }], "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["u", "2"], "\[Congruent]", RowBox[{ RowBox[{"t", ".", SuperscriptBox["ID", "e"]}], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "It may be clear that if the card can supply ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " (when ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "0"}], TraditionalForm]]], ") and at the same time can supply ", Cell[BoxData[ FormBox[ RowBox[{"r", ".", "s"}], TraditionalForm]]], " (when ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"e", "=", "1"}], ")"}], TraditionalForm]]], ", it must know the square root ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " of ID. It is also clear that if the smart card fails the test in (14.3), \ the card reader will reject the smart card." }], "Text"], Cell[TextData[{ "If an unauthorized smart card knows beforehand the value of the challenge \ ", Cell[BoxData[ FormBox["e", TraditionalForm]]], ", it can fool the card reader. This is obvious in the ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "0"}], TraditionalForm]]], " case. In this case, the smart card takes a random ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", presents ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", RowBox[{"(", RowBox[{ SuperscriptBox["r", "2"], " ", "mod", " ", "n"}], ")"}]}], TraditionalForm]]], " as witness and later presents ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " itself as response. The secret square root ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " never played a role in these calculations.\nIf the illegitimate card knows \ that the challenge will be 1, it generates a random ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", computes ", Cell[BoxData[ FormBox[ RowBox[{"t", "\[Congruent]", RowBox[{ RowBox[{ SuperscriptBox["r", "2"], "/", "ID"}], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " and presents this value of ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " to the card reader. After having received the challenge ", Cell[BoxData[ FormBox[ RowBox[{"e", "=", "1"}], TraditionalForm]]], ", the smart card will present ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "r"}], TraditionalForm]]], ". The card reader checks (see (14.3)) if ", Cell[BoxData[ FormBox[ SuperscriptBox["u", "2"], TraditionalForm]]], " is congruent to ", Cell[BoxData[ FormBox[ RowBox[{"t", ".", "ID"}], TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". This is obviously the case with ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "r"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"t", "\[Congruent]", RowBox[{ RowBox[{ SuperscriptBox["r", "2"], "/", "ID"}], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Note that the unauthorized card can not meet the challenge if he makes the \ wrong guess about the challenge. So, it will be caught with probability 1/2, \ if the smart card selects its challenge at random.\nFor this reason, smart \ card and card reader will run ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " times through the above protocol, where ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is a security parameter. A smart card that does not know the value of ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " can guess the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " random challenges with probability ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "/", "2"}], ")"}], "k"], TraditionalForm]]], ", so it will be caught with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "-", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "/", "2"}], ")"}], "k"]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "The card should not use the same random number ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " twice, because as soon as the card reader knows both ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"r", ".", "s"}], TraditionalForm]]], " (through ", Cell[BoxData[ FormBox["u", TraditionalForm]]], "), it can calculate the secret square root ", Cell[BoxData[ FormBox["s", TraditionalForm]]], "." }], "Text"], Cell["\<\ The idea of proving certain things without revealing any information about it \ is counter-intuitive, but very powerful. There is a growing field of \ applications of zero-knowledge proofs. Examples are electronic voting schemes that make it possible to cast votes in \ an anonymous way. On the other hand, the voter will be caught when attempting \ to vote twice. In these schemes, it can be checked that all votes have been \ counted in the final tally.\ \>", "Text"], Cell["\<\ Another application is a payment system that allows you to withdraw money \ from your account in digital form and spend it anonymously. Even your own \ bank can no longer trace it to you. However, if you try to double spend the \ money, your identity can be recovered.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tSchnorr's Identification Protocol" }], "Section", CellTags->"SectZero Schnorr"], Cell[TextData[{ "Schnorr's identity verification protocol ", ButtonBox["[Schn91]", BaseStyle->"Hyperlink", ButtonData:>"RefSchno91"], " is based on the difficulty of the ", ButtonBox["discrete logarithm problem", BaseStyle->"Hyperlink", ButtonData:>"TableDiscr discrep"], " (Table 8.1). As in the Diffie-Hellman scheme, all participants share some \ parameters. First of all there is a finite field ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], RowBox[{"(", "q", ")"}]}], TraditionalForm]]], " (this could be ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is prime) and a prime divisor ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], ". Let \[Omega] be a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " and take ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", SuperscriptBox["\[Omega]", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]]}], TraditionalForm]]], ". Then \[Alpha] is a primitive ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-th root of unity. This means that ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Alpha]", ",", "\[Ellipsis]", ",", SuperscriptBox["\[Alpha]", RowBox[{"p", "-", "1"}]]}], TraditionalForm]]], "are all different and that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "p"], "=", "1"}], 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"], StyleBox[" (Part 1)", FontWeight->"Bold", FontSlant->"Plain"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "104729"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", RowBox[{ RowBox[{ RowBox[{"8", "p"}], "+", "1"}], "=", "837833"}]}], TraditionalForm]]], ". Take ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", "3"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{ SuperscriptBox["\[Omega]", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], "=", RowBox[{ SuperscriptBox["\[Omega]", "8"], "=", "6561"}]}]}], TraditionalForm]]], ". To check that ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is prime and that ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", "3"}], TraditionalForm]]], " is a primitive element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], TraditionalForm]]], " (which makes \[Alpha] a primitive ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-th root of unity), we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Prime", FontVariations->{"Underline"->True}], ", ", StyleBox["PrimeQ", FontVariations->{"Underline"->True}], ", and ", StyleBox["MultiplicativeOrder", FontVariations->{"Underline"->True}], ButtonBox[", ", BaseStyle->"Link", ButtonData->"paclet:ref/MultiplicativeOrder"], " which computes the multiplicative ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " of an element." }], "Example", CellChangeTimes->{{3.423206364771059*^9, 3.42320638863135*^9}, 3.4232064922134523`*^9, 3.4233973113940983`*^9, 3.4233974459887094`*^9, { 3.4234632586587543`*^9, 3.4234632605806413`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"p", "=", RowBox[{"Prime", "[", "10000", "]"}]}], "\n", RowBox[{"q", "=", RowBox[{ RowBox[{"8", "p"}], "+", "1"}]}], "\n", RowBox[{"PrimeQ", "[", "q", "]"}], "\n", RowBox[{ RowBox[{"om", "=", "3"}], ";", RowBox[{"MultiplicativeOrder", "[", RowBox[{"om", ",", "q"}], "]"}]}], "\n", RowBox[{"al", "=", SuperscriptBox["om", "8"]}]}], "Input"], Cell[BoxData["104729"], "Output", CellChangeTimes->{3.423206399772403*^9}], Cell[BoxData["837833"], "Output", CellChangeTimes->{3.4232063998974075`*^9}], Cell[BoxData["True"], "Output", CellChangeTimes->{3.423206400006787*^9}], Cell[BoxData["837832"], "Output", CellChangeTimes->{3.4232064001317916`*^9}], Cell[BoxData["6561"], "Output", CellChangeTimes->{3.4232064002567964`*^9}] }, Open ]], Cell[TextData[{ "Each participant ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " (", Cell[BoxData[ FormBox["P", TraditionalForm]]], " for prover) selects a random secret exponent ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], ", computes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "P"], "=", SuperscriptBox["\[Alpha]", SubscriptBox["x", "P"]]}], TraditionalForm]]], ", and makes this value public. It is assumed that other participants are \ able to verify that ", Cell[BoxData[ FormBox[ SubscriptBox["y", "P"], TraditionalForm]]], " is indeed ", Cell[BoxData[ FormBox["P", TraditionalForm]]], "'s public parameter. This can be realized if a trusted authority signs ", Cell[BoxData[ FormBox[ SubscriptBox["y", "P"], TraditionalForm]]], " or if the public values are posted on a trusted \"bulletin board\". If \ someone else, say ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " for Verifier, wants to check ", Cell[BoxData[ FormBox["P", TraditionalForm]]], "'s identity ", Cell[BoxData[ FormBox[ SubscriptBox["y", "P"], TraditionalForm]]], " he does this by checking that ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " knows the corresponding ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], ". Of course, ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " does not want release the secret value of ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], " to anyone. Therefore, he uses a cryptographic protocol to convince ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " that he has knowledge of ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Example 14.1 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nProver ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " has identity number ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "P"], "=", "693"}], TraditionalForm]]], " and secret exponent ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "P"], "=", "18126"}], TraditionalForm]]], ". Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "18126"], "\[Congruent]", RowBox[{"693", " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"xP", "=", "18126"}], ";", RowBox[{"yP", "=", "693"}], ";"}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"al", ",", "xP", ",", "q"}], "]"}], "==", "yP"}]}], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output"], Cell[TextData[{ "Schnorr's identification protocol goes as follows. The verifier is \ presented with ", Cell[BoxData[ FormBox["P", TraditionalForm]]], "'s identity number ", Cell[BoxData[ FormBox[ SubscriptBox["y", "P"], TraditionalForm]]], ". Next, prover ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " generates a random exponent ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "r", "<", "p"}], TraditionalForm]]], ", computes ", Cell[BoxData[ FormBox[ RowBox[{"\[CurlyRho]", "=", SuperscriptBox["\[Alpha]", "r"]}], TraditionalForm]]], " and presents this value ", Cell[BoxData[ FormBox["\[CurlyRho]", TraditionalForm]]], " to the verifier ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " as a ", ButtonBox["witness", BaseStyle->"Hyperlink", ButtonData:>"DefProt witness"], " to his secret ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], ". The verifier selects a random number ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "s", "<", "p"}], TraditionalForm]]], ", and hands this to ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " as ", ButtonBox["challenge", BaseStyle->"Hyperlink", ButtonData:>"DefProt challenge"], ". Prover ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " ", ButtonBox["responds", BaseStyle->"Hyperlink", ButtonData:>"DefProt response"], " by computing ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"r", "+", RowBox[{"s", ".", SubscriptBox["x", RowBox[{"P", " "}]]}]}]}], TraditionalForm]]], " and gives this value to ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ". The verifier checks that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "u"], "=", RowBox[{"\[CurlyRho]", ".", SuperscriptBox[ RowBox[{"(", SubscriptBox["y", "P"], ")"}], "s"]}]}], TraditionalForm]]], ". This relation should hold, because ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "u"], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"r", "+", RowBox[{"s", ".", SubscriptBox["x", "P"]}]}]], "=", RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "r"], ".", SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", SubscriptBox["x", "P"]], ")"}], "s"]}], "=", RowBox[{"\[CurlyRho]", ".", SuperscriptBox[ RowBox[{"(", SubscriptBox["y", "P"], ")"}], "s"]}]}]}]}], TraditionalForm]]], ". This scheme is depicted in the following diagram." }], "Text"], Cell[TextData[{ "\n", Cell[BoxData[ RowBox[{"\t\t ", GridBox[{ { StyleBox["Prover", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], StyleBox["Verifier", FontWeight->"Bold"]}, {" ", " ", " "}, { RowBox[{ RowBox[{"knows", StyleBox[" ", FontSlant->"Italic"], StyleBox[ SubscriptBox["x", "P"], FontSlant->"Italic"]}], StyleBox[",", FontSlant->"Italic"], SubscriptBox[ StyleBox["y", FontSlant->"Italic"], "P"], StyleBox[",", FontSlant->"Italic"], StyleBox["p", FontSlant->"Italic"], StyleBox[",", FontSlant->"Italic"], StyleBox["q", FontSlant->"Italic"], StyleBox[",", FontSlant->"Italic"], "\[Alpha]"}], " ", RowBox[{ RowBox[{"knows", " ", StyleBox["p", FontSlant->"Italic"]}], StyleBox[",", FontSlant->"Italic"], StyleBox["q", FontSlant->"Italic"], StyleBox[",", FontSlant->"Italic"], StyleBox["\[Alpha]", FontSlant->"Italic"]}]}, {" ", OverscriptBox["\[LongRightArrow]", RowBox[{" ", StyleBox[ SubscriptBox["y", "P"], FontSlant->"Italic"], " "}]], " "}, { RowBox[{"generates", " ", "random", " ", StyleBox["r", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], StyleBox["from", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], StyleBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "P"], FontSlant->"Italic"]}], " ", " "}, { RowBox[{ RowBox[{"computes", " ", "\[Rho]"}], "=", StyleBox[ SuperscriptBox["\[Alpha]", "r"], FontSlant->"Italic"]}], " ", " "}, {" ", OverscriptBox["\[LongRightArrow]", RowBox[{" ", "\[Rho]", " "}]], " "}, {" ", " ", RowBox[{"selects", " ", "random", " ", StyleBox["s", FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "from", " ", StyleBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "P"], FontSlant->"Italic"]}]}, {" ", OverscriptBox["\[LongLeftArrow]", RowBox[{ StyleBox[ RowBox[{" ", StyleBox[" ", FontSlant->"Italic"]}]], StyleBox["s", FontSlant->"Italic"], " "}]], " "}, { RowBox[{ RowBox[{ RowBox[{"computes", " ", StyleBox["u", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{"r", "+", RowBox[{"s", ".", SubscriptBox[ StyleBox["x", FontSlant->"Italic"], "P"]}]}], FontSlant->"Italic"]}], StyleBox[" ", FontSlant->"Italic"], "\n", "\t\t\t\t\t", RowBox[{"modulo", " ", StyleBox["p", FontSlant->"Italic"]}]}], " ", " "}, {" ", OverscriptBox["\[LongRightArrow]", RowBox[{" ", StyleBox["u", FontSlant->"Italic"], " "}]], " "}, {" ", " ", RowBox[{ RowBox[{"checks", " ", "if", " ", StyleBox[ SuperscriptBox["\[Alpha]", "u"], FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{"\[Rho]", ".", SuperscriptBox[ RowBox[{"(", SubscriptBox["y", "P"], ")"}], "s"]}], FontSlant->"Italic"]}]} }]}]], TextAlignment->Left, TextJustification->0], "\n\n\nSchnorr's identification protocol" }], "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigProt Schnorr"], Cell[TextData[{ StyleBox["Example 14.1 (Part 3)", FontWeight->"Bold", FontSlant->"Plain"], "\nIn the input below, the above protocol is executed. The ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["RandomInteger", FontVariations->{"Underline"->True}], ", ", StyleBox["Mod", FontVariations->{"Underline"->True}], ", and ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " are used" }], "Text", CellChangeTimes->{ 3.423396283012517*^9, {3.4233967087183666`*^9, 3.423396714265277*^9}, { 3.423460818020054*^9, 3.4234608192075615`*^9}}, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"r", "=", RowBox[{"RandomInteger", "[", "p", "]"}]}], ";", RowBox[{"rho", "=", RowBox[{"PowerMod", "[", RowBox[{"al", ",", "r", ",", "q"}], "]"}]}], ";", RowBox[{"Print", "[", RowBox[{"\"\\"", ",", "r"}], "]"}]}], "\n", RowBox[{ RowBox[{"s", "=", RowBox[{"RandomInteger", "[", "p", "]"}]}], ";", RowBox[{"Print", "[", RowBox[{"\"\\"", ",", "s"}], "]"}]}], "\n", RowBox[{ RowBox[{"u", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "+", RowBox[{"s", " ", "xP"}]}], ",", "p"}], "]"}]}], ";", RowBox[{"Print", "[", RowBox[{"\"\\"", ",", "u"}], "]"}]}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"al", ",", "u", ",", "q"}], "]"}], "\[Equal]", RowBox[{"Mod", "[", RowBox[{ RowBox[{"rho", " ", RowBox[{"PowerMod", "[", RowBox[{"yP", ",", "s", ",", "q"}], "]"}]}], ",", "q"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"witness is \"\>", "\[InvisibleSpace]", "36431"}], SequenceForm["witness is ", 36431], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"challenge is \"\>", "\[InvisibleSpace]", "29041"}], SequenceForm["challenge is ", 29041], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"response is \"\>", "\[InvisibleSpace]", "65643"}], SequenceForm["response is ", 65643], Editable->False]], "Print"], Cell[BoxData["True"], "Output"], Cell[TextData[{ "Of course, the prover will only be able to give the right response if he \ knows ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], " satisfying ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["x", "P"]], "=", SubscriptBox["y", "P"]}], TraditionalForm]]], ". If he does not know ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], ", he can guess the correct value of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "p"}], TraditionalForm]]], ". The value of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " will be very large to make the discrete logarithm problem intractable (see \ ", ButtonBox["Subsection 8.1.1", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Log Problem"], ").\nNote that in the relation ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"r", "+", RowBox[{"s", ".", SubscriptBox["x", "P"]}]}]}], TraditionalForm]]], " only the values ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " are known to ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ". In other words, the random value ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " makes sure that no information on ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], " is leaked to ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ". This observation also shows that the prover should not use the same \ random number ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " twice. Indeed, from two relations ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "1"], "=", RowBox[{"r", "+", RowBox[{ SubscriptBox["s", "1"], ".", SubscriptBox["x", "P"]}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "2"], "=", RowBox[{"r", "+", RowBox[{ SubscriptBox["s", "2"], ".", SubscriptBox["x", "P"]}]}]}], TraditionalForm]]], " with known ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", SubscriptBox["r", "1"]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["r", "2"], TraditionalForm]]], " the verifier can easily determine ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " and the secret ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], ". One has ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "P"], "=", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["u", "1"], "-", SubscriptBox["u", "2"]}], ")"}], "/", RowBox[{"(", RowBox[{ SubscriptBox["s", "1"], "-", SubscriptBox["s", "2"]}], ")"}]}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Example 14.1 (Part 4)", FontWeight->"Bold", FontSlant->"Plain"], "\nFor the same witness, we generate a second challenge and response." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"ss", "=", RowBox[{"RandomInteger", "[", "p", "]"}]}], ";", RowBox[{"Print", "[", RowBox[{"\"\\"", ",", "ss"}], "]"}]}], "\n", RowBox[{ RowBox[{"uu", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "+", RowBox[{"ss", " ", "xP"}]}], ",", "p"}], "]"}]}], ";", RowBox[{"Print", "[", RowBox[{"\"\\"", ",", "uu"}], "]"}]}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"al", ",", "u", ",", "q"}], "]"}], "\[Equal]", RowBox[{"Mod", "[", RowBox[{ RowBox[{"rho", " ", RowBox[{"PowerMod", "[", RowBox[{"yP", ",", "s", ",", "q"}], "]"}]}], ",", "q"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"second challenge is \"\>", "\[InvisibleSpace]", "62706"}], SequenceForm["second challenge is ", 62706], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"second response is \"\>", "\[InvisibleSpace]", "21550"}], SequenceForm["second response is ", 21550], Editable->False]], "Print"], Cell[BoxData["True"], "Output"], Cell[TextData[{ "To find ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], " we compute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "P"], "=", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["u", "1"], "-", SubscriptBox["u", "2"]}], ")"}], "/", RowBox[{"(", RowBox[{ SubscriptBox["s", "1"], "-", SubscriptBox["s", "2"]}], ")"}]}]}], TraditionalForm]]], ":" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"u", "-", "uu"}], ")"}], "*", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"s", "-", "ss"}], ",", RowBox[{"-", "1"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}]], "Input"], Cell[BoxData["18126"], "Output"], Cell[TextData[{ "The value 18126 is indeed the secret exponent ", Cell[BoxData[ FormBox[ SubscriptBox["x", "P"], TraditionalForm]]], " of the prover." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectZero 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]]], "\nDuplicate Example 14.1 for ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "113."}], TraditionalForm]]], " Find a suitable value for ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "." }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tSecret Sharing Systems" }], "Chapter", CellTags->"Chap Secr"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tIntroduction" }], "Section", CellTags->"SectSecr Introduction"], Cell[TextData[{ "In this chapter we shall not introduce a new cryptosystem, but we shall \ discuss a related topic. We start with an example from ", ButtonBox["[Liu68]", BaseStyle->"Hyperlink", ButtonData:>"RefLiu68"], "." }], "Text", GeneratedCell->True], Cell[TextData[StyleBox["''Eleven scientists are working on a secret project. \ They wish to lock up the documents in a cabinet so that the cabinet can be \ opened if and only if six or more of the scientists are present. What is the \ smallest number of locks needed? What is the smallest number of keys to the \ locks each scientist must carry?''", FontColor->RGBColor[0, 0, 1]]], "DisplayFormula"], Cell[TextData[{ "Clearly, for each 5-tuple of scientists there has to be at least one lock, \ that can not be opened by them. Also each of the six remaining scientists has \ a key of that lock. More than one such lock per 5-tuple is not needed. So, ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"11"}, {"5"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], " locks are needed and each scientist carries ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"11", "-", "1"}]}, {"5"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], " keys. These numbers can be calculated with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Binomial", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234732803059144`*^9, 3.4234732816496725`*^9}}], Cell[BoxData[{ RowBox[{"Binomial", "[", RowBox[{"11", ",", "5"}], "]"}], "\n", RowBox[{"Binomial", "[", RowBox[{ RowBox[{"11", "-", "1"}], ",", "5"}], "]"}]}], "Input"], Cell[BoxData["462"], "Output"], Cell[BoxData["252"], "Output"], Cell["\<\ The solution above is of course not very practical. Similarly, the described \ situation is not very realistic. However, there exists very real situations \ where one wants to share some sensitive information among a group of people, \ in such a way that only certain privileged coalitions are able to recover the \ secret information. Examples are a masterkey of a payment system or a private \ key that one does not want to store in a single place.\ \>", "Text"], Cell[TextData[{ "In a general setting, if ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " is a privileged group of people, meaning that they should be able to \ recover the secret data, then any other group containing ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " as a subgroup, should also be privileged. Also, if ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " is not privileged then any subset of ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " should not be privileged." }], "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["access structure", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}], TraditionalForm]]], " consists of finite set ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " (of users), and two disjoint collections \[ScriptCapitalP] and \ \[ScriptCapitalN] of subsets of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " (", Cell[BoxData[ FormBox["\[ScriptCapitalP]", TraditionalForm]]], " for the ", StyleBox["privileged", FontSlant->"Italic"], " subsets and ", Cell[BoxData[ FormBox["\[ScriptCapitalN]", TraditionalForm]]], " for the ", StyleBox["non-privileged", FontSlant->"Italic"], ") with the property that \n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"P", "\[Element]", "\[ScriptCapitalP]"}], ",", " ", RowBox[{"P", "\[Subset]", "B", "\[Subset]", "U"}]}], TraditionalForm]]], "\t\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{"B", "\[Element]", "\[ScriptCapitalP]"}], TraditionalForm]]], ",\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"N", "\[Element]", "\[ScriptCapitalN]"}], ",", " ", RowBox[{"A", "\[Subset]", "N"}]}], TraditionalForm]]], "\t\t\[DoubleLongRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{"A", "\[Element]", "\[ScriptCapitalN]"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefSecret access struc"], Cell[TextData[{ "In the example above, ", Cell[BoxData[ FormBox[ RowBox[{"U", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "11"}], "}"}]}], TraditionalForm]]], ", \[ScriptCapitalP] consists of all subsets of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " of size at least 6 and \[ScriptCapitalN] of all the other subsets of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], ". It is a special case of what is generally called a threshold scheme." }], "Text"], Cell[TextData[{ "It is often convenient to list only the set of the ", StyleBox["minimal elements", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox["\[ScriptCapitalP]", TraditionalForm]]], ", denoted by ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalP]", "-"], TraditionalForm]], FontSlant->"Italic"], ", which can be obtained from ", Cell[BoxData[ FormBox["\[ScriptCapitalP]", TraditionalForm]]], " by leaving out each element of \[ScriptCapitalP] that properly contains \ another element of \[ScriptCapitalP]. Similarly, one often represents \ \[ScriptCapitalN] by the subset ", Cell[BoxData[ FormBox[ StyleBox[ SuperscriptBox["\[ScriptCapitalN]", "+"], FontSlant->"Italic"], TraditionalForm]]], " consisting of its ", StyleBox["maximal elements", FontSlant->"Italic"], ". " }], "Text", CellTags->"DefSecret minimal el"], Cell[TextData[{ "An access structure is called ", StyleBox["complete", FontSlant->"Italic"], " or ", StyleBox["perfect", FontSlant->"Italic"], " if each subset of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " is either in ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " or in ", Cell[BoxData[ FormBox["N", TraditionalForm]]], ". " }], "Text", CellTags->"DefSecret perfect SSS"], 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["S", TraditionalForm]]], " be a random variable defined on a finite set \[ScriptCapitalS]. Assume \ that ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is uniformly distributed on \[ScriptCapitalS]. \nLet ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " be a collection of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " participants, each having obtained a particular element ", Cell[BoxData[ FormBox[ SubscriptBox["S", "i"], TraditionalForm]]], " out of \[ScriptCapitalS] from some trustworthy authority. Further, let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}], TraditionalForm]]], " be an access structure.\nThen the collection ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["S", "i"], "}"}], RowBox[{"i", "\[Element]", "U"}]], TraditionalForm]]], " is called a ", StyleBox["secret sharing scheme", FontSlant->"Italic"], " for ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}], TraditionalForm]]], " if it satisfies the following two properties:\n\n", StyleBox["[SSS1]", FontWeight->"Bold"], "\t\teach privileged group ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " of participants (P\[Element]\[ScriptCapitalP]) can compute the secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ".\n", StyleBox["[SSS2]", FontWeight->"Bold"], "\t\teach non-privileged group ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " of participants (N\[Element]\[ScriptCapitalN]) can not compute any\n\t\t\ information on ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "Definition", CellTags->"DefSecret SSS"], Cell[TextData[{ "The value ", Cell[BoxData[ FormBox[ SubscriptBox["S", "i"], TraditionalForm]]], " (to be called the ", StyleBox["share ", FontSlant->"Italic"], "of ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ") should be interpreted as partial information of participant ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " on the secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". In information theoretical notation (see ", ButtonBox["Chapter 5", BaseStyle->"Hyperlink", ButtonData:>"Chap Shannon"], "), SSS1 and SSS2 can be reformulated as" }], "Text", CellTags->"DefSecret share"], Cell[TextData[{ StyleBox["\t[SSS1]\t", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ ButtonBox["H", BaseStyle->"Hyperlink", ButtonData:>"DefShann cond entropy"], RowBox[{"(", RowBox[{"S", "|", SubscriptBox[ RowBox[{"{", SubscriptBox["S", "i"], "}"}], RowBox[{"i", "\[Element]", "P"}]]}], " ", ")"}]}], "=", "0"}], TraditionalForm]]], " for any P\[Element]\[ScriptCapitalP].\n\t", StyleBox["[SSS2]", FontWeight->"Bold"], "\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"S", "|", SubscriptBox[ RowBox[{"{", SubscriptBox["S", "i"], "}"}], RowBox[{"i", "\[Element]", "N"}]]}], " ", ")"}], "=", RowBox[{"H", "(", "S", ")"}]}], TraditionalForm]]], " for any N\[Element]\[ScriptCapitalN]." }], "Text"], Cell[TextData[{ "Note that in secret sharing schemes that are not perfect, there may be \ coalitions \[ScriptCapitalC], ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalC]", "\[NotElement]", RowBox[{"\[ScriptCapitalP]", "\[Union]", "\[ScriptCapitalN]"}]}], TraditionalForm]]], ", of participants that are able to recover some information on the secret \ ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " (so, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"S", "|", SubscriptBox[ RowBox[{"{", SubscriptBox["S", "i"], "}"}], RowBox[{"i", "\[Element]", "\[ScriptCapitalC]"}]]}], " ", ")"}], "<", RowBox[{"H", "(", "S", ")"}]}], TraditionalForm]]], ") without being privileged." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThreshold Schemes" }], "Section", CellTags->"SectSecr Schemes"], Cell[TextData[{ "A ", ButtonBox["secret sharing scheme", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], " ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["S", "i"], "}"}], RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}]], TraditionalForm]]], " is called an ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", "k"}], ")"}], TraditionalForm]], FontSlant->"Italic"], StyleBox["-threshold scheme", FontSlant->"Italic"], ", if \[ScriptCapitalP] consists of all subsets of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " of cardinality ", Cell[BoxData[ FormBox[ RowBox[{"\[GreaterEqual]", "k"}], TraditionalForm]]], " and \[ScriptCapitalN] consists of all subsets of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " of cardinality ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", RowBox[{"k", "-", "1."}]}], TraditionalForm]]], " By definition, a threshold scheme is a ", ButtonBox["perfect", BaseStyle->"Hyperlink", ButtonData:>"DefSecret perfect SSS"], " secret sharing scheme. Properties SSS1 and SSS2 can be reformulated as" }], "Text", CellTags->"DefSecret Threshold"], Cell[TextData[{ StyleBox["[TS1]", FontWeight->"Bold"], " Knowledge of ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " or more different ", Cell[BoxData[ FormBox[ SubscriptBox["S", "i"], TraditionalForm]]], "'s makes ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " computable." }], "Text", CellTags->"PropThresh TS1"], Cell[TextData[{ StyleBox["[TS2]", FontWeight->"Bold"], " Knowledge of at most ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "1"}], TraditionalForm]]], " different ", Cell[BoxData[ FormBox[ SubscriptBox["S", "i"], TraditionalForm]]], "'s leaves the secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " completely undetermined, more precisely all possible values in \ \[ScriptCapitalS] are still equally likely." }], "Text", CellTags->"PropThresh TS2"], Cell[TextData[{ "Shamir describes (see ", ButtonBox["[Sham79]", BaseStyle->"Hyperlink", ButtonData:>"RefSham79"], ") the following general construction of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"k", ",", "n"}], ")"}], TraditionalForm]]], "-threshold schemes when \[ScriptCapitalS] is a finite field ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], RowBox[{"(", "q", ")"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " has to be larger than ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". Here, we shall assume that ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is a prime number, say ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "p"}], TraditionalForm]]], ", in which case \[ScriptCapitalS] is just ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], ", the set of integers modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". The generalization to ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " will be immediate." }], "Text", GeneratedCell->True], Cell[TextData[{ "This system is based on the well known fact that a line is uniquely defined \ by any two points on it, that a parabola is uniquely defined by three points \ on it, etc. In general, a polynomial of degree ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "1"}], TraditionalForm]]], " is uniquely determined by any ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " points on it." }], "Text"], Cell[TextData[{ StyleBox["Construction ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet the participants be labeled from 1 to ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ RowBox[{"S", "\[Element]", SubscriptBox["\[DoubleStruckCapitalZ]", "p"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "n"}], TraditionalForm]]], ", be the secret data. Consider the polynomial" }], "Theorem", CellTags->"ConstrThresh Shamir"], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"S", "+", RowBox[{ SubscriptBox["a", "1"], "x"}], "+", RowBox[{ SubscriptBox["a", "2"], SuperscriptBox["x", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["a", RowBox[{"k", "-", "1"}]], SuperscriptBox["x", RowBox[{"k", "-", "1"}]]}]}]}], TraditionalForm]]], "," }], "Text", CellMargins->{{42, 35}, {Inherited, Inherited}}, CellFrameLabels->{{None, Cell[ TextData[{"(15.", CounterBox["NumberedEquation"], ") "}]]}, {None, None}}, CounterIncrements->"NumberedEquation", Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormThresh Secret Function"], Cell[TextData[{ "of degree at most ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "1"}], TraditionalForm]]], ", of which the coefficients ", Cell[BoxData[ FormBox[ SubscriptBox["a", "j"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"k", "-", "1"}]}], TraditionalForm]]], ", are selected by some trustworthy authority in an independent, random way \ from ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], ". Participant ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", is given as his share ", Cell[BoxData[ FormBox[ SubscriptBox["S", "i"], TraditionalForm]]], " the pair " }], "Theorem", CounterIncrements->"None", Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", "i"], "=", RowBox[{"(", RowBox[{"i", ",", RowBox[{ RowBox[{"f", "(", "i", ")"}], " ", "mod", " ", "p"}]}], ")"}]}], TraditionalForm]]], "." }], "Text", CellMargins->{{45, 35}, {Inherited, Inherited}}, CellFrameLabels->{{None, Cell[ TextData[{"(15.", CounterBox["NumberedEquation"], ") "}]]}, {None, None}}, CounterIncrements->"NumberedEquation", Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormThresh Share"], 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[" ", FontSlant->"Plain"], StyleBox["(Part 1)", FontWeight->"Bold", FontSlant->"Plain"], "\nIn order to construct a (10,4)-threshold scheme for secret ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", "17"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "19"], TraditionalForm]]], ", we hide the secret in the polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " (note the use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Mod", FontVariations->{"Underline"->True}], ")" }], "Example", CellChangeTimes->{3.4233962958094735`*^9}], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", "f", "]"}], ";", RowBox[{ RowBox[{"f", "[", "x_", "]"}], ":=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ StyleBox["17", FontSlant->"Italic"], "+", RowBox[{"7", "x"}], "+", RowBox[{"12", SuperscriptBox["x", "2"]}], "+", RowBox[{"5", SuperscriptBox["x", "3"]}]}], ",", "19"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[TextData[{ "where the coefficients of ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "j"], TraditionalForm]]], ",", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", "3"}], TraditionalForm]]], ", are selected at random from ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "19"], TraditionalForm]]], ".\nThe values of the shares can be computed with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Table", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.4233939031066604`*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"Table", "[", RowBox[{ RowBox[{"{", RowBox[{"i", ",", RowBox[{"f", "[", "i", "]"}]}], "}"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "10"}], "}"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "5"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "15"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "8"}], "}"}], ",", RowBox[{"{", RowBox[{"6", ",", "13"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "13"}], "}"}], ",", RowBox[{"{", RowBox[{"8", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"10", ",", "17"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "To check that the values ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", "i"], ",", RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}]}], TraditionalForm]]], ", given by ", ButtonBox["(15.2)", BaseStyle->"Hyperlink", ButtonData:>"FormThresh Share"], ", form a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", "k"}], ")"}], TraditionalForm]]], "-threshold scheme, we have to check the two conditions TS1 and TS2." }], "Text"], Cell[TextData[{ StyleBox[ButtonBox["Ad TS1", BaseStyle->"Hyperlink", ButtonData:>"PropThresh TS1"], FontWeight->"Bold"], ": " }], "Text"], Cell[TextData[{ "Suppose that participants ", Cell[BoxData[ FormBox[ SubscriptBox["i", "1"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["i", "2"], TraditionalForm]]], ", \[Ellipsis], ", Cell[BoxData[ FormBox[ SubscriptBox["i", "k"], TraditionalForm]]], " combine their shares ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", SubscriptBox["i", "1"]], "=", RowBox[{"(", RowBox[{ SubscriptBox["i", "1"], ",", RowBox[{"f", "(", SubscriptBox["i", "1"], ")"}]}], ")"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", SubscriptBox["i", "2"]], "=", RowBox[{"(", RowBox[{ SubscriptBox["i", "2"], ",", RowBox[{"f", "(", SubscriptBox["i", "2"], ")"}]}], ")"}]}], TraditionalForm]]], ", \[Ellipsis], ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", SubscriptBox["i", "k"]], "=", RowBox[{"(", RowBox[{ SubscriptBox["i", "k"], ",", RowBox[{"f", "(", SubscriptBox["i", "k"], ")"}]}], ")"}]}], TraditionalForm]]], ". With the ", StyleBox["LaGrange Interpolation Formula", FontSlant->"Italic"], ", it is quite easy to determine ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ". Indeed, " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"u", "=", "1"}], "k"], RowBox[{ RowBox[{"f", "(", SubscriptBox["i", "u"], ")"}], RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{ RowBox[{"l", "=", "1"}], ",", RowBox[{"l", "\[NotEqual]", "u"}]}], "k"], FractionBox[ RowBox[{ StyleBox["x", FontSize->10], "-", SubscriptBox["i", "l"]}], RowBox[{ SubscriptBox["i", "u"], "-", SubscriptBox["i", "l"]}]]}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormThresh LaGrange"], Cell[TextData[{ "since the expression on the right hand side has degree ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "1"}], TraditionalForm]]], ", just as ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " does by (15.1), and since the right hand side takes on value ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", SubscriptBox["i", "j"]], "=", RowBox[{"f", "(", SubscriptBox["i", "j"], ")"}]}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"x", "=", SubscriptBox["i", "j"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", "k"}], TraditionalForm]]], ", just as ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " does." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Note that by ", ButtonBox["(15.1)", BaseStyle->"Hyperlink", ButtonData:>"FormThresh Secret Function"], ", the secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "0", ")"}], TraditionalForm]]], ", therefore, in the calculation of the Lagrange Interpolation Formula, one \ can take ", Cell[BoxData[ FormBox[ RowBox[{"x", "=", "0"}], TraditionalForm]]], " right from the start." }], "Text"], Cell[TextData[{ StyleBox["Example 15.1 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nSuppose that participants 1, 3, 6, and 9 want to retrieve the secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". They pool their shares ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "3"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"3", ",", "15"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"6", ",", "13"}], ")"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"9", ",", "4"}], ")"}], TraditionalForm]]], ". \nThe ", ButtonBox["LaGrange Interpolation Formula", BaseStyle->"Hyperlink", ButtonData:>"FormThresh LaGrange"], " can be performed with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["InterpolatingPolynomial", FontVariations->{"Underline"->True}], ". The function ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], " is used for the reduction modulo 19. " }], "Text", CellChangeTimes->{ 3.4233946407676315`*^9, {3.423473924852438*^9, 3.423473941477438*^9}}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InterpolatingPolynomial", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "15"}], "}"}], ",", RowBox[{"{", RowBox[{"6", ",", "13"}], "}"}], ",", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]}], "}"}], ",", "x"}], "]"}], ",", "19"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"17", "+", RowBox[{"7", " ", "x"}], "+", RowBox[{"12", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"5", " ", SuperscriptBox["x", "3"]}]}]], "Output"], Cell[TextData[{ "The value of the secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is the constant term in this expression. So, ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", "17"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[CellGroupData[{ Cell[TextData[{ StyleBox[ButtonBox["Ad TS2", BaseStyle->"Hyperlink", ButtonData:>"PropThresh TS2"], FontWeight->"Bold"], ": " }], "Text"], Cell[TextData[{ "Suppose that shares ", Cell[BoxData[ FormBox[ SubscriptBox["S", SubscriptBox["i", "1"]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["S", SubscriptBox["i", "2"]], TraditionalForm]]], ", \[Ellipsis], ", Cell[BoxData[ FormBox[ SubscriptBox["S", SubscriptBox["i", "l"]], TraditionalForm]]], ", are known for some ", Cell[BoxData[ FormBox[ RowBox[{"l", "<", "k"}], TraditionalForm]]], ". It follows from ", ButtonBox["(15.1)", BaseStyle->"Hyperlink", ButtonData:>"FormThresh Secret Function"], " and ", ButtonBox["(15.3)", BaseStyle->"Hyperlink", ButtonData:>"FormThresh LaGrange"], " that there are exactly ", Cell[BoxData[ FormBox[ SuperscriptBox["q", RowBox[{"k", "-", "l", "-", "1"}]], TraditionalForm]]], "polynomials ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "x", ")"}], TraditionalForm]]], " satisfying ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"g", "(", SubscriptBox["i", "u"], ")"}], "=", SubscriptBox["S", SubscriptBox["i", "u"]]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "u", "\[LessEqual]", "l"}], TraditionalForm]]], ", and with any fixed value for ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "0", ")"}], TraditionalForm]]], ".\nIndeed, for any fixed value of ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "0", ")"}], TraditionalForm]]], " and any fixed group of ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "l", "-", "1"}], TraditionalForm]]], "other participants and any given set of imaginary values of their shares, \ there is unique ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "x", ")"}], TraditionalForm]]], " meeting all requirements. This is a direct consequence of the ", ButtonBox["LaGrange Interpolation Formula", BaseStyle->"Hyperlink", ButtonData:>"FormThresh LaGrange"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]] }, Open ]], Cell[TextData[{ StyleBox["Example 15.1 (Part 3)", FontWeight->"Bold", FontSlant->"Plain"], "\nSuppose that participants 1, 3, and 9 attempt to retrieve secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " by pooling their shares ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "3"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"3", ",", "15"}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"9", ",", "4"}], ")"}], TraditionalForm]]], ". \nThen the secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " can still take on any value (and each of these values is still equally \ likely). Indeed, adding the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "S"}], ")"}], TraditionalForm]]], " to the above three shares leads to a unique polynomial through ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "S"}], ")"}], TraditionalForm]]], " and the three shares. This follows from the ", ButtonBox["LaGrange Interpolation", BaseStyle->"Hyperlink", ButtonData:>"FormThresh LaGrange"], " formula and can be checked as follows. " }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"Clear", "[", "x", "]"}], "\n", RowBox[{ RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"{", RowBox[{"S", ",", RowBox[{"PolynomialMod", "[", " ", RowBox[{ RowBox[{"InterpolatingPolynomial", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "S"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"1", ",", "3"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"3", ",", "15"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]}], "}"}], ",", " ", "x"}], "]"}], ",", " ", "19"}], "]"}]}], "}"}], ",", RowBox[{"{", RowBox[{"S", ",", " ", "0", ",", " ", "18"}], "}"}]}], " ", "]"}], " ", "//", " ", "TableForm"}]}], "Input", CellChangeTimes->{{3.423393915934868*^9, 3.423393920544272*^9}}], Cell[BoxData[ TagBox[GridBox[{ {"0", RowBox[{ RowBox[{"2", " ", "x"}], "+", SuperscriptBox["x", "2"]}]}, {"1", RowBox[{"1", "+", RowBox[{"9", " ", "x"}], "+", RowBox[{"5", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"7", " ", SuperscriptBox["x", "3"]}]}]}, {"2", RowBox[{"2", "+", RowBox[{"16", " ", "x"}], "+", RowBox[{"9", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"14", " ", SuperscriptBox["x", "3"]}]}]}, {"3", RowBox[{"3", "+", RowBox[{"4", " ", "x"}], "+", RowBox[{"13", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"2", " ", SuperscriptBox["x", "3"]}]}]}, {"4", RowBox[{"4", "+", RowBox[{"11", " ", "x"}], "+", RowBox[{"17", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"9", " ", SuperscriptBox["x", "3"]}]}]}, {"5", RowBox[{"5", "+", RowBox[{"18", " ", "x"}], "+", RowBox[{"2", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"16", " ", SuperscriptBox["x", "3"]}]}]}, {"6", RowBox[{"6", "+", RowBox[{"6", " ", "x"}], "+", RowBox[{"6", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"4", " ", SuperscriptBox["x", "3"]}]}]}, {"7", RowBox[{"7", "+", RowBox[{"13", " ", "x"}], "+", RowBox[{"10", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"11", " ", SuperscriptBox["x", "3"]}]}]}, {"8", RowBox[{"8", "+", "x", "+", RowBox[{"14", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"18", " ", SuperscriptBox["x", "3"]}]}]}, {"9", RowBox[{"9", "+", RowBox[{"8", " ", "x"}], "+", RowBox[{"18", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"6", " ", SuperscriptBox["x", "3"]}]}]}, {"10", RowBox[{"10", "+", RowBox[{"15", " ", "x"}], "+", RowBox[{"3", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"13", " ", SuperscriptBox["x", "3"]}]}]}, {"11", RowBox[{"11", "+", RowBox[{"3", " ", "x"}], "+", RowBox[{"7", " ", SuperscriptBox["x", "2"]}], "+", SuperscriptBox["x", "3"]}]}, {"12", RowBox[{"12", "+", RowBox[{"10", " ", "x"}], "+", RowBox[{"11", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"8", " ", SuperscriptBox["x", "3"]}]}]}, {"13", RowBox[{"13", "+", RowBox[{"17", " ", "x"}], "+", RowBox[{"15", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"15", " ", SuperscriptBox["x", "3"]}]}]}, {"14", RowBox[{"14", "+", RowBox[{"5", " ", "x"}], "+", RowBox[{"3", " ", SuperscriptBox["x", "3"]}]}]}, {"15", RowBox[{"15", "+", RowBox[{"12", " ", "x"}], "+", RowBox[{"4", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"10", " ", SuperscriptBox["x", "3"]}]}]}, {"16", RowBox[{"16", "+", RowBox[{"8", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"17", " ", SuperscriptBox["x", "3"]}]}]}, {"17", RowBox[{"17", "+", RowBox[{"7", " ", "x"}], "+", RowBox[{"12", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"5", " ", SuperscriptBox["x", "3"]}]}]}, {"18", RowBox[{"18", "+", RowBox[{"14", " ", "x"}], "+", RowBox[{"16", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"12", " ", SuperscriptBox["x", "3"]}]}]} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[2.0999999999999996`]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], TableForm[#]& ]], "Output"], Cell[TextData[{ StyleBox["Remark 1:", FontWeight->"Bold"], "\nIn the generalization to arbitrary fields ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], RowBox[{"(", "q", ")"}]}], ","}], TraditionalForm]]], " the ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " participants are labeled by different non-zero field elements ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], ","}], TraditionalForm]]], " and the share ", Cell[BoxData[ FormBox[ SubscriptBox["S", "i"], TraditionalForm]]], " of the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th participant will be the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], ",", RowBox[{"f", "(", SubscriptBox["a", "i"], ")"}]}], ")"}], TraditionalForm]]], ".\nA way to realize this is to choose a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " (generator) ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], ", label the participants from 1 to ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and give the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th participant as share the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"i", ",", RowBox[{"f", "(", SuperscriptBox["\[Alpha]", "i"], ")"}]}], ")"}], TraditionalForm]]], "." }], "Text", GeneratedCell->True, CellTags->"ConstrThresh Shamir Gen"], Cell[TextData[{ StyleBox["Remark 2:", FontWeight->"Bold"], "\nThe threshold scheme explained here assumes a trustworthy authority. It \ is also a system that can be used only once. As soon as participants have \ exchanged their shares to retrieve the secret, these shares are compromised. \ A new set of shares has to be set up for later use. In the literature one can \ find proposals that relax these conditions." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThreshold Schemes with Liars" }], "Section", CellTags->"SectSecr Schemes with liars"], Cell[TextData[{ "In ", ButtonBox["[McEl81]", BaseStyle->"Hyperlink", ButtonData:>"RefMcEl81"], " a variant of the construction above is proposed, that can handle the \ situation that some of the participants provide false information, so the \ share they provide does not have the correct value. Some participants may \ want to do this to prevent others from getting access to the secret data. It \ will turn out that it takes two extra shares to recover the secret for each \ incorrect share that is contributed. So, if ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", RowBox[{"2", "t"}]}], TraditionalForm]]], " participants pool their shares to recover the secret, at most ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " of the shares should be false. " }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Construction ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " be a secret from ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", for some prime power ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ", and let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Alpha]", "1"], ",", SubscriptBox["\[Alpha]", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["\[Alpha]", "n"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[LessEqual]", RowBox[{"q", "-", "1"}]}], TraditionalForm]]], ", be a list of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " different non-zero elements in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", e.g. ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Alpha]", "i"], "=", SuperscriptBox["\[Alpha]", "i"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", for some primitive element \[Alpha] in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ".\nConsider ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"S", "+", RowBox[{ SubscriptBox["a", "1"], "x"}], "+", RowBox[{ SubscriptBox["a", "2"], SuperscriptBox["x", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["a", RowBox[{"k", "-", "1"}]], SuperscriptBox["x", RowBox[{"k", "-", "1"}]]}]}]}], TraditionalForm]]], ", where the coefficients ", Cell[BoxData[ FormBox[ SubscriptBox["a", "j"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"k", "-", "1"}]}], TraditionalForm]]], ", are randomly selected from ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ". \nThe pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[Alpha]", "i"], ",", RowBox[{"f", "(", SubscriptBox["\[Alpha]", "i"], ")"}]}], ")"}], TraditionalForm]]], " will be the share ", Cell[BoxData[ FormBox[ SubscriptBox["S", "i"], TraditionalForm]]], " of the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th participant. Suppose that ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", RowBox[{"2", "t"}]}], TraditionalForm]]], " participants (", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "+", RowBox[{"2", "t"}]}], "\[LessEqual]", "n"}], TraditionalForm]]], ") pool their shares and assume that at most ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " of these are incorrect.\nThen each of these participants can efficiently \ compute ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " and recover secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ".\nMoreover the incorrect shares can be identified." }], "Theorem", CellTags->"ConstrThresh Shamir"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ", used to compute the shares, is of degree ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", RowBox[{"k", "-", "1"}]}], TraditionalForm]]], " and has the additional property that at least ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", "t"}], TraditionalForm]]], " of the correct shares lie on it. Could there be another polynomial, say ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "x", ")"}], TraditionalForm]]], ", with the same properties? The answer is no. Indeed, since there are only \ ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", RowBox[{"2", "t"}]}], TraditionalForm]]], " shares, any two subsets of at least ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", "t"}], TraditionalForm]]], " correct shares must have an intersection of at least ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " (honest) shares. These ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " shares lie on ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " and on ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "x", ")"}], TraditionalForm]]], ". Since both ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "x", ")"}], TraditionalForm]]], " have degree at most ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "1"}], TraditionalForm]]], ", it follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"g", "(", "x", ")"}]}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "To determine ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " the participants can try out all possible functions of degree ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", RowBox[{"k", "-", "1"}]}], TraditionalForm]]], " through ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " of the shares until a function passes through ", Cell[BoxData[ FormBox[ RowBox[{"\[GreaterEqual]", RowBox[{"k", "+", "t"}]}], TraditionalForm]]], " of them. Of course, this is not an efficient way. For an efficient \ technique, the theory of error-correcting codes is needed (as in ", ButtonBox["Chapter 11", BaseStyle->"Hyperlink", ButtonData:>"Chap McEl"], "). The shares that are defined above in fact define codewords ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"f", "(", SubscriptBox["\[Alpha]", "1"], ")"}], ",", RowBox[{"f", "(", SubscriptBox["\[Alpha]", "2"], ")"}], ",", "\[Ellipsis]", ",", RowBox[{"f", "(", SubscriptBox["\[Alpha]", "n"], ")"}]}], ")"}], TraditionalForm]]], " in a so-called shortened Reed-Solomon code with parameters ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{"n", ",", "k", ",", RowBox[{"n", "-", "k", "+", "1"}]}], "]"}], TraditionalForm]]], ". \nWe refer the reader, who is not familiar with this theory, to ", ButtonBox["[MacWS77]", BaseStyle->"Hyperlink", ButtonData:>"RefMacW77"], ", Chapter 11. Both the Berlekamp-Massey algorithm or the Euclidean \ algorithm give efficient ways to decode this code. In the context of our \ problem, where ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", RowBox[{"2", "t"}]}], TraditionalForm]]], " shares are known, one has to interpret the other ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "k", "-", RowBox[{"2", "t"}]}], TraditionalForm]]], " shares as erasures. If the number of erasures plus twice the number of \ errors is less than the minimum distance of a code, one can still correct \ these errors and erasures. Here ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"n", "-", "k", "-", RowBox[{"2", "t"}]}], ")"}], "+", RowBox[{"2.", "t"}]}], TraditionalForm]]], " is indeed less than ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "k", "+", "1"}], TraditionalForm]]], ". Efficient algorithms exists (see ", ButtonBox["[Berl68]", BaseStyle->"Hyperlink", ButtonData:>"RefBer68"], ", Section 10.4 and ", ButtonBox["[SugK76]", BaseStyle->"Hyperlink", ButtonData:>"RefSugK76"], ") to correct these errors and erasures for Reed-Solomon codes." }], "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["Remark 1", FontWeight->"Bold"], ": By taking ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "0"}], TraditionalForm]]], " Construction 15.2 reduces to Construction 15.1." }], "Text"], Cell[TextData[{ StyleBox["Remark 2", FontWeight->"Bold"], ": If only ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", RowBox[{"2", "t"}], "-", "1"}], TraditionalForm]]], " shares are available and ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " of them are incorrect, then ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is not necessarily uniquely determined. For instance, it is possible that \ of ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", RowBox[{"2", "t"}], "-", "1"}], TraditionalForm]]], " shares all of them except the first ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " lie on one polynomial of degree ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "1"}], TraditionalForm]]], ", while all these shares except the last ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " lie on another polynomial of degree ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", RowBox[{"k", "-", "1"}]}], TraditionalForm]]], " (the intersection of the shares sets has cardinality ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", "1"}], TraditionalForm]]], ").\nIn this case, there is however partial information on the secret." }], "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 ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "=", "3"}], ",", RowBox[{"t", "=", "1"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "17"}], TraditionalForm]]], ".\nOf the four shares ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"1", ",", "4"}], ")"}], ",", " ", RowBox[{"(", RowBox[{"2", ",", "1"}], ")"}], ",", " ", RowBox[{"(", RowBox[{"3", ",", "5"}], ")"}], ",", " ", RowBox[{"(", RowBox[{"4", ",", "4"}], ")"}], ","}], TraditionalForm]]], " each three define a parabola, leaving the other point as incorrect value." }], "Example"], Cell[BoxData[{ RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InterpolatingPolynomial", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "5"}], "}"}]}], "}"}], ",", "x"}], "]"}], ",", "17"}], "]"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InterpolatingPolynomial", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "4"}], "}"}]}], "}"}], ",", "x"}], "]"}], ",", "17"}], "]"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InterpolatingPolynomial", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "5"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "4"}], "}"}]}], "}"}], ",", "x"}], "]"}], ",", "17"}], "]"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"InterpolatingPolynomial", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "5"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "4"}], "}"}]}], "}"}], ",", "x"}], "]"}], ",", "17"}], "]"}]}], "Input"], Cell[BoxData[ RowBox[{"14", "+", RowBox[{"12", " ", "x"}], "+", RowBox[{"12", " ", SuperscriptBox["x", "2"]}]}]], "Output"], Cell[BoxData[ RowBox[{"10", "+", "x", "+", RowBox[{"10", " ", SuperscriptBox["x", "2"]}]}]], "Output"], Cell[BoxData[ RowBox[{"2", "+", RowBox[{"11", " ", "x"}], "+", RowBox[{"8", " ", SuperscriptBox["x", "2"]}]}]], "Output"], Cell[BoxData[ RowBox[{"12", "+", RowBox[{"8", " ", "x"}], "+", RowBox[{"6", " ", SuperscriptBox["x", "2"]}]}]], "Output"], Cell["\<\ Of the 17 possible secrets four are possible, all with equal probability.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tSecret Sharing Schemes" }], "Section", CellTags->"SectSecr SSS"], Cell[TextData[{ "Although there is a lot of literature on secret sharing schemes, there are \ also many central questions that still need to be answered. For this reason, \ we only discuss one example of a secret sharing scheme. The reader is \ referred to ", ButtonBox["[Bric89]", BaseStyle->"Hyperlink", ButtonData:>"RefBric89"], " and ", ButtonBox["[Dijk97]", BaseStyle->"Hyperlink", ButtonData:>"RefDijk97"], " to find a discussion of various generalizations of the technique explained \ here. For a general introduction to secret sharing schemes we refer to ", ButtonBox["[Stin95]", BaseStyle->"Hyperlink", ButtonData:>"RefStin95"], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "Assume that we have as ", ButtonBox["access structure", BaseStyle->"Hyperlink", ButtonData:>"DefSecret access struc"], " the set ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"U", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "3", ",", "4"}], "}"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox[ SuperscriptBox["\[ScriptCapitalP]", "-"], BaseStyle->"Hyperlink", ButtonData:>"DefSecret minimal el"], "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "4"}], "}"}]}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox[ SuperscriptBox["\[ScriptCapitalN]", "+"], BaseStyle->"Hyperlink", ButtonData:>"DefSecret minimal el"], "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "4"}], "}"}]}], "}"}]}], TraditionalForm]]], ". This means that any subset of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " containing both users 1 and 2, or users 2 and 3, or users 3 and 4 is a \ privileged set, while any other combination of users is non-privileged. \ Figure 15.1 depicts this situation." }], "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 0.005 0 0.00309017 [ [ 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 gsave .475 .01545 -66 -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 Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\306) 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 Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .175 .15451 -72 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (1) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 75.000000 12.812500 moveto (<) 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 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 .375 .15451 -72 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (2) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 75.000000 12.812500 moveto (<) 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 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 .625 .15451 -72 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (3) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 75.000000 12.812500 moveto (<) 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 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 .825 .15451 -72 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (4) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 75.000000 12.812500 moveto (<) 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 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 .1 .27812 -78 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (1) show 75.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 (,) 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 (2) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 87.000000 12.812500 moveto (<) show 93.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .25 .27812 -78 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (1) show 75.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 (,) 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 (3) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 87.000000 12.812500 moveto (<) show 93.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .4 .27812 -78 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (1) show 75.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 (,) 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 (4) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 87.000000 12.812500 moveto (<) show 93.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .55 .27812 -78 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (2) show 75.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 (,) 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 (3) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 87.000000 12.812500 moveto (<) show 93.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .7 .27812 -78 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (2) show 75.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 (,) 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 (4) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 87.000000 12.812500 moveto (<) show 93.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .85 .27812 -78 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (3) show 75.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 (,) 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 (4) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 87.000000 12.812500 moveto (<) show 93.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .175 .41717 -84 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (1) show 75.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 (,) 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 (2) show 87.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 (,) show 93.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 (3) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 99.000000 12.812500 moveto (<) show 105.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .375 .41717 -84 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (1) show 75.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 (,) 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 (2) show 87.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 (,) show 93.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 (4) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 99.000000 12.812500 moveto (<) show 105.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .575 .41717 -84 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (1) show 75.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 (,) 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 (3) show 87.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 (,) show 93.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 (4) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 99.000000 12.812500 moveto (<) show 105.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .775 .41717 -84 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (2) show 75.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 (,) 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 (3) show 87.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 (,) show 93.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 (4) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 99.000000 12.812500 moveto (<) show 105.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .475 .55623 -90 -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 Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (8) 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 (1) show 75.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 (,) 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 (2) show 87.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 (,) show 93.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 (3) show 99.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 (,) show 105.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 (4) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 111.000000 12.812500 moveto (<) show 117.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 Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .5 .58713 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .2 .44807 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .4 .44807 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .6 .44807 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .8 .44807 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\346) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .125 .30902 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.500008 0.000000 setrgbcolor (\\346) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .275 .30902 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (\\347) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .425 .30902 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (\\347) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .575 .30902 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.500008 0.000000 setrgbcolor (\\346) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .725 .30902 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (\\347) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .875 .30902 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.500008 0.000000 setrgbcolor (\\346) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .2 .16996 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\347) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .4 .16996 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\347) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .6 .16996 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\347) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .8 .16996 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\347) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore gsave .5 .0309 -66.6563 -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 Math3Mono %%IncludeFont: Math3Mono /Math3Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\347) show 70.312500 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 Math3Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math3Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math3Mono %%+ font Courier grestore .5 Mabswid .5 .0309 m .2 .16996 L s .5 .0309 m .4 .16996 L s .5 .0309 m .6 .16996 L s .5 .0309 m .8 .16996 L s .2 .16996 m .275 .30902 L s .2 .16996 m .425 .30902 L s .4 .16996 m .725 .30902 L s .6 .16996 m .275 .30902 L s .8 .16996 m .425 .30902 L s .8 .16996 m .725 .30902 L s .5 .58713 m .2 .44807 L s .5 .58713 m .4 .44807 L s .5 .58713 m .6 .44807 L s .5 .58713 m .8 .44807 L s .2 .44807 m .125 .30902 L s .2 .44807 m .575 .30902 L s .4 .44807 m .125 .30902 L s .6 .44807 m .875 .30902 L s .8 .44807 m .575 .30902 L s .8 .44807 m .875 .30902 L s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{275.313, 170.063}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 AYinDkw=\ \>"], ImageRangeCache->{{{0, 411.938}, {254.063, 0}} -> {-0.208523, -0.001, \ 0.729784, 1.18082}}], Cell["\<\ An Access Structure with Four Participants \[FilledSmallCircle] means privileged, \[EmptySmallCircle] means \ non-privileged\ \>", "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "The ", ButtonBox["secret sharing scheme", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], " for this access structure will be set up in two steps. In the first step \ we want to share one bit (or byte or string) of information among the four \ participants. " }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " be a secret bit that we want to share among the participants of our access \ structure ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}], TraditionalForm]]], ". The trusted authority selects two random bits ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " and gives the following shares to the participants: " }], "Text"], Cell[TextData[Cell[BoxData[GridBox[{ {"participant", "share"}, {"1", StyleBox["a", FontSlant->"Italic"]}, {"2", StyleBox[ RowBox[{ RowBox[{"s", "+", "a"}], ",", "b"}], FontSlant->"Italic"]}, {"3", StyleBox[ RowBox[{"s", "+", "b"}], FontSlant->"Italic"]}, {"4", StyleBox["b", FontSlant->"Italic"]} }]]]], "DisplayFormula", CellMargins->{{Inherited, 38}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0, CellTags->"FigSecret One Bit"], Cell["A Secret Sharing Scheme with One Secret Bit", "NumberedFigure", CellMargins->{{Inherited, 49}, {Inherited, Inherited}}, PageBreakAbove->False, TextAlignment->Center, TextJustification->0], Cell[TextData[{ "The ", Cell[BoxData[ FormBox["+", TraditionalForm]]], " sign stands for addition modulo 2. The reader may easily verify that this \ scheme meets requirements ", ButtonBox["SSS1", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], " and ", ButtonBox["SSS2", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], ". For instance, participants 1 and 2 can compute ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"a", "+", RowBox[{"(", RowBox[{"s", "+", "a"}], ")"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " comes from 1 and ", Cell[BoxData[ FormBox[ RowBox[{"s", "+", "a"}], TraditionalForm]]], " from 2." }], "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"], "\nFor instance, if the Trusted Authority wants to share secret ", Cell[BoxData[ FormBox[ RowBox[{"s", "=", "1"}], TraditionalForm]]], " among the four participants, he may choose ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", "0"}], TraditionalForm]]], ". The shares of ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "2", ",", "3", ",", "4"}], TraditionalForm]]], " will be 1, resp. (0,0), 1, 0.\nParticipants 2 and 4 can not recover ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ", because they only know ", Cell[BoxData[ FormBox[ RowBox[{"s", "+", "a"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " (twice). Participants 3 and 4 can recover the secret ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " by adding their shares ", Cell[BoxData[ FormBox[ RowBox[{"s", "+", "b"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], ": ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "+", "0"}], "=", "1"}], TraditionalForm]]], ". " }], "Example"], Cell[TextData[{ "We see that in the scheme of ", ButtonBox["Figure 15.2", BaseStyle->"Hyperlink", ButtonData:>"FigSecret One Bit"], " participant 2 has to store twice as many bits as is the size of the \ secret. This ratio can be improved by superimposing a permuted version of the \ scheme to itself. " }], "Text"], Cell[TextData[{ "Hence, now we consider a secret consisting of two bits ", Cell[BoxData[ FormBox[ SubscriptBox["s", "1"], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubscriptBox["s", "2"], TraditionalForm]]], ". The trusted authority selects four random bits ", Cell[BoxData[ FormBox[ RowBox[{"a", ",", "b", ",", "c"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ". He gives the following shares to the participants: " }], "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"participant", "share"}, {"1", StyleBox[ RowBox[{"a", ",", "c"}], FontSlant->"Italic"]}, {"2", StyleBox[ RowBox[{ RowBox[{ SubscriptBox["s", "1"], "+", "a"}], ",", RowBox[{ SubscriptBox["s", "2"], "+", "c"}], ",", "b"}], FontSlant->"Italic"]}, {"3", StyleBox[ RowBox[{ RowBox[{ SubscriptBox["s", "1"], "+", "b"}], ",", RowBox[{ SubscriptBox["s", "2"], "+", "d"}], ",", "c"}], FontSlant->"Italic"]}, {"4", StyleBox[ RowBox[{"b", ",", "d"}], FontSlant->"Italic"]} }]]], "\n\nA Secret Sharing Scheme with Two Secret Bits" }], "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "In this scheme, the ratio between the size of the secret and the size of \ the longest share (this ratio is called ", StyleBox["information rate", FontSlant->"Italic"], ") is ", Cell[BoxData[ FormBox[ RowBox[{"2", "/", "3"}], TraditionalForm]]], ". It can be shown that such a ratio is always at most 1. Secret sharing \ schemes that have an efficiency rate equal to 1 are called ", StyleBox["ideal", FontSlant->"Italic"], ". " }], "Text", CellTags->"DefSecret ideal SSS"], Cell["\<\ There is a general matrix description of constructions of the above type. We \ shall explain it again for the example above.\ \>", "Text"], Cell[TextData[{ "The secret sharing system is described by the matrix ", Cell[BoxData[ FormBox[ SubscriptBox["G", StyleBox["TA", FontSlant->"Italic"]], TraditionalForm]]], " of the trusted authority and the matrices ", Cell[BoxData[ FormBox[ SubscriptBox["G", "i"], TraditionalForm]]], " of the participants ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "2", ",", "3"}], TraditionalForm]]], ", and 4. The first two columns are labeled by the secret bits (", Cell[BoxData[ FormBox[ SubscriptBox["s", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["s", "2"], TraditionalForm]]], ") and the next four columns by the random variables (", Cell[BoxData[ FormBox[ RowBox[{"a", ",", "b", ",", "c"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["d", TraditionalForm]]], "). Each row of ", Cell[BoxData[ FormBox[ SubscriptBox["G", "i"], TraditionalForm]]], " represents one entry of the share of participant ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " (expressed in terms of the secret bits and the random bits). The same \ holds for ", Cell[BoxData[ FormBox[ SubscriptBox["G", "TA"], TraditionalForm]]], ", where we view ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"]}], TraditionalForm]]], " as his share." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"GTA", "=", RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "0", "0"}, {"0", "1", "0", "0", "0", "0"} }], ")"}]}], ";", RowBox[{"Gp1", "=", RowBox[{"(", GridBox[{ {"0", "0", "1", "0", "0", "0"}, {"0", "0", "0", "0", "1", "0"} }], ")"}]}], ";", RowBox[{"Gp2", "=", RowBox[{"(", GridBox[{ {"1", "0", "1", "0", "0", "0"}, {"0", "1", "0", "0", "1", "0"}, {"0", "0", "0", "1", "0", "0"} }], ")"}]}], ";", RowBox[{"Gp3", "=", RowBox[{"(", GridBox[{ {"1", "0", "0", "1", "0", "0"}, {"0", "1", "0", "0", "0", "1"}, {"0", "0", "0", "0", "1", "0"} }], ")"}]}], ";", RowBox[{"Gp4", "=", RowBox[{"(", GridBox[{ {"0", "0", "0", "1", "0", "0"}, {"0", "0", "0", "0", "0", "1"} }], ")"}]}], ";"}]], "Input", GeneratedCell->True], Cell[TextData[{ "To see that these matrices indeed represent the secret sharing scheme we \ multiply them with the vector ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "a", ",", "b", ",", "c", ",", "d"}], ")"}], TraditionalForm]]], "." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", RowBox[{"a", ",", "b", ",", "c", ",", "d", ",", "s1", ",", "s2"}], "]"}], ";"}], "\n", RowBox[{ RowBox[{"vec", "=", RowBox[{"{", RowBox[{"s1", ",", "s2", ",", "a", ",", "b", ",", "c", ",", "d"}], "}"}]}], ";"}], "\n", RowBox[{"GTA", ".", "vec"}], "\n", RowBox[{"Gp1", ".", "vec"}], "\n", RowBox[{"Gp2", ".", "vec"}], "\n", RowBox[{"Gp3", ".", "vec"}], "\n", RowBox[{"Gp4", ".", "vec"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"s1", ",", "s2"}], "}"}]], "Output", CellChangeTimes->{3.4214702817318597`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"a", ",", "c"}], "}"}]], "Output", CellChangeTimes->{3.4214702818099847`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"a", "+", "s1"}], ",", RowBox[{"c", "+", "s2"}], ",", "b"}], "}"}]], "Output", CellChangeTimes->{3.4214702819037347`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"b", "+", "s1"}], ",", RowBox[{"d", "+", "s2"}], ",", "c"}], "}"}]], "Output", CellChangeTimes->{3.4214702819818597`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"b", ",", "d"}], "}"}]], "Output", CellChangeTimes->{3.4214702820599847`*^9}] }, Open ]], Cell["\<\ We get the secret of the trusted authority and the shares of all the \ participants, so this is exactly the scheme that we had above. \ \>", "Text"], Cell["\<\ The properties of a secret sharing scheme can now be translated as follows. \ \>", "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nFull rank matrices ", Cell[BoxData[ FormBox[ SubscriptBox["G", StyleBox["TA", FontSlant->"Italic"]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["G", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[Element]", "U"}], TraditionalForm]]], ", describe a ", ButtonBox["secret sharing scheme", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], " for ", ButtonBox["access structure", BaseStyle->"Hyperlink", ButtonData:>"DefSecret access struc"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}], TraditionalForm]]], " if and only if\ni) for each privileged set ", Cell[BoxData[ FormBox[ RowBox[{"A", "\[Element]", "\[ScriptCapitalP]"}], TraditionalForm]]], " each row of ", Cell[BoxData[ FormBox[ SubscriptBox["G", StyleBox["TA", FontSlant->"Italic"]], TraditionalForm]]], " lies in the linear span of the rows of the matrices ", Cell[BoxData[ FormBox[ SubscriptBox["G", "i"], TraditionalForm]]], ",", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"i", "\[Element]", "A"}]}], TraditionalForm]]], ",\nii) for each non-privileged set ", Cell[BoxData[ FormBox[ RowBox[{"B", "\[Element]", "\[ScriptCapitalN]"}], TraditionalForm]]], " no row of ", Cell[BoxData[ FormBox[ SubscriptBox["G", StyleBox["TA", FontSlant->"Italic"]], TraditionalForm]]], " lies in the linear span of the rows of the matrices ", Cell[BoxData[ FormBox[ SubscriptBox["G", "i"], TraditionalForm]]], ",", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"i", "\[Element]", "B"}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoSecret Matrix descr"], Cell[TextData[{ "To check that the first row of ", Cell[BoxData[ FormBox[ SubscriptBox["G", StyleBox["TA", FontSlant->"Italic"]], TraditionalForm]]], " lies in the linear span of the rows of ", Cell[BoxData[ FormBox[ SubscriptBox["G", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["G", "2"], TraditionalForm]]], " we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Join", FontVariations->{"Underline"->True}], ", ", StyleBox["MatrixForm", FontVariations->{"Underline"->True}], ", ", StyleBox["LinearSolve", FontVariations->{"Underline"->True}], ", and ", StyleBox["Transpose", FontVariations->{"Underline"->True}], ". " }], "Text", CellChangeTimes->{{3.4214703605287347`*^9, 3.4214703758568597`*^9}, 3.4233952430371113`*^9, 3.423396788156375*^9, 3.423397161471264*^9, { 3.4234721487049217`*^9, 3.423472154454959*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"u", "=", RowBox[{"GTA", "[", RowBox[{"[", "1", "]"}], "]"}]}], "\n", RowBox[{ RowBox[{"M", "=", RowBox[{"Join", "[", RowBox[{"Gp1", ",", "Gp2"}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "M", "]"}]}], "\n", RowBox[{"LinearSolve", "[", RowBox[{ RowBox[{"Transpose", "[", "M", "]"}], ",", "u", ",", " ", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", CellChangeTimes->{{3.4214703452318597`*^9, 3.4214703482943597`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output", CellChangeTimes->{3.4214703847162347`*^9}], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"0", "0", "1", "0", "0", "0"}, {"0", "0", "0", "0", "1", "0"}, {"1", "0", "1", "0", "0", "0"}, {"0", "1", "0", "0", "1", "0"}, {"0", "0", "0", "1", "0", "0"} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.7]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], Function[BoxForm`e$, MatrixForm[BoxForm`e$]]]], "Output", CellChangeTimes->{3.4214703848099847`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}]], "Output", CellChangeTimes->{3.4214703849193597`*^9}] }, Open ]], Cell[TextData[{ "This shows that the first row of ", Cell[BoxData[ FormBox[ SubscriptBox["G", StyleBox["TA", FontSlant->"Italic"]], TraditionalForm]]], " is the modulo-2 sum of the first row of ", Cell[BoxData[ FormBox[ SubscriptBox["G", "1"], TraditionalForm]]], " and the first row of ", Cell[BoxData[ FormBox[ SubscriptBox["G", "2"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Similarly, one can verify that ", Cell[BoxData[ FormBox[ SubscriptBox["s", "2"], TraditionalForm]]], " can not be recovered by participants 1 and 3 in this way: the 2-nd row \ (and also the 1-st) of ", Cell[BoxData[ FormBox[ SubscriptBox["G", StyleBox["TA", FontSlant->"Italic"]], TraditionalForm]]], " is not in the linear span of the rows of ", Cell[BoxData[ FormBox[ SubscriptBox["G", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["G", "3"], TraditionalForm]]], ". " }], "Text"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"u", "=", RowBox[{"GTA", "[", RowBox[{"[", "2", "]"}], "]"}]}], "\n", RowBox[{ RowBox[{"M", "=", RowBox[{"Join", "[", RowBox[{"Gp1", ",", "Gp3"}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "M", "]"}]}], "\n", RowBox[{"LinearSolve", "[", RowBox[{ RowBox[{"Transpose", "[", "M", "]"}], ",", "u", ",", " ", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", CellChangeTimes->{{3.4214704189037347`*^9, 3.4214704225131097`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output", CellChangeTimes->{3.4214704235756097`*^9}], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"0", "0", "1", "0", "0", "0"}, {"0", "0", "0", "0", "1", "0"}, {"1", "0", "0", "1", "0", "0"}, {"0", "1", "0", "0", "0", "1"}, {"0", "0", "0", "0", "1", "0"} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.7]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], Function[BoxForm`e$, MatrixForm[BoxForm`e$]]]], "Output", CellChangeTimes->{3.4214704236693597`*^9}], Cell[BoxData[ RowBox[{ RowBox[{"LinearSolve", "::", "\<\"nosol\"\>"}], ":", " ", "\<\"Linear equation encountered that has no solution. \ \\!\\(\\*ButtonBox[\\\"\[RightSkeleton]\\\", ButtonStyle->\\\"Link\\\", \ ButtonFrame->None, ButtonData:>\\\"paclet:ref/message/LinearSolve/nosol\\\", \ ButtonNote -> \\\"LinearSolve::nosol\\\"]\\)\"\>"}]], "Message", CellChangeTimes->{3.4214704237943597`*^9}], Cell[BoxData[ RowBox[{"LinearSolve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"Modulus", "\[Rule]", "2"}]}], "]"}]], "Output", CellChangeTimes->{3.4214704239193597`*^9}] }, Open ]], Cell[TextData[{ "We conclude this section by remarking that it is not so much a problem to \ make a ", ButtonBox["perfect", BaseStyle->"Hyperlink", ButtonData:>"DefSecret perfect SSS"], " secret sharing scheme for a particular access structure, as it is to make \ an efficient one, i.e. with high ", ButtonBox["information rate", BaseStyle->"Hyperlink", ButtonData:>"DefSecret ideal SSS"], ". Indeed, an inefficient secret sharing scheme for a particular access \ structure", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}]}], TraditionalForm]]], " goes as follows. Let ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " be the secret to be shared. For each ", Cell[BoxData[ FormBox[ RowBox[{"A", "\[Element]", SuperscriptBox["\[ScriptCapitalP]", "-"]}], TraditionalForm]]], ", select random bits ", Cell[BoxData[ FormBox[ SubsuperscriptBox["a", "i", RowBox[{"(", "A", ")"}]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]"}], "|", "A", "|", " "}], TraditionalForm]]], ", satisfying the binary congruence relation: " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"|", "A", "|"}]], SubsuperscriptBox["a", "i", RowBox[{"(", "A", ")"}]]}], "\[Congruent]", RowBox[{"s", " ", RowBox[{"(", RowBox[{"mod", " ", "2"}], ")"}]}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"A", "\[Element]", SuperscriptBox["\[ScriptCapitalP]", "-"]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", "A"}], TraditionalForm]]], ", then participant ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " gets one of these ", Cell[BoxData[ FormBox[ SubsuperscriptBox["a", "i", RowBox[{"(", "A", ")"}]], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "In the example of ", Cell[BoxData[ FormBox[ RowBox[{"U", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "3", ",", "4"}], "}"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[ScriptCapitalP]", "-"], "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "4"}], "}"}]}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[ScriptCapitalN]", "+"], "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "4"}], "}"}]}], "}"}]}], TraditionalForm]]], " we get in this way as share for secret ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ":" }], "Text"], Cell[TextData[Cell[BoxData[GridBox[{ {"participant", "share"}, {"1", StyleBox[ SubsuperscriptBox["a", "1", RowBox[{"{", RowBox[{"1", ",", "2"}], "}"}]], FontSlant->"Italic"]}, {"2", StyleBox[ RowBox[{ RowBox[{ SubsuperscriptBox["a", "1", RowBox[{"{", RowBox[{"1", ",", "2"}], "}"}]], "+", "s"}], ",", SubsuperscriptBox["a", "1", RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}]]}], FontSlant->"Italic"]}, {"3", StyleBox[ RowBox[{ RowBox[{ SubsuperscriptBox["a", "1", RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}]], "+", "s"}], ",", SubsuperscriptBox["a", "1", RowBox[{"{", RowBox[{"3", ",", "4"}], "}"}]]}], FontSlant->"Italic"]}, {"4", StyleBox[ RowBox[{ SubsuperscriptBox["a", "1", RowBox[{"{", RowBox[{"3", ",", "4"}], "}"}]], "+", "s"}], FontSlant->"Italic"]} }]]]], "Text", TextAlignment->Center, TextJustification->0], Cell["A more compact way to denote this secret sharing scheme is ", "Text"], Cell[TextData[Cell[BoxData[GridBox[{ {"participant", "share"}, {"1", StyleBox["a", FontSlant->"Italic"]}, {"2", StyleBox[ RowBox[{ RowBox[{"a", "+", "s"}], ",", "b"}], FontSlant->"Italic"]}, {"3", StyleBox[ RowBox[{ RowBox[{"b", "+", "s"}], ",", "c"}], FontSlant->"Italic"]}, {"4", StyleBox[ RowBox[{"c", "+", "s"}], FontSlant->"Italic"]} }]]]], "Text", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "This scheme has ", ButtonBox["efficiency rate", BaseStyle->"Hyperlink", ButtonData:>"DefSecret ideal SSS"], " 1/2 and uses three random variables, as opposed to the two random \ variables in the scheme of ", ButtonBox["Figure 15.2", BaseStyle->"Hyperlink", ButtonData:>"FigSecret One Bit"], "." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tVisual Secret Sharing Schemes" }], "Section", CellTags->"SectSecr visual"], Cell[TextData[{ "In ", StyleBox["visual secret sharing schemes", FontSlant->"Italic"], " the secret to be shared consists of an image consisting of black and white \ (or of colored) pixels. Here we shall only discuss the black and white case, \ where \"white\" should be understood as \"transparent\". For instance, the \ number 3 can be depicted as follows." }], "Text", CellTags->"DefSecret Visual SSS"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .83333 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.15873 0.0576342 0.151172 [ [.5 .01984 -5.59375 -12.5625 ] [.5 .01984 5.59375 0 ] [ 0 0 0 0 ] [ 1 .83333 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .02381 .66232 m .02381 .81349 L .18254 .81349 L .18254 .66232 L F .18254 .66232 m .18254 .81349 L .34127 .81349 L .34127 .66232 L F .34127 .66232 m .34127 .81349 L .5 .81349 L .5 .66232 L F .5 .66232 m .5 .81349 L .65873 .81349 L .65873 .66232 L F .65873 .66232 m .65873 .81349 L .81746 .81349 L .81746 .66232 L F .81746 .66232 m .81746 .81349 L .97619 .81349 L .97619 .66232 L F 1 g .02381 .51115 m .02381 .66232 L .18254 .66232 L .18254 .51115 L F .18254 .51115 m .18254 .66232 L .34127 .66232 L .34127 .51115 L F .34127 .51115 m .34127 .66232 L .5 .66232 L .5 .51115 L F .5 .51115 m .5 .66232 L .65873 .66232 L .65873 .51115 L F 0 g .65873 .51115 m .65873 .66232 L .81746 .66232 L .81746 .51115 L F .81746 .51115 m .81746 .66232 L .97619 .66232 L .97619 .51115 L F 1 g .02381 .35998 m .02381 .51115 L .18254 .51115 L .18254 .35998 L F .18254 .35998 m .18254 .51115 L .34127 .51115 L .34127 .35998 L F 0 g .34127 .35998 m .34127 .51115 L .5 .51115 L .5 .35998 L F .5 .35998 m .5 .51115 L .65873 .51115 L .65873 .35998 L F .65873 .35998 m .65873 .51115 L .81746 .51115 L .81746 .35998 L F .81746 .35998 m .81746 .51115 L .97619 .51115 L .97619 .35998 L F 1 g .02381 .20881 m .02381 .35998 L .18254 .35998 L .18254 .20881 L F .18254 .20881 m .18254 .35998 L .34127 .35998 L .34127 .20881 L F .34127 .20881 m .34127 .35998 L .5 .35998 L .5 .20881 L F .5 .20881 m .5 .35998 L .65873 .35998 L .65873 .20881 L F 0 g .65873 .20881 m .65873 .35998 L .81746 .35998 L .81746 .20881 L F .81746 .20881 m .81746 .35998 L .97619 .35998 L .97619 .20881 L F .02381 .05763 m .02381 .20881 L .18254 .20881 L .18254 .05763 L F .18254 .05763 m .18254 .20881 L .34127 .20881 L .34127 .05763 L F .34127 .05763 m .34127 .20881 L .5 .20881 L .5 .05763 L F .5 .05763 m .5 .20881 L .65873 .20881 L .65873 .05763 L F .65873 .05763 m .65873 .20881 L .81746 .20881 L .81746 .05763 L F .81746 .05763 m .81746 .20881 L .97619 .20881 L .97619 .05763 L F .5 Mabswid .02381 .05763 m .02381 .81349 L s .18254 .05763 m .18254 .81349 L s .34127 .05763 m .34127 .81349 L s .5 .05763 m .5 .81349 L s .65873 .05763 m .65873 .81349 L s .81746 .05763 m .81746 .81349 L s .97619 .05763 m .97619 .81349 L s .02381 .05763 m .97619 .05763 L s .02381 .20881 m .97619 .20881 L s .02381 .35998 m .97619 .35998 L s .02381 .51115 m .97619 .51115 L s .02381 .66232 m .97619 .66232 L s .02381 .81349 m .97619 .81349 L s gsave .5 .01984 -66.5938 -16.5625 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 (3) 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 0 0 m 1 0 L 1 .83333 L 0 .83333 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{89.25, 74.25}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJzzTSzJSM1NLMlMTlRwL0osyMhMLlZwyy8CCjEzMjAwtAJxvgIDiP0fyIQS rQz///8HSRJLOYAoFpBeR4iAPZhiZgAbB2SBMBMWMTuIclcsUrYEpVxwG+gE opiQHIRHLXmW28NtYMZtNNhyZiRnEBGWvCAqBxQRPKMCxAswMP+HhD8YMPD/ J06MD5c61VELRi0YtWDUglELhqQFZFcQHqMaRzWOaqS5xtEW3KgFoxaMWjBq wagFWC0YLCMLQ0IAdQyJgREABWxfgQ==\ \>"], ImageRangeCache->{{{0, 132.875}, {110.375, 0}} -> {-0.719984, -1.35789, \ 0.0839884, 0.0881875}}], Cell[TextData[{ "The shares consist of transparencies of the same shape also with black and \ white pixels. The idea of a visual ", ButtonBox["secret sharing scheme", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], " for an ", ButtonBox["access structure", BaseStyle->"Hyperlink", ButtonData:>"DefSecret access struc"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}], TraditionalForm]]], " is that privileged subsets of participants should be able to determine \ the secret by putting their transparencies on top of each other, while \ non-privileged subsets should obtain no information on the secret from their \ shares. " }], "Text"], Cell[TextData[{ "A visual secret sharing scheme can not be realized in a straightforward \ way. As soon as a pixel in a particular share is black, the corresponding \ pixel in the secret will also be black. To solve this problem, each pixel in \ the secret and in the shares will be subdivided in ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " subpixels, where ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is called the ", StyleBox["expansion factor", FontSlant->"Italic"], " of the scheme. The assumption will be that two ", StyleBox["visual threshold values", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{ "0", "\[LessEqual]", "\[Alpha]", "<", "\[Beta]", "\[LessEqual]", "1"}], TraditionalForm]]], "exist such that:" }], "Text", CellTags->"DefSecret Expansion factor"], Cell[TextData[{ "\[FilledSmallCircle] if at most ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", ".", "m"}], TraditionalForm]]], " subpixels of a pixel are black, the pixel will be interpreted by the human \ eye as white," }], "Text"], Cell[TextData[{ "\[FilledSmallCircle] if at least ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", ".", "m"}], TraditionalForm]]], " subpixels of a pixel are black, the pixel will be interpreted as black." }], "Text"], Cell[TextData[{ "If the number of black subpixels lies strictly between ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", ".", "m"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", ".", "m"}], TraditionalForm]]], ", we assume that the human eye will not decide. The difference \[Beta]-\ \[Alpha] is an indication for the level of contrast that is still present in \ an image if all pixels meet one of the above two requirements. There is \ biological evidence supporting the assumption that it is the relative \ difference in light intensity that is of importance to the human eye. See ", ButtonBox["[VerT97]", BaseStyle->"Hyperlink", ButtonData:>"RefVerT97"], " for a longer discussion." }], "Text", GeneratedCell->True], Cell[TextData[{ "In the context of visual secret sharing schemes, we have additional \ problems to face. For instance, if the shares of a non-privileged set are put \ on top of each other and a pixel contains more than ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", ".", "m"}], TraditionalForm]]], " black subpixels, we know that the secret will be black at that place. Of \ course, such situations have to be avoided." }], "Text"], Cell["\<\ It should be clear that once we have a visual secret sharing scheme for one \ pixel, we can use it for the other pixels too, creating in this way a visual \ secret sharing scheme for the entire secret. \ \>", "Text"], Cell[TextData[{ "Here, we shall only explain a visual secret sharing scheme for a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", "2"}], ")"}], TraditionalForm]]], "-", ButtonBox["threshold scheme", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Threshold"], ". This means that any two participants should be able to recover the \ secret, while a single person should have no information at all about even \ one pixel. Before we do so, we describe the simple case where there are just \ two participants. We make the expansion factor ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "2"}], TraditionalForm]]], ". Let us call the following two subdivisions of a pixel L and R (for left \ black resp. right black):" }], "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .2381 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.47619 0.00566893 0.47619 [ [ 0 0 0 0 ] [ 1 .2381 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 .2381 L 0 .2381 L closepath clip newpath % Start of sub-graphic p 0.0238095 0.00566893 0.477324 0.232426 MathSubStart %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.47619 0.107143 0.380952 [ [.5 .0119 -8 -16.25 ] [.5 .0119 8 0 ] [ 0 0 0 0 ] [ 1 .5 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .02381 .10714 m .02381 .4881 L .5 .4881 L .5 .10714 L F 1 g .5 .10714 m .5 .4881 L .97619 .4881 L .97619 .10714 L F 0 g .5 Mabswid .02381 .10714 m .02381 .4881 L s .5 .10714 m .5 .4881 L s .97619 .10714 m .97619 .4881 L s .02381 .10714 m .97619 .10714 L s .02381 .4881 m .97619 .4881 L s gsave .5 .0119 -69 -20.25 Mabsadd m 1 1 Mabs scale currentpoint translate 0 24.25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 20.250000 moveto 464.000000 20.250000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 20.250000 lineto closepath clip newpath 63.000000 16.500000 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 16.500000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 20.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (L) show 75.000000 16.500000 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 0 0 m 1 0 L 1 .5 L 0 .5 L closepath clip newpath MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.522676 0.00566893 0.97619 0.232426 MathSubStart %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.47619 0.107143 0.380952 [ [.5 .0119 -8 -16.25 ] [.5 .0119 8 0 ] [ 0 0 0 0 ] [ 1 .5 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 1 g .02381 .10714 m .02381 .4881 L .5 .4881 L .5 .10714 L F 0 g .5 .10714 m .5 .4881 L .97619 .4881 L .97619 .10714 L F .5 Mabswid .02381 .10714 m .02381 .4881 L s .5 .10714 m .5 .4881 L s .97619 .10714 m .97619 .4881 L s .02381 .10714 m .97619 .10714 L s .02381 .4881 m .97619 .4881 L s gsave .5 .0119 -69 -20.25 Mabsadd m 1 1 Mabs scale currentpoint translate 0 24.25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 20.250000 moveto 464.000000 20.250000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 20.250000 lineto closepath clip newpath 63.000000 16.500000 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 16.500000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 20.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (R) show 75.000000 16.500000 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 0 0 m 1 0 L 1 .5 L 0 .5 L closepath clip newpath MathSubEnd P % End of sub-graphic % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{192.625, 45.75}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJzzTSzJSM1NLMlMTlRwL0osyMhMLlZwyy8CCjEzMjAwKjAwMLgoMIDY/4FM KPEfiP4rggiQCPXZjiCKH2RVPYjFCmJxgFjMIJYjRJErmAKLgFkgzI5FrB6L GAcWMSoYi02dE+XGsoFIJpCIC5UMQxNzptxYVixiVHAtC9zrbrgN68QixgzX 6E5AIztIxIM008l2Fomhj80IEhPZsDaCCsGJJ+GCSwROkEQriMWFlJpoUeop gSh/UAlrD2chS2mABNT+g537H9m5tgxwsf9QwKDyH6Zj1IhRI0aNGDVi1IhR I0aNGJRGYK/0iWkzMDACAHSk8/4=\ \>"], ImageRangeCache->{{{0, 287.938}, {67.625, 0}} -> {-0.0644959, -0.0119073, \ 0.0110909, 0.0110909}, {{8.75, 137.5}, {66, 1.625}} -> {-0.873866, -1.08285, \ 0.0384383, 0.0480479}, {{150.438, 279.188}, {66, 1.625}} -> {-4.50468, \ -1.08285, 0.0384383, 0.0480479}}], Cell[TextData[{ "It is clear that L and R put atop each other gives a black pixel, while \ both L+L and R+R are still half white and half black. Therefore, we can make \ a construction with threshold values ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"1", "/", "2"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", "1"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Construction ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nTo share a white pixel, the trusted authority gives with equal \ probability either to both participants L or to both participants R.\nTo \ share a black pixel, the trusted authority gives with equal probability to \ one participant L and to the other R.\nThis gives a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"2", ",", "2"}], ")"}], TraditionalForm]]], "-visual threshold scheme with expansion factor ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "2"}], TraditionalForm]]], " and threshold values ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"1", "/", "2"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", "1"}], TraditionalForm]]], "." }], "Theorem"], Cell["\<\ Below we give an example of possible shares that participants 1 and 2 have \ for the secret number 3 above.\ \>", "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .39683 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.47619 0.00944822 0.47619 [ [ 0 0 0 0 ] [ 1 .39683 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 .39683 L 0 .39683 L closepath clip newpath % Start of sub-graphic p 0.0238095 0.00944822 0.477324 0.387377 MathSubStart %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.15873 0.0576342 0.151172 [ [.5 .01984 -27.1563 -12.5625 ] [.5 .01984 27.1563 0 ] [ 0 0 0 0 ] [ 1 .83333 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 1 g .02381 .66232 m .02381 .81349 L .18254 .81349 L .18254 .66232 L F 0 g .18254 .66232 m .18254 .81349 L .34127 .81349 L .34127 .66232 L F .34127 .66232 m .34127 .81349 L .5 .81349 L .5 .66232 L F 1 g .5 .66232 m .5 .81349 L .65873 .81349 L .65873 .66232 L F 0 g .65873 .66232 m .65873 .81349 L .81746 .81349 L .81746 .66232 L F 1 g .81746 .66232 m .81746 .81349 L .97619 .81349 L .97619 .66232 L F .02381 .51115 m .02381 .66232 L .18254 .66232 L .18254 .51115 L F 0 g .18254 .51115 m .18254 .66232 L .34127 .66232 L .34127 .51115 L F 1 g .34127 .51115 m .34127 .66232 L .5 .66232 L .5 .51115 L F 0 g .5 .51115 m .5 .66232 L .65873 .66232 L .65873 .51115 L F 1 g .65873 .51115 m .65873 .66232 L .81746 .66232 L .81746 .51115 L F 0 g .81746 .51115 m .81746 .66232 L .97619 .66232 L .97619 .51115 L F 1 g .02381 .35998 m .02381 .51115 L .18254 .51115 L .18254 .35998 L F 0 g .18254 .35998 m .18254 .51115 L .34127 .51115 L .34127 .35998 L F .34127 .35998 m .34127 .51115 L .5 .51115 L .5 .35998 L F 1 g .5 .35998 m .5 .51115 L .65873 .51115 L .65873 .35998 L F 0 g .65873 .35998 m .65873 .51115 L .81746 .51115 L .81746 .35998 L F 1 g .81746 .35998 m .81746 .51115 L .97619 .51115 L .97619 .35998 L F 0 g .02381 .20881 m .02381 .35998 L .18254 .35998 L .18254 .20881 L F 1 g .18254 .20881 m .18254 .35998 L .34127 .35998 L .34127 .20881 L F 0 g .34127 .20881 m .34127 .35998 L .5 .35998 L .5 .20881 L F 1 g .5 .20881 m .5 .35998 L .65873 .35998 L .65873 .20881 L F .65873 .20881 m .65873 .35998 L .81746 .35998 L .81746 .20881 L F 0 g .81746 .20881 m .81746 .35998 L .97619 .35998 L .97619 .20881 L F .02381 .05763 m .02381 .20881 L .18254 .20881 L .18254 .05763 L F 1 g .18254 .05763 m .18254 .20881 L .34127 .20881 L .34127 .05763 L F .34127 .05763 m .34127 .20881 L .5 .20881 L .5 .05763 L F 0 g .5 .05763 m .5 .20881 L .65873 .20881 L .65873 .05763 L F 1 g .65873 .05763 m .65873 .20881 L .81746 .20881 L .81746 .05763 L F 0 g .81746 .05763 m .81746 .20881 L .97619 .20881 L .97619 .05763 L F .5 Mabswid .02381 .05763 m .02381 .81349 L s .18254 .05763 m .18254 .81349 L s .34127 .05763 m .34127 .81349 L s .5 .05763 m .5 .81349 L s .65873 .05763 m .65873 .81349 L s .81746 .05763 m .81746 .81349 L s .97619 .05763 m .97619 .81349 L s .02381 .05763 m .97619 .05763 L s .02381 .20881 m .97619 .20881 L s .02381 .35998 m .97619 .35998 L s .02381 .51115 m .97619 .51115 L s .02381 .66232 m .97619 .66232 L s .02381 .81349 m .97619 .81349 L s gsave .5 .01984 -88.1563 -16.5625 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 (Share) show 106.125000 12.812500 moveto (1) show 113.312500 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 0 0 m 1 0 L 1 .83333 L 0 .83333 L closepath clip newpath MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.522676 0.00944822 0.97619 0.387377 MathSubStart %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.15873 0.0576342 0.151172 [ [.5 .01984 -27.1563 -12.5625 ] [.5 .01984 27.1563 0 ] [ 0 0 0 0 ] [ 1 .83333 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .02381 .66232 m .02381 .81349 L .18254 .81349 L .18254 .66232 L F 1 g .18254 .66232 m .18254 .81349 L .34127 .81349 L .34127 .66232 L F .34127 .66232 m .34127 .81349 L .5 .81349 L .5 .66232 L F 0 g .5 .66232 m .5 .81349 L .65873 .81349 L .65873 .66232 L F 1 g .65873 .66232 m .65873 .81349 L .81746 .81349 L .81746 .66232 L F 0 g .81746 .66232 m .81746 .81349 L .97619 .81349 L .97619 .66232 L F 1 g .02381 .51115 m .02381 .66232 L .18254 .66232 L .18254 .51115 L F 0 g .18254 .51115 m .18254 .66232 L .34127 .66232 L .34127 .51115 L F 1 g .34127 .51115 m .34127 .66232 L .5 .66232 L .5 .51115 L F 0 g .5 .51115 m .5 .66232 L .65873 .66232 L .65873 .51115 L F .65873 .51115 m .65873 .66232 L .81746 .66232 L .81746 .51115 L F 1 g .81746 .51115 m .81746 .66232 L .97619 .66232 L .97619 .51115 L F .02381 .35998 m .02381 .51115 L .18254 .51115 L .18254 .35998 L F 0 g .18254 .35998 m .18254 .51115 L .34127 .51115 L .34127 .35998 L F 1 g .34127 .35998 m .34127 .51115 L .5 .51115 L .5 .35998 L F 0 g .5 .35998 m .5 .51115 L .65873 .51115 L .65873 .35998 L F 1 g .65873 .35998 m .65873 .51115 L .81746 .51115 L .81746 .35998 L F 0 g .81746 .35998 m .81746 .51115 L .97619 .51115 L .97619 .35998 L F .02381 .20881 m .02381 .35998 L .18254 .35998 L .18254 .20881 L F 1 g .18254 .20881 m .18254 .35998 L .34127 .35998 L .34127 .20881 L F 0 g .34127 .20881 m .34127 .35998 L .5 .35998 L .5 .20881 L F 1 g .5 .20881 m .5 .35998 L .65873 .35998 L .65873 .20881 L F 0 g .65873 .20881 m .65873 .35998 L .81746 .35998 L .81746 .20881 L F 1 g .81746 .20881 m .81746 .35998 L .97619 .35998 L .97619 .20881 L F .02381 .05763 m .02381 .20881 L .18254 .20881 L .18254 .05763 L F 0 g .18254 .05763 m .18254 .20881 L .34127 .20881 L .34127 .05763 L F .34127 .05763 m .34127 .20881 L .5 .20881 L .5 .05763 L F 1 g .5 .05763 m .5 .20881 L .65873 .20881 L .65873 .05763 L F 0 g .65873 .05763 m .65873 .20881 L .81746 .20881 L .81746 .05763 L F 1 g .81746 .05763 m .81746 .20881 L .97619 .20881 L .97619 .05763 L F 0 g .5 Mabswid .02381 .05763 m .02381 .81349 L s .18254 .05763 m .18254 .81349 L s .34127 .05763 m .34127 .81349 L s .5 .05763 m .5 .81349 L s .65873 .05763 m .65873 .81349 L s .81746 .05763 m .81746 .81349 L s .97619 .05763 m .97619 .81349 L s .02381 .05763 m .97619 .05763 L s .02381 .20881 m .97619 .20881 L s .02381 .35998 m .97619 .35998 L s .02381 .51115 m .97619 .51115 L s .02381 .66232 m .97619 .66232 L s .02381 .81349 m .97619 .81349 L s gsave .5 .01984 -88.1563 -16.5625 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 (Share) show 106.125000 12.812500 moveto (2) show 113.312500 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 0 0 m 1 0 L 1 .83333 L 0 .83333 L closepath clip newpath MathSubEnd P % End of sub-graphic % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{218, 86.375}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztms1OwkAUhYdCC5oY5HfNxhBcgCj+PIG48QUkJDbECAujQVbufPLKTNvb Uu+QKQRSyGlMOb0z3O/c6XQ6IT67i+nbh7uYTdzWcO5+TWeT79bj53wZyueE yA2FEL8tIbW3lMHJW/55T/IkI/vTXfWRF74J5UVY8mTLSxXPkypIVRAUFOGh rhypHKlsqcpSFaV62RnjTKqSVFexcqzoyxHUvzKLWbpY5DrRWjTMXGZio4x7 PmViBSbW5WdUGsPb9ONiDhNr6m5Bhj1XmdjAH+5BhmxyQ+tmyF+Nnodg8G4o wE1oLcrRPVIKqtajCtP6ujPaOdPa90tUC6Nq4UaEg5Z0/ZR1btXgyuFWunGG vPx7YZykvjsm01Mefsxe6Re2cSzubo4y6JOb473YsG5gzbcR3lq1DbCpXoum j02tNd1Y7QPeYJKueQtGr2NuNO8MK1mfpW/4SAQ2e1SLiHZbuvGKVstE53Ga LNeGMzSYSQ8EvSf1TuqWyH7arfbC6vX1I923STVjTQ0ZqHnKquc7VYeoeGFr nVRbaPpdUpZkPiq9DiiggAIKKKCAHj7UaFOhdVZd9ZPwuEnpQAEFFFBAAQXU flFr9gLcTqNDOZu67Be67zYZZw1AAQUUUEABBfRIoCk3FYlMBj94RC46ugrq gAIKKKCAAgro4UN39EtF5NagKkABBRRQQAEF9Aig/KZim3/bjGuR+wNJIZSJ \ \>"], ImageRangeCache->{{{0, 326}, {128.563, 0}} -> {-0.0565777, -0.0198454, \ 0.00972312, 0.00972312}, {{8.75, 155.625}, {125.5, 3.0625}} -> {-1.06602, \ -1.38798, 0.0742088, 0.0779189}, {{170.375, 317.25}, {125.5, 3.0625}} -> \ {-9.06201, -1.38798, 0.0742088, 0.0779189}}], Cell["\<\ The reader can verify this by making transparencies of these two shares and \ putting them on top of each other.\ \>", "Text"], Cell[TextData[{ "There are many constructions known of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", "k"}], ")"}], TraditionalForm]]], "-visual threshold schemes. We shall describe a general construction for ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "2"}], TraditionalForm]]], ". Each particular implementation of the construction will lead to its own \ values for the ", ButtonBox["expansion factor", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Expansion factor"], " ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and the ", ButtonBox["threshold values", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Expansion factor"], " \[Alpha] and \[Beta]. It makes use of two ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Times]", "m"}], TraditionalForm]]], " matrices, ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], ", that will be used to distribute shares among the ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " participants for a white resp. black pixel. These matrices are further \ characterized by two values ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " and \[Lambda] and have to satisfy the following properties:" }], "Text"], Cell[TextData[{ StyleBox["VTS1:\t", FontWeight->"Bold"], "Matrix ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " consists of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " identical copies of row ", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox[ OverscriptBox[ RowBox[{"11", "\[Ellipsis]1"}], "\[OverBrace]"], "r"], OverscriptBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]00"}], "\[OverBrace]"], RowBox[{"m", "-", "r"}]]}], TraditionalForm]]], "." }], "Text", CellTags->"PropSecret VTS1"], Cell[TextData[{ StyleBox["VTS2:", FontWeight->"Bold"], "\tAll row sums in ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " are equal to ", Cell[BoxData[ FormBox["r", TraditionalForm]]], "." }], "Text", CellTags->"PropSecret VTS2"], Cell[TextData[{ StyleBox["VTS3:", FontWeight->"Bold"], "\tEvery pair of rows in ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " has inner product \[Lambda]." }], "Text", CellTags->"PropSecret VTS3"], Cell[TextData[{ "The numbers ", Cell[BoxData[ FormBox[ RowBox[{"m", ",", "\[Alpha]", ",", "\[Beta]", ",", "r"}], TraditionalForm]]], ", and \[Lambda] will be related. They can not take on any value." }], "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"], "\nTake ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "4"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "6"}], TraditionalForm]]], ". Let the matrices ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " be given by " }], "Example", CellTags->"ExamSecret Visual n=4"], Cell[BoxData[ RowBox[{ RowBox[{"MW", "=", RowBox[{"(", GridBox[{ {"1", "1", "1", "0", "0", "0"}, {"1", "1", "1", "0", "0", "0"}, {"1", "1", "1", "0", "0", "0"}, {"1", "1", "1", "0", "0", "0"} }], ")"}]}], ";", RowBox[{"MB", "=", RowBox[{"(", GridBox[{ {"1", "1", "1", "0", "0", "0"}, {"1", "0", "0", "1", "1", "0"}, {"0", "1", "0", "1", "0", "1"}, {"0", "0", "1", "0", "1", "1"} }], ")"}]}], ";"}]], "Input", GeneratedCell->True], Cell[TextData[{ "Note that ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " satisfy properties VTS1-VTS3 for ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", "3"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "=", "1"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "The matrices ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " define two classes of ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Times]", "m"}], TraditionalForm]]], " matrices:" }], "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{ SubscriptBox["\[ScriptCapitalM]", "W"], "=", "{"}], TraditionalForm], RowBox[{ SubscriptBox["M", "W"], ".", "P"}]}], "|", " ", RowBox[{"P", " ", "is", " ", StyleBox["a", FontSlant->"Plain"], " ", "m", "\[Times]", "m", " ", "permutation", " ", "matrix"}]}], "}"}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{ SubscriptBox["\[ScriptCapitalM]", "B"], "=", "{"}], TraditionalForm], RowBox[{ SubscriptBox["M", "B"], ".", "P"}]}], "|", " ", RowBox[{"P", " ", "is", " ", StyleBox["a", FontSlant->"Plain"], " ", "m", "\[Times]", "m", " ", "permutation", " ", "matrix"}]}], "}"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "To distribute the shares for a particular pixel, the trusted authority \ takes either ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], ", depending on whether the pixel is white or black, permutes the columns in \ a random way and gives the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th row to participant ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ".\nParticipant ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " makes the ", Cell[BoxData[ FormBox["j", TraditionalForm]]], "-th subpixel white or black, depending on whether the ", Cell[BoxData[ FormBox["j", TraditionalForm]]], "-th coordinate of his share is 0 or 1. " }], "Text"], Cell[TextData[{ StyleBox["Example 15.4 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nSuppose that the pixel that needs to be shared is black. The trusted \ authority selects a random permutation ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " with the ", StyleBox["Mathematica", FontSlant->"Italic"], " package ", StyleBox["Combinatorica", FontSlant->"Italic", FontVariations->{"Underline"->True}], " and the function ", StyleBox["RandomPermutation", FontSlant->"Italic", FontVariations->{"Underline"->True}], " as follows" }], "Text", CellChangeTimes->{{3.4214705145131097`*^9, 3.4214705193724847`*^9}, { 3.423472769271394*^9, 3.4234727700526485`*^9}, {3.4234728273811407`*^9, 3.4234728281623955`*^9}}, FontSlant->"Italic"], Cell["<< Combinatorica`", "Input", CellChangeTimes->{3.4214704641693597`*^9}, CellTags->"S5.23.1"], Cell[BoxData[ RowBox[{"RP", "=", RowBox[{"RandomPermutation", "[", "6", "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"3", ",", "6", ",", "4", ",", "2", ",", "1", ",", "5"}], "}"}]], "Output", CellChangeTimes->{3.4232989186690507`*^9}], Cell[TextData[{ "This gives rise to the following permutation matrix (we use the functions \ ", StyleBox["Table", FontVariations->{"Underline"->True}], ", ", StyleBox["Do", FontVariations->{"Underline"->True}], ", and ", StyleBox["MatrixForm", FontVariations->{"Underline"->True}], "):" }], "Text", CellChangeTimes->{3.423392313330861*^9, 3.423393926325559*^9, 3.42339716712755*^9}, FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"P", "=", RowBox[{"Table", "[", RowBox[{"0", ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"j", ",", "1", ",", "6"}], "}"}]}], "]"}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"P", "[", RowBox[{"[", RowBox[{"j", ",", RowBox[{"RP", "[", RowBox[{"[", "j", "]"}], "]"}]}], "]"}], "]"}], "=", "1"}], ",", RowBox[{"{", RowBox[{"j", ",", "1", ",", "6"}], "}"}]}], "]"}], ";", RowBox[{"MatrixForm", "[", "P", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"0", "0", "1", "0", "0", "0"}, {"0", "0", "0", "0", "0", "1"}, {"0", "0", "0", "1", "0", "0"}, {"0", "1", "0", "0", "0", "0"}, {"1", "0", "0", "0", "0", "0"}, {"0", "0", "0", "0", "1", "0"} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.7]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], Function[BoxForm`e$, MatrixForm[BoxForm`e$]]]], "Output", CellChangeTimes->{3.423298932700391*^9}], Cell[TextData[{ "Multiplying ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " on the right with ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " gives the matrix" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"PMB", "=", RowBox[{"MB", ".", "P"}]}], ";", RowBox[{"MatrixForm", "[", "PMB", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"0", "0", "1", "1", "0", "1"}, {"1", "1", "1", "0", "0", "0"}, {"0", "1", "0", "0", "1", "1"}, {"1", "0", "0", "1", "1", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "Putting the six subpixels in a ", Cell[BoxData[ FormBox[ RowBox[{"3", "\[Times]", "2"}], TraditionalForm]]], " array in ", "rowwise", " order, we get the following four shares for this black pixel: " }], "Text", FontSlant->"Italic"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .34884 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.00830565 0.238095 [ [ 0 0 0 0 ] [ 1 .34884 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 .34884 L 0 .34884 L closepath clip newpath % Start of sub-graphic p 0.0238095 0.00830565 0.245293 0.340532 MathSubStart %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.47619 0.145604 0.43956 [ [.5 .03571 -27.1563 -12.5625 ] [.5 .03571 27.1563 0 ] [ 0 0 0 0 ] [ 1 1.5 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 1 g .02381 1.02473 m .02381 1.46429 L .5 1.46429 L .5 1.02473 L F .5 1.02473 m .5 1.46429 L .97619 1.46429 L .97619 1.02473 L F 0 g .02381 .58516 m .02381 1.02473 L .5 1.02473 L .5 .58516 L F .5 .58516 m .5 1.02473 L .97619 1.02473 L .97619 .58516 L F 1 g .02381 .1456 m .02381 .58516 L .5 .58516 L .5 .1456 L F 0 g .5 .1456 m .5 .58516 L .97619 .58516 L .97619 .1456 L F .5 Mabswid .02381 .1456 m .02381 1.46429 L s .5 .1456 m .5 1.46429 L s .97619 .1456 m .97619 1.46429 L s .02381 .1456 m .97619 .1456 L s .02381 .58516 m .97619 .58516 L s .02381 1.02473 m .97619 1.02473 L s .02381 1.46429 m .97619 1.46429 L s gsave .5 .03571 -88.1563 -16.5625 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 (Share) show 106.125000 12.812500 moveto (1) show 113.312500 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 0 0 m 1 0 L 1 1.5 L 0 1.5 L closepath clip newpath MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.267442 0.00830565 0.488926 0.340532 MathSubStart %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.47619 0.145604 0.43956 [ [.5 .03571 -27.1563 -12.5625 ] [.5 .03571 27.1563 0 ] [ 0 0 0 0 ] [ 1 1.5 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .02381 1.02473 m .02381 1.46429 L .5 1.46429 L .5 1.02473 L F .5 1.02473 m .5 1.46429 L .97619 1.46429 L .97619 1.02473 L F .02381 .58516 m .02381 1.02473 L .5 1.02473 L .5 .58516 L F 1 g .5 .58516 m .5 1.02473 L .97619 1.02473 L .97619 .58516 L F .02381 .1456 m .02381 .58516 L .5 .58516 L .5 .1456 L F .5 .1456 m .5 .58516 L .97619 .58516 L .97619 .1456 L F 0 g .5 Mabswid .02381 .1456 m .02381 1.46429 L s .5 .1456 m .5 1.46429 L s .97619 .1456 m .97619 1.46429 L s .02381 .1456 m .97619 .1456 L s .02381 .58516 m .97619 .58516 L s .02381 1.02473 m .97619 1.02473 L s .02381 1.46429 m .97619 1.46429 L s gsave .5 .03571 -88.1563 -16.5625 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 (Share) show 106.125000 12.812500 moveto (2) show 113.312500 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 0 0 m 1 0 L 1 1.5 L 0 1.5 L closepath clip newpath MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.511074 0.00830565 0.732558 0.340532 MathSubStart %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.47619 0.145604 0.43956 [ [.5 .03571 -27.1563 -12.5625 ] [.5 .03571 27.1563 0 ] [ 0 0 0 0 ] [ 1 1.5 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 1 g .02381 1.02473 m .02381 1.46429 L .5 1.46429 L .5 1.02473 L F 0 g .5 1.02473 m .5 1.46429 L .97619 1.46429 L .97619 1.02473 L F 1 g .02381 .58516 m .02381 1.02473 L .5 1.02473 L .5 .58516 L F .5 .58516 m .5 1.02473 L .97619 1.02473 L .97619 .58516 L F 0 g .02381 .1456 m .02381 .58516 L .5 .58516 L .5 .1456 L F .5 .1456 m .5 .58516 L .97619 .58516 L .97619 .1456 L F .5 Mabswid .02381 .1456 m .02381 1.46429 L s .5 .1456 m .5 1.46429 L s .97619 .1456 m .97619 1.46429 L s .02381 .1456 m .97619 .1456 L s .02381 .58516 m .97619 .58516 L s .02381 1.02473 m .97619 1.02473 L s .02381 1.46429 m .97619 1.46429 L s gsave .5 .03571 -88.1563 -16.5625 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 (Share) show 106.125000 12.812500 moveto (3) show 113.312500 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 0 0 m 1 0 L 1 1.5 L 0 1.5 L closepath clip newpath MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.754707 0.00830565 0.97619 0.340532 MathSubStart %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.47619 0.145604 0.43956 [ [.5 .03571 -27.1563 -12.5625 ] [.5 .03571 27.1563 0 ] [ 0 0 0 0 ] [ 1 1.5 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .02381 1.02473 m .02381 1.46429 L .5 1.46429 L .5 1.02473 L F 1 g .5 1.02473 m .5 1.46429 L .97619 1.46429 L .97619 1.02473 L F .02381 .58516 m .02381 1.02473 L .5 1.02473 L .5 .58516 L F 0 g .5 .58516 m .5 1.02473 L .97619 1.02473 L .97619 .58516 L F .02381 .1456 m .02381 .58516 L .5 .58516 L .5 .1456 L F 1 g .5 .1456 m .5 .58516 L .97619 .58516 L .97619 .1456 L F 0 g .5 Mabswid .02381 .1456 m .02381 1.46429 L s .5 .1456 m .5 1.46429 L s .97619 .1456 m .97619 1.46429 L s .02381 .1456 m .97619 .1456 L s .02381 .58516 m .97619 .58516 L s .02381 1.02473 m .97619 1.02473 L s .02381 1.46429 m .97619 1.46429 L s gsave .5 .03571 -88.1563 -16.5625 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 (Share) show 106.125000 12.812500 moveto (4) show 113.312500 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 0 0 m 1 0 L 1 1.5 L 0 1.5 L closepath clip newpath MathSubEnd P % End of sub-graphic % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{311.25, 108.5}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztnM9OwkAQxhdKUaMC/omRoAkejCISjUaNL6An73okxkQPRqM+kY8kD4TM tG5bMttsC9jVfA1Zpl+3M7/dTodtD9z0Px4fnvsfT/f99vVb//Xx6f69ffXy NpK8klKlL6XUZ1uRPRyZYTMcfYYDakj5PbvFX54KIJhFlanxaZd1T1sVsipK i+pn470qWVWyfLLqZM2R1ZlZjBpZ87ON0dCduzOLsao7b8UuSzk6OQoa7Nlp ZZMWUY8dnbP0XBe0A8eZFwWtImh7jo9jyTLavuPjWBG0Viz9c8JN0k/SqoK2 YUp/h5nXBK3nOHNT0PYcZ940p/WOQ5hSCh87xLdOLdeYU4eopISUbqJCb3Je dIULibaeRumnzhiK1ydSceegvOKSyvfRP4lmrJUziVazTIywimzTFx+RMkAC mTf14+FIv9fSEKU132FBLA1B6xY5L3xGryCCZW79hMaposJsiT9QLGTOY5si RZuXgmF7EQ8c5FwVtH1w5uasWaZrDsQAR4W3Dj9R+3rcZX17+vqoVOnzruQz B5fWYHmXt38reJCqlYTT9KsfPXNKKXVueRnTvZwImvENQSbPl1PxcpY6a1t6 dlX0xsl0BU91oLHOh5m9WFSNTj406WgmV+NpEZutXR3lQlvnSYujnCX7eUnt UluhW45bwHvcuM2PTrc02maqFdS+nxI4DOaIN9WhtkfSpumoWdPTzyXmTnth f12h3wpAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEID8fZCou9FaE7sbvW9M OgLj3AAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAcg0QKzehk7CE7k1kk32 OhkgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEDcBsn43wF87mC6tip9A9Ou jtg=\ \>"], ImageRangeCache->{{{0, 465.875}, {161.75, 0}} -> {-0.109964, -0.0348911, \ 0.0135871, 0.0135871}, {{12.125, 114.813}, {157.875, 3.875}} -> {-0.444025, \ -0.809992, 0.0341276, 0.0369716}, {{125.125, 227.813}, {157.875, 3.875}} -> \ {-3.01497, -0.809992, 0.0341276, 0.0369716}, {{238.063, 340.75}, {157.875, \ 3.875}} -> {-5.5845, -0.809992, 0.0341276, 0.0369716}, {{351.063, 453.75}, \ {157.875, 3.875}} -> {-8.15545, -0.809992, 0.0341276, 0.0369716}}], Cell["\<\ The reader can easily check that any two of these shares, when put atop of \ each other, will give five black subpixels and one white. If the original pixel would have been white, we would have had \ \>", "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"PMW", "=", RowBox[{"MW", ".", "P"}]}], ";", RowBox[{"MatrixForm", "[", "PMW", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"0", "0", "1", "1", "0", "1"}, {"0", "0", "1", "1", "0", "1"}, {"0", "0", "1", "1", "0", "1"}, {"0", "0", "1", "1", "0", "1"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell["This means that all four shares would have looked like", "Text", FontSlant->"Italic"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1.5 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.47619 0.145604 0.43956 [ [.5 .03571 -37.9375 -12.5625 ] [.5 .03571 37.9375 0 ] [ 0 0 0 0 ] [ 1 1.5 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 1 g .02381 1.02473 m .02381 1.46429 L .5 1.46429 L .5 1.02473 L F .5 1.02473 m .5 1.46429 L .97619 1.46429 L .97619 1.02473 L F 0 g .02381 .58516 m .02381 1.02473 L .5 1.02473 L .5 .58516 L F .5 .58516 m .5 1.02473 L .97619 1.02473 L .97619 .58516 L F 1 g .02381 .1456 m .02381 .58516 L .5 .58516 L .5 .1456 L F 0 g .5 .1456 m .5 .58516 L .97619 .58516 L .97619 .1456 L F .5 Mabswid .02381 .1456 m .02381 1.46429 L s .5 .1456 m .5 1.46429 L s .97619 .1456 m .97619 1.46429 L s .02381 .1456 m .97619 .1456 L s .02381 .58516 m .97619 .58516 L s .02381 1.02473 m .97619 1.02473 L s .02381 1.46429 m .97619 1.46429 L s gsave .5 .03571 -98.9375 -16.5625 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 (Each) show 98.937500 12.812500 moveto (Share) 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 0 0 m 1 0 L 1 1.5 L 0 1.5 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{72.375, 108.625}, ImageMargins->{{6.3125, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztWNtKxDAQTS/pdvGG+iI+SH0SUfAv9MlPWKEswi6sKOt+kT9aO5N24raT OquCtym0mc6cnElPkmnpbbma3T+Uq/m0LG6W5dNsPn0urh+XtSuJjDGL+nwp DNhVbTaXhamqCoLvNjngLdgpWCZx7uZI4c6SlRACrR3Eokm9YuLrgNNQDrzL wMooW4vwSGjTTj4445AvpqSdaCJk4XDbxMxFpb7hMVsmOgoxwxIwkbM+I5nr Zdd8Lc/WJuJ8odhSHOfLgiJ+p0IHP1ANu6ZGa+dgZaGFPhbm3adFLd2Ivhhw 2wCfAytW3JtL5zVtVeInihNCKuwuXJMQC9cjD+FwnNyeRpn6e3pgjqSlZbhE BufIF7zxxnMpEdavMH7CuFzySuffORlZnW78gOpj74NPSQQjSmlJupjWkH/l puLHOWJ8wZISnKozlwe30TETP5RK9YbslDKekHXuQvJPEXmD0t5Vrci0lyo3 MjzMJVyvFKQgBSlIQf8Q1HtFqEMdf9TBbYiO78L7sAecVimUQimUQimUQimU QimU4ldR4G/wCUSaz2H2l6GJXgGuINcF\ \>"], ImageRangeCache->{{{0, 107.563}, {161.938, 0}} -> {-0.155742, -0.688718, \ 0.0322346, 0.0349208}}], Cell[TextData[{ "Since each row in both ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " has the same number of ones (namely ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ") and since ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalM]", "W"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalM]", "B"], TraditionalForm]]], " are made from these by multiplying them on the right by all possible \ permutation matrices, it follows that each vector of length ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and ", ButtonBox["weight", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl weight"], " ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " occurs equally likely as a share for a white pixel as for a black pixel. \ This shows that our construction has as lower ", ButtonBox["visual threshold value", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Expansion factor"], " ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"r", "/", "m"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Because ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " is multiplied by a permutation matrix, it follows from ", ButtonBox["VTS1", BaseStyle->"Hyperlink", ButtonData:>"PropSecret VTS1"], " that when two participants have shares of a white pixel and they combine \ them, they do not gain anything. \nOn the other hand, any two rows of ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " have weight ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " by ", ButtonBox["VTS2", BaseStyle->"Hyperlink", ButtonData:>"PropSecret VTS2"], " and inner product ", Cell[BoxData[ FormBox["\[Lambda]", TraditionalForm]]], " by ", ButtonBox["VTS3", BaseStyle->"Hyperlink", ButtonData:>"PropSecret VTS3"], ". This remains so if ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " is multiplied by a permutation matrix. It follows that any two shares of a \ black pixel have ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "r"}], "-", "\[Lambda]"}], TraditionalForm]]], " entries equal to one. In the example above ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", "3"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "=", "1"}], TraditionalForm]]], ", giving ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"2", "r"}], "-", "\[Lambda]"}], "=", "5"}], TraditionalForm]]], " ones in any combination of two shares.We conclude that the construction by \ means of ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalM]", "W"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalM]", "B"], TraditionalForm]]], " has a higher ", ButtonBox["visual threshold value", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Expansion factor"], " ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"2", "r"}], "-", "\[Lambda]"}], ")"}], "/", "m"}]}], TraditionalForm]]], "." }], "Text"], Cell["We have proved the following general construction:", "Text"], Cell[TextData[{ StyleBox["Construction ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " be an ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Times]", "m"}], TraditionalForm]]], " matrix satisfying properties ", ButtonBox["VTS2", BaseStyle->"Hyperlink", ButtonData:>"PropSecret VTS2"], " and ", ButtonBox["VTS3", BaseStyle->"Hyperlink", ButtonData:>"PropSecret VTS3"], " for certain values of ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " and \[Lambda]. Let ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " be of the form given by ", ButtonBox["VTS1", BaseStyle->"Hyperlink", ButtonData:>"PropSecret VTS1"], ". Further, let ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalM]", "W"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalM]", "B"], TraditionalForm]]], " be the sets obtained from ", Cell[BoxData[ FormBox[ SubscriptBox["M", "W"], TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " by multiplying them on the right with all possible permutation matrices.\n\ Then a random choice of a matrix from ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalM]", "W"], TraditionalForm]]], " in case of a white pixel and a random choice of a matrix from ", Cell[BoxData[ FormBox[ SubscriptBox["\[ScriptCapitalM]", "B"], TraditionalForm]]], " leads to ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", "2"}], ")"}], TraditionalForm]]], "-visual threshold scheme with expansion factor ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and threshold values ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"r", "/", "m"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"2", "r"}], "-", "\[Lambda]"}], ")"}], "/", "m"}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"ConstrSecret Visual TS"], Cell[TextData[{ StyleBox["Corollary ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nTake any ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and let ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " be some value in between 2 and ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " be the matrix consisting of all columns of length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and weight ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " . Then ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " has ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"u"} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], " columns.\nMoreover, every row of ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " has weight ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"n", "-", "1"}]}, { RowBox[{"u", "-", "1"}]} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], " and any two rows have inner product ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "=", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"n", "-", "2"}]}, { RowBox[{"u", "-", "2"}]} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], ".\nThis defines a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", "2"}], ")"}], TraditionalForm]]], "-visual threshold scheme with expansion factor ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"u"} }], "\[NegativeThinSpace]", ")"}]}], TraditionalForm]]], " and threshold values ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"u", "/", "n"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"2", "n"}], "-", "u", "+", "1"}], ")"}], "/", RowBox[{"n", "(", RowBox[{"n", "-", "1"}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ "By taking ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "4"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "2"}], TraditionalForm]]], " in the above corollary, one gets the construction of ", ButtonBox["Example 15.4", BaseStyle->"Hyperlink", ButtonData:>"ExamSecret Visual n=4"], ". Indeed, ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"u"} }], "\[NegativeThinSpace]", ")"}], "=", RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"4"}, {"2"} }], "\[NegativeThinSpace]", ")"}], "=", "6"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"n", "-", "1"}]}, { RowBox[{"u", "-", "1"}]} }], "\[NegativeThinSpace]", ")"}], "=", RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"3"}, {"1"} }], "\[NegativeThinSpace]", ")"}], "=", "3"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "=", RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"n", "-", "2"}]}, { RowBox[{"u", "-", "2"}]} }], "\[NegativeThinSpace]", ")"}], "=", RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"2"}, {"0"} }], "\[NegativeThinSpace]", ")"}], "=", "1"}]}]}], TraditionalForm]]], ". The visual threshold values are given by ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{ RowBox[{"2", "/", "4"}], "=", RowBox[{"1", "/", "2"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", RowBox[{"5", "/", "6"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "A disadvantage of the family of constructions described in the Corollary \ above, is the high expansion factor ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "A reader who is familiar with the theory of block designs and ", Cell[BoxData[ FormBox["t", TraditionalForm]]], "-designs may have guessed from conditions ", ButtonBox["VTS2", BaseStyle->"Hyperlink", ButtonData:>"PropSecret VTS2"], " and ", ButtonBox["VTS3", BaseStyle->"Hyperlink", ButtonData:>"PropSecret VTS3"], " that these notions often play a role in the construction of a visual \ threshold scheme. We shall explain one particular construction." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be any prime number. We recall from Definition A.9 that an integer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "u", "<", "p"}], TraditionalForm]]], ", is called a ", ButtonBox["quadratic residue", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " (QR) if the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"u", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " has a solution in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], ". How to determine if a number ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is a quadratic residue is explained in Section A.4. With ", StyleBox["Mathematica", FontSlant->"Italic"], " one can do this with the function ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], ", which will output 1 if and only if ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is a QR." }], "Text", CellChangeTimes->{{3.4234706110232058`*^9, 3.4234706212420216`*^9}, 3.423470671476718*^9}], Cell[TextData[{ "For instance, that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"12", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], " has a solution (namely ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[PlusMinus]", "5"}], ")"}], TraditionalForm]]], " follows from " }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"u", "=", "12"}], ";", " ", RowBox[{"m", "=", "13"}], ";", " ", RowBox[{"JacobiSymbol", "[", RowBox[{"u", ",", " ", "m"}], "]"}]}]], "Input"], Cell[BoxData["1"], "Output"], Cell[TextData[{ "The ", ButtonBox["Jacobi symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], " is normally denoted by ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["u", "p"], ")"}], TraditionalForm]]], " or just by ", Cell[BoxData[ FormBox[ RowBox[{"\[Chi]", "(", "u", ")"}], TraditionalForm]]], ", if there is no confusion about the value of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Actually, the value of ", Cell[BoxData[ FormBox[ RowBox[{"\[Chi]", "(", "u", ")"}], TraditionalForm]]], " is defined to be 0, when ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "0"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], " when ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "u", "<", "p"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is not QR." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Corollary ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be any prime that is congruent to 3 mod 4. Define the ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Times]", "p"}], TraditionalForm]]], " matrix ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " by\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"(", SubscriptBox["M", "B"], ")"}], RowBox[{"i", ",", "j"}]], "=", RowBox[{"{", GridBox[{ { RowBox[{ RowBox[{"1", ","}], " "}]}, { RowBox[{"0", ","}]} }]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{ RowBox[{"if", " ", "j"}], "-", RowBox[{"i", " ", "is", " ", "QR"}]}], ","}], " "}]}, { RowBox[{"otherwise", "."}]} }], TraditionalForm]]], "\n\nThen every row of ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " has weight ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]}], TraditionalForm]]], " and any two rows have inner product ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "=", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "3"}], ")"}], "/", "4"}]}], TraditionalForm]]], ".\nThis defines a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"n", ",", "2"}], ")"}], TraditionalForm]]], "-visual threshold scheme with expansion factor ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "n"}], TraditionalForm]]], " and threshold values ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}], "p"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"3", "p"}], "-", "1"}], ")"}], "/", "4"}], "p"}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorSecret visual QR constr"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], "\nFixing a row index ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " we see that ", Cell[BoxData[ FormBox[ RowBox[{"j", "-", "i"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "j", "<", "p"}], TraditionalForm]]], ", takes on all values in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], ". It follows from ", ButtonBox["Theorem A.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Chi"], " that each row in ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " has weight ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}], TraditionalForm]]], ".\nNow consider the matrix ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalChi]", "=", SubscriptBox[ RowBox[{"(", RowBox[{"\[Chi]", "(", RowBox[{"j", "-", "i"}], ")"}], ")"}], RowBox[{ RowBox[{"0", "\[LessEqual]", "i"}], ",", RowBox[{"j", "<", "p"}]}]]}], TraditionalForm]]], ". Matrix ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " can be obtained from ", Cell[BoxData[ FormBox["\[CapitalChi]", TraditionalForm]]], " by replacing all its ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], "-entries by 0. Consider two rows of ", Cell[BoxData[ FormBox["\[CapitalChi]", TraditionalForm]]], " and let them be indexed by ", Cell[BoxData[ FormBox[ SubscriptBox["i", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["i", "2"], TraditionalForm]]], ". Note that " }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Chi]", "(", RowBox[{ SubscriptBox["i", "1"], "-", SubscriptBox["i", "2"]}], ")"}], OverscriptBox["=", ButtonBox[ RowBox[{ RowBox[{"Th", ".", "A"}], ".21"}], BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chi(uv)"]], RowBox[{ RowBox[{ RowBox[{"\[Chi]", "(", RowBox[{"-", "1"}], ")"}], RowBox[{"\[Chi]", "(", RowBox[{ SubscriptBox["i", "2"], "-", SubscriptBox["i", "1"]}], ")"}]}], OverscriptBox["=", ButtonBox[ RowBox[{ RowBox[{"Cor", ".", "A"}], ".24"}], BaseStyle->"Hyperlink", ButtonData:>"CorAppA Chi(-1)"]], RowBox[{"-", RowBox[{"\[Chi]", "(", RowBox[{ SubscriptBox["i", "2"], "-", SubscriptBox["i", "1"]}], ")"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "This means that the matrix \[CapitalChi] is skew-symmetric and that the ", Cell[BoxData[ FormBox[ SubscriptBox["i", "2"], TraditionalForm]]], "-th entry in row ", Cell[BoxData[ FormBox[ SubscriptBox["i", "1"], TraditionalForm]]], " is equal to minus the ", Cell[BoxData[ FormBox[ SubscriptBox["i", "1"], TraditionalForm]]], "-th entry in row ", Cell[BoxData[ FormBox[ SubscriptBox["i", "2"], TraditionalForm]]], ". We conclude that, apart from a reordering of the coordinates, rows ", Cell[BoxData[ FormBox[ SubscriptBox["i", "1"], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubscriptBox["i", "2"], TraditionalForm]]], " will look like" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ " ", Cell[BoxData[ FormBox[GridBox[{ { OverscriptBox[ OverscriptBox["0", "\[OverBrace]"], "1"]}, { RowBox[{"-", "1"}]} }], TraditionalForm]]], " ", Cell[BoxData[ FormBox[GridBox[{ { OverscriptBox[ OverscriptBox[ RowBox[{"+", "1"}], "\[OverBrace]"], "1"]}, {"0"} }], TraditionalForm]]], " ", Cell[BoxData[ FormBox[GridBox[{ { OverscriptBox[ OverscriptBox[ RowBox[{ RowBox[{ RowBox[{"+", "1"}], "\[Ellipsis]"}], "+", "1"}], "\[OverBrace]"], "a"]}, { RowBox[{ RowBox[{ RowBox[{"+", "1"}], "\[Ellipsis]"}], "+", "1"}]} }], TraditionalForm]]], " ", Cell[BoxData[ FormBox[GridBox[{ { OverscriptBox[ OverscriptBox[ RowBox[{ RowBox[{ RowBox[{"+", "1"}], "\[Ellipsis]"}], "+", "1"}], "\[OverBrace]"], "b"]}, { RowBox[{ RowBox[{ RowBox[{"-", "1"}], "\[Ellipsis]"}], "-", "1"}]} }], TraditionalForm]]], " ", Cell[BoxData[ FormBox[GridBox[{ { OverscriptBox[ OverscriptBox[ RowBox[{ RowBox[{ RowBox[{"-", "1"}], "\[Ellipsis]"}], "-", "1"}], "\[OverBrace]"], "c"]}, { RowBox[{ RowBox[{ RowBox[{"+", "1"}], "\[Ellipsis]"}], "+", "1"}]} }], TraditionalForm]]], " ", Cell[BoxData[ FormBox[GridBox[{ { OverscriptBox[ OverscriptBox[ RowBox[{ RowBox[{ RowBox[{"-", "1"}], "\[Ellipsis]"}], "-", "1"}], "\[OverBrace]"], "d"]}, { RowBox[{ RowBox[{ RowBox[{"-", "1"}], "\[Ellipsis]"}], "-", "1"}]} }], TraditionalForm]]], " " }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "where the two rows may have been interchanged.\nThe inner product of rows \ ", Cell[BoxData[ FormBox[ SubscriptBox["i", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["i", "2"], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " is given by the value of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " (since all ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], "'s in \[CapitalChi] are replaced by 0 to get ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], "). To find the values ", Cell[BoxData[ FormBox[ RowBox[{"a", ",", "b", ",", "c", ",", "d"}], TraditionalForm]]], " we calculate first" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], RowBox[{"p", "-", "1"}]], RowBox[{ RowBox[{"\[Chi]", "(", RowBox[{"j", "-", SubscriptBox["i", "1"]}], ")"}], RowBox[{"\[Chi]", "(", RowBox[{"j", "-", SubscriptBox["i", "2"]}], ")"}]}]}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], RowBox[{"p", "-", "1"}]], RowBox[{ RowBox[{"\[Chi]", "(", "j", ")"}], RowBox[{"\[Chi]", "(", RowBox[{ RowBox[{"j", "-", RowBox[{"(", RowBox[{ SubscriptBox["i", "2"], "-", SubscriptBox["i", RowBox[{"1", ")"}]]}], ")"}]}], "=", RowBox[{"-", "1"}]}]}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormSecret inner prod"], Cell[TextData[{ "The first equality follows from the substitution ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"j", "-", SubscriptBox["i", "1"]}], "\[RightArrow]", "j"}], TraditionalForm]]], ", the second one follows from ", ButtonBox["Theorem A.22", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA chi(u)chi(u+k)"], ", since ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["i", "1"], "\[NotCongruent]", RowBox[{ SubscriptBox["i", "2"], " ", "mod", " ", "p"}]}], TraditionalForm]]], "." }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["Hence, we have the following relations:", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "+", "a", "+", "b", "+", "c", "+", "d"}], "=", "p"}], TraditionalForm]]], ",\t\t(", Cell[BoxData[ FormBox["\[CapitalChi]", TraditionalForm]]], " has ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " columns),\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "-", "b", "-", "c", "+", "d"}], "=", RowBox[{"-", "1"}]}], TraditionalForm]]], ", \t\t(from ", ButtonBox["(15.4)", BaseStyle->"Hyperlink", ButtonData:>"FormSecret inner prod"], "),\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "+", "a", "+", "b"}], "=", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]}], TraditionalForm]]], ", \t\t(apply ", ButtonBox["Thm. A.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Chi"], " to the first row),\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "+", "c"}], "=", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]}], TraditionalForm]]], ", \t\t(apply ", ButtonBox["Thm A.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Chi"], " to the second row)." }], "DisplayFormula", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "These equations have a unique solution: ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{"b", "=", RowBox[{"d", "=", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "3"}], ")"}], "/", "4"}]}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "4"}]}], TraditionalForm]]], ". We conclude that the inner product of two different rows in ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "3"}], ")"}], "/", "4"}], TraditionalForm]]], ".\nThe Corollary is now a direct consequence of ", ButtonBox["Construction 15.5", BaseStyle->"Hyperlink", ButtonData:>"ConstrSecret Visual TS"], "." }], "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"], "\nTake ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "13"}], TraditionalForm]]], ". The matrix ", Cell[BoxData[ FormBox[ SubscriptBox["M", "B"], TraditionalForm]]], " can be made with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], ", ", StyleBox["If", FontVariations->{"Underline"->True}], ", and ", StyleBox["Array", FontVariations->{"Underline"->True}], " as follows: " }], "Example", CellChangeTimes->{{3.4233931588050222`*^9, 3.4233931609456606`*^9}, { 3.423470677742383*^9, 3.4234706816642833`*^9}, {3.423474082805563*^9, 3.423474087664938*^9}}, CellTags->"ExamSecret Visual n=4"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "11"}], ";", RowBox[{ RowBox[{"A", "[", RowBox[{"i_", ",", "j_"}], "]"}], ":=", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{ RowBox[{"j", "-", "i"}], ",", "p"}], "]"}], "==", "1"}], ",", "1", ",", "0"}], "]"}]}], ";", RowBox[{"MB", "=", RowBox[{"Array", "[", RowBox[{"A", ",", RowBox[{"{", RowBox[{"p", ",", "p"}], "}"}]}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "MB", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"0", "1", "0", "1", "1", "1", "0", "0", "0", "1", "0"}, {"0", "0", "1", "0", "1", "1", "1", "0", "0", "0", "1"}, {"1", "0", "0", "1", "0", "1", "1", "1", "0", "0", "0"}, {"0", "1", "0", "0", "1", "0", "1", "1", "1", "0", "0"}, {"0", "0", "1", "0", "0", "1", "0", "1", "1", "1", "0"}, {"0", "0", "0", "1", "0", "0", "1", "0", "1", "1", "1"}, {"1", "0", "0", "0", "1", "0", "0", "1", "0", "1", "1"}, {"1", "1", "0", "0", "0", "1", "0", "0", "1", "0", "1"}, {"1", "1", "1", "0", "0", "0", "1", "0", "0", "1", "0"}, {"0", "1", "1", "1", "0", "0", "0", "1", "0", "0", "1"}, {"1", "0", "1", "1", "1", "0", "0", "0", "1", "0", "0"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "So, we have a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"11", ",", "2"}], ")"}], TraditionalForm]]], "-visual secret sharing scheme with expansion factor ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "11"}], TraditionalForm]]], " and threshold values ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}], "p"}], "=", RowBox[{"5", "/", "11"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", RowBox[{ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"3", "p"}], "-", "1"}], ")"}], "/", "4"}], "p"}], "=", RowBox[{"8", "/", "11"}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", GroupPageBreakWithin->True, CellTags->"SectSecr Problems"], 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]]], "\n Set up a Shamir ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"5", ",", "3"}], ")"}], TraditionalForm]]], "-", ButtonBox["threshold scheme", BaseStyle->"Hyperlink", ButtonData:>"ConstrThresh Shamir"], " for the secret 15 in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "17", ")"}], TraditionalForm]]], ".\nShow how participants 1,2 and 3 can recover the secret.\nShow that for \ participants 1 and 2 together each element in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "17", ")"}], TraditionalForm]]], " is an equally likely candidate for the secret." }], "Problem", GroupPageBreakWithin->True], 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 a Shamir ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"7", ",", "4"}], ")"}], TraditionalForm]]], "-threshold scheme in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "23", ")"}], TraditionalForm]]], ", where the participants 1, 3, 4, and 6 pool their shares ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "13"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"3", ",", "19"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"4", ",", "19"}], ")"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"6", ",", " ", "6"}], ")"}], TraditionalForm]]], " to retrieve the secret ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". What will this secret be?\nSuppose that participant 5 shows his share ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"5", ",", " ", "3"}], ")"}], TraditionalForm]]], ". Why is one of these five people lying?\nLet all also participants 1 and 8 \ contribute there share: ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"2", ",", "4"}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"8", ",", "12"}], ")"}], TraditionalForm]]], ". Determine the liar and the real secret." }], "Problem", GroupPageBreakWithin->True], 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]]], "\nConstruct a ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"7", ",", "4"}], ")"}], TraditionalForm]]], "-", ButtonBox["threshold scheme over the finite field", BaseStyle->"Hyperlink", ButtonData:>"ConstrThresh Shamir Gen"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", "16", ")"}], "=", RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "a", "]"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["a", "4"], "+", "a", "+", "1"}], ")"}]}]}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field Iff Irred"], ").\nWhat are the shares of the participants for secret ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", RowBox[{"(", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], ")"}]}], TraditionalForm]]], " which stands for the field element ", Cell[BoxData[ FormBox[ SuperscriptBox["a", "13"], TraditionalForm]]], "?\nShow in detail how participants ", Cell[BoxData[ FormBox[ RowBox[{"2", ",", "4", ",", "5", ",", "7"}], TraditionalForm]]], " recover ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "Problem", GroupPageBreakWithin->True, GeneratedCell->True], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nConsider the following scheme over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "3"], TraditionalForm]]], ":" }], "Problem", GroupPageBreakWithin->True], Cell[TextData[Cell[BoxData[GridBox[{ {"participant", "share"}, {"1", RowBox[{"a", ",", "b", ",", RowBox[{"c", "+", SubscriptBox["s", "2"]}]}]}, {"2", RowBox[{ RowBox[{"a", "+", SubscriptBox["s", "1"]}], ",", "b", ",", "c"}]}, {"3", RowBox[{ RowBox[{"b", "+", SubscriptBox["s", "1"]}], ",", RowBox[{"c", "-", SubscriptBox["s", "2"]}], ",", "d"}]}, {"4", RowBox[{"b", ",", RowBox[{"d", "+", SubscriptBox["s", "2"]}]}]} }]]]], "Text", GroupPageBreakWithin->True, TextAlignment->Center, TextJustification->0], Cell[TextData[{ "Give the matrix description of this scheme.\nProve that it is a ", ButtonBox["secret sharing scheme", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], " for ", ButtonBox["access structure", BaseStyle->"Hyperlink", ButtonData:>"DefSecret access struc"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"U", ",", "\[ScriptCapitalP]", ",", "\[ScriptCapitalN]"}], ")"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"U", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "3", ",", "4"}], "}"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalP]", "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "4"}], "}"}]}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalN]", "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "4"}], "}"}], ",", RowBox[{"{", "3", "}"}]}], "}"}]}], TraditionalForm]]], ".\nWhat is the ", ButtonBox["information rate", BaseStyle->"Hyperlink", ButtonData:>"DefSecret ideal SSS"], " of this scheme? Is it ", ButtonBox["perfect", BaseStyle->"Hyperlink", ButtonData:>"DefSecret perfect SSS"], "? Is it ", ButtonBox["ideal", BaseStyle->"Hyperlink", ButtonData:>"DefSecret ideal SSS"], "?" }], "Problem", GroupPageBreakWithin->True, CounterIncrements->"Non"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nMake a visualization of a set of possible shares for a black pixel in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"7", ",", "2"}], ")"}], TraditionalForm]]], "-visual threshold scheme, as constructed in ", ButtonBox["Corollary 15.7", BaseStyle->"Hyperlink", ButtonData:>"CorSecret visual QR constr"], ". \nWhat is the ", ButtonBox["expansion factor", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Expansion factor"], " of this scheme and what are its ", ButtonBox["visual threshold values", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Expansion factor"], "?" }], "Problem", GroupPageBreakWithin->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Appendix A\tElementary Number Theory", "Chapter", CounterAssignments->{{"Chapter", 0}, {"Section", 0}, {"Subsection", 0}, { "Subsubsection", 0}, {"Theorem", 0}, {"Definition", 0}, { "NumberedTable", 0}, {"Example", 0}, {"Problem", 0}, { "NumberedEquation", 0}, {"NumberedFigure", 0}}, CellTags->"ChapNumberTh"], Cell[CellGroupData[{ Cell[TextData[{ "A", ".", CounterBox["Section"], "\tIntroduction" }], "Section", CellTags->"SectAppA Introduction"], Cell["\<\ Let \[DoubleStruckCapitalN] denote the set of natural numbers, \ \[DoubleStruckCapitalZ] the set of integers, and \[DoubleStruckCapitalR] the \ set of real numbers.\ \>", "Text", GeneratedCell->True], Cell[TextData[{ "An integer ", StyleBox["d", FontSlant->"Italic"], " ", StyleBox["divides ", FontSlant->"Italic"], "an integer ", StyleBox["n", FontSlant->"Italic"], ", if ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"k", " ", "d"}]}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Element]", "\[DoubleStruckCapitalZ]"}], TraditionalForm]]], ". We shall denote this by ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", "n"}], TraditionalForm]]], ". If such an integer ", StyleBox["k", FontSlant->"Italic"], " does not exist, ", StyleBox["d", FontSlant->"Italic"], " does not divide ", StyleBox["n", FontSlant->"Italic"], ". This will be denoted by ", Cell[BoxData[ FormBox[ RowBox[{"d", "\[NotVerticalBar]", "n"}], TraditionalForm]]], "." }], "Text", CellTags->"DefAppA divide"], Cell[TextData[{ "To check if the integer ", StyleBox["d", FontSlant->"Italic"], " divides the integer ", StyleBox["n", FontSlant->"Italic"], ", the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["IntegerQ", FontVariations->{"Underline"->True}], " can be used in the following way." }], "Text", CellChangeTimes->{{3.4234741520401087`*^9, 3.423474157337017*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "16851"}], ";", RowBox[{"d", "=", "123"}], ";", " ", RowBox[{"IntegerQ", "[", RowBox[{"n", "/", "d"}], "]"}]}]], "Input"], Cell[BoxData["True"], "Output"], Cell[TextData[{ "The ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Divisors", FontVariations->{"Underline"->True}], " gives a list of all divisors of a number ", StyleBox["n", FontSlant->"Italic"], ". For instance: " }], "Text", CellChangeTimes->{ 3.4232098210233192`*^9, {3.4234741747433786`*^9, 3.4234741906809807`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "16851"}], ";", " ", RowBox[{"Divisors", "[", "n", "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "3", ",", "41", ",", "123", ",", "137", ",", "411", ",", "5617", ",", "16851"}], "}"}]], "Output", CellChangeTimes->{3.423369284497285*^9}], Cell[TextData[{ "An integer ", StyleBox["p", FontSlant->"Italic"], ", ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "1"}], TraditionalForm]]], ", is said to be ", StyleBox["prime", FontSlant->"Italic"], ", if 1 and ", StyleBox["p", FontSlant->"Italic"], " are its only positive divisors. With ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "=", "2"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "2"], "=", "3"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "3"], "=", "5"}], ","}], TraditionalForm]]], " \[Ellipsis] we introduce a natural numbering of the set of prime numbers. \ " }], "Text", CellTags->"DefAppA prime"], Cell[TextData[{ "Valuable ", StyleBox["Mathematica", FontSlant->"Italic"], " functions in this context are ", StyleBox["Prime", FontVariations->{"Underline"->True}], " and ", StyleBox["PrimeQ", FontVariations->{"Underline"->True}], ":" }], "Text", CellChangeTimes->{3.4233973151753726`*^9, 3.4233974516293707`*^9}], Cell[BoxData[ RowBox[{ RowBox[{"k", "=", "35"}], ";", " ", RowBox[{"Prime", "[", "k", "]"}]}]], "Input"], Cell[BoxData["149"], "Output"], Cell["generating the 35-th prime number.", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "1234567"}], ";", " ", RowBox[{"PrimeQ", "[", "n", "]"}]}]], "Input"], Cell[BoxData["False"], "Output"], Cell["telling if the input (here 1234567) is prime.", "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\t\t", ButtonBox["Euclid", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Euclid of Alexandria"], " \n\nThere are infinitely many prime numbers." }], "Theorem", CellTags->"TheoAppA Euclid"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Suppose the contrary. Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "k"]}], TraditionalForm]]], " be the set of all primes. Next, we observe that the integer ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["p", "i"]}], ")"}], "+", "1"}], TraditionalForm]]], " is not divisible by any of the primes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "k"]}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be the smallest integer ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " that is not divisible by any of the primes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "k"]}], TraditionalForm]]], ". It can not be a prime number, because it is not in the list ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "k"]}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " has a non-trivial factor ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ". But then this factor ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " is divisible by at least of the primes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "k"]}], TraditionalForm]]], " and so does ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". A contradiction." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Between two consecutive primes there can be an arbitrary large gap of \ non-prime numbers. For example, the ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], " elements in the sequence ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"n", "!"}], "+", "2"}], ",", RowBox[{ RowBox[{"n", "!"}], "+", "3"}], ",", "\[Ellipsis]", ",", RowBox[{ RowBox[{"n", "!"}], "+", "n"}]}], TraditionalForm]]], " are divisible by respectively ", Cell[BoxData[ FormBox[ RowBox[{"2", ",", "3", ",", "\[Ellipsis]", ",", "n"}], TraditionalForm]]], ". Therefore none of them is prime." }], "Text"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nThe function ", Cell[BoxData[ FormBox[ RowBox[{"\[Pi]", "(", "n", ")"}], TraditionalForm]], FontSlant->"Italic"], " counts the number of primes less than or equal to ", StyleBox["n", FontSlant->"Italic"], "." }], "Definition", CellTags->"DefAppA Pi(x)"], Cell[TextData[{ "In Mathematica, this function is denoted by ", StyleBox["PrimePi", FontVariations->{"Underline"->True}], "[n]." }], "Text", CellChangeTimes->{{3.4234742318999944`*^9, 3.4234742399469213`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "100"}], ";", " ", RowBox[{"PrimePi", "[", "n", "]"}]}]], "Input"], Cell[BoxData["25"], "Output"], Cell[TextData[{ "The next theorem [see ", ButtonBox["[HarW45]", BaseStyle->"Hyperlink", ButtonData:>"RefHar45"], ", p.91] , which we shall not prove, tells us something about the relative \ frequency of the prime numbers in \[DoubleStruckCapitalN]." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\tThe ", StyleBox["Prime Number Theorem", FontSlant->"Italic"], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["lim", RowBox[{"n", "\[RightArrow]", "\[Infinity]"}]], " ", FractionBox[ RowBox[{"\[Pi]", "(", "n", ")"}], RowBox[{ RowBox[{"n", "/", "ln"}], " ", "n"}]]}], "=", "1"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Prime Numb Th"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "1000000"}], ";", " ", RowBox[{ RowBox[{ RowBox[{"PrimePi", "[", "n", "]"}], "/", RowBox[{"(", RowBox[{"n", "/", RowBox[{"Log", "[", "n", "]"}]}], ")"}]}], " ", "//", "N"}]}]], "Input"], Cell[BoxData["1.08448994777907948`"], "Output"], Cell[TextData[{ "Two important definitions are those of the ", StyleBox["greatest common divisor", FontSlant->"Italic"], " and ", StyleBox["least common multiple ", FontSlant->"Italic"], "of two integers." }], "Text"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nThe", StyleBox[" ", FontColor->GrayLevel[0.996109]], StyleBox["greatest common divisor", FontSlant->"Italic"], StyleBox[" ", FontColor->GrayLevel[0.996109]], "of two integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], ", not both equal to zero, is the uniquely determined, positive integer ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ", satisfying" }], "Definition", CellTags->"DefAppA GCD"], Cell[TextData[{ Cell[BoxData[ FormBox["d", TraditionalForm]]], " divides both ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]] }], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.500008, 1, 0.900008], CellTags->"PropAppA GCD1"], Cell["and", "Definition", CounterIncrements->"None", Background->RGBColor[0.500008, 1, 0.900008]], Cell[TextData[{ "if ", Cell[BoxData[ FormBox["f", TraditionalForm]], CellTags->"PropAppA GCD2"], " divides both ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], ", then ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " also divides ", Cell[BoxData[ FormBox["d", TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.500008, 1, 0.900008], CellTags->"PropAppA GCD2"], Cell[TextData[{ "The greatest common divisor of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " is denoted by ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"gcd", "(", RowBox[{"a", ",", " ", "b"}], ")"}], FontSlant->"Italic"], TraditionalForm]]], ", or just ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}], TraditionalForm]]], "." }], "Definition", CounterIncrements->"None", Background->RGBColor[0.500008, 1, 0.900008]], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nThe", StyleBox[" ", FontColor->RGBColor[0, 0, 0.996109]], StyleBox["least common multiple", FontSlant->"Italic"], " of two integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " is the uniquely determined, positive integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", satisfying" }], "Definition", CellTags->"DefAppA LCM"], Cell[TextData[{ " ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is divisible by both ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]] }], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.500008, 1, 0.900008], CellTags->"PropAppA LCM1"], Cell["and", "Definition", CounterIncrements->"None", Background->RGBColor[0.500008, 1, 0.900008]], Cell[TextData[{ "if ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is divisible by both ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " then ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is a multiple of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.500008, 1, 0.900008], CellTags->"PropAppA LCM2"], Cell[TextData[{ "The least common multiple of two integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " is denoted by ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"lcm", "[", RowBox[{"a", " ", ",", "b"}], "]"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}], TraditionalForm]]], " or just ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{"[", RowBox[{"a", ",", "b"}], "]"}], " "}], FontSlant->"Italic"], TraditionalForm]]], "." }], "Definition", CounterIncrements->"None", Background->RGBColor[0.500008, 1, 0.900008]], Cell["To show the existence of gcd, we introduce the set", "Text"], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ RowBox[{"U", " ", "=", " ", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ RowBox[{"x", ".", "a"}], "+", RowBox[{"y", ".", "b"}]}], " ", "|", " ", RowBox[{"x", "\[Element]", "\[DoubleStruckCapitalZ]"}]}], ",", " ", RowBox[{"y", "\[Element]", "\[DoubleStruckCapitalZ]"}], ",", " ", RowBox[{ RowBox[{ RowBox[{"x", ".", "a"}], "+", RowBox[{"y", ".", "b"}]}], ">", "0"}]}], "}"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Let ", StyleBox["m", FontSlant->"Italic"], " denote the smallest element in ", StyleBox["U", FontSlant->"Italic"], ". We shall show that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " satisfies ", ButtonBox["(A.1)", BaseStyle->"Hyperlink", ButtonData:>"PropAppA GCD1"], " and ", ButtonBox["(A.2)", BaseStyle->"Hyperlink", ButtonData:>"PropAppA GCD2"], ". Clearly, if ", StyleBox["f", FontSlant->"Italic"], " divides both ", StyleBox["a", FontSlant->"Italic"], " and ", StyleBox["b", FontSlant->"Italic"], " then ", StyleBox["f", FontSlant->"Italic"], " also divides ", StyleBox["m", FontSlant->"Italic"], ". So, ", StyleBox["m", FontSlant->"Italic"], " does satisfy (A.2). Now, write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "=", RowBox[{ RowBox[{"q", " ", "m"}], "+", "r"}]}], ","}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "r", "<", "m"}], TraditionalForm]]], " (subtract or add ", StyleBox["m", FontSlant->"Italic"], " sufficiently often from (resp. to) ", StyleBox["a", FontSlant->"Italic"], " until the remainder ", StyleBox["r", FontSlant->"Italic"], " lies in between 0 and ", Cell[BoxData[ FormBox[ RowBox[{"m", "-", "1"}], TraditionalForm]]], "). If ", Cell[BoxData[ FormBox[ RowBox[{"r", "\[NotEqual]", "0"}], TraditionalForm]]], ", then ", Cell[BoxData[ FormBox[ RowBox[{"r", "\[Element]", "U"}], TraditionalForm]]], " (since both ", StyleBox["a", FontSlant->"Italic"], " and ", StyleBox["m", FontSlant->"Italic"], " are in ", StyleBox["U", FontSlant->"Italic"], "). This contradicts the assumption on the minimality of ", StyleBox["m", FontSlant->"Italic"], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", "0"}], TraditionalForm]]], ", which means that ", StyleBox["m", FontSlant->"Italic"], " divides ", StyleBox["a", FontSlant->"Italic"], ". Similarly, ", StyleBox["m", FontSlant->"Italic"], " divides ", StyleBox["b", FontSlant->"Italic"], ". So, ", StyleBox["m", FontSlant->"Italic"], " satisfies (A.1) too.\nThe uniqueness of ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], TraditionalForm]]], " follows from ", ButtonBox["(A.1)", BaseStyle->"Hyperlink", ButtonData:>"PropAppA GCD1"], " and ", ButtonBox["(A.2)", BaseStyle->"Hyperlink", ButtonData:>"PropAppA GCD2"], ". Indeed, if ", StyleBox["d", FontSlant->"Italic"], " and ", StyleBox["d'", FontSlant->"Italic"], " both satisfy (A.1) and (A.2), it follows that ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", RowBox[{"d", "'"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"d", "'"}], "|", "d"}], TraditionalForm]]], ". Since both ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"d", "'"}], TraditionalForm]]], " are positive, it follows that ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", RowBox[{"d", "'"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "In a similar way, the existence and uniqueness of ", Cell[BoxData[ FormBox[ RowBox[{"lcm", "[", RowBox[{"a", ",", "b"}], "]"}], TraditionalForm]]], " can be proved." }], "Text"], Cell[TextData[{ "Alternative definitions of ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"a", ",", " ", "b"}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"lcm", "[", RowBox[{"a", ",", " ", "b"}], "]"}], TraditionalForm]]], " are:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], TraditionalForm]]], " is the largest integer dividing both ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], "\n", Cell[BoxData[ FormBox[ RowBox[{"lcm", "[", RowBox[{"a", ",", "b"}], "]"}], TraditionalForm]]], " is the smallest positive integer divisible by both ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], "." }], "Definition", CounterIncrements->"None", Background->RGBColor[0.500008, 1, 0.900008], CellTags->"DefAppA Alter GCD/LCM"], Cell[TextData[{ "The functions ", StyleBox["GCD", FontVariations->{"Underline"->True}], " and ", StyleBox["LCM", FontVariations->{"Underline"->True}], " can be evaluated by ", StyleBox["Mathematica", FontSlant->"Italic"], " as follows:" }], "Text", PageBreakAbove->True, CellChangeTimes->{ 3.42339690768839*^9, {3.4233969575949593`*^9, 3.423396959938724*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"a", "=", "12345"}], ";", " ", RowBox[{"b", "=", "67890"}], ";", " ", RowBox[{"GCD", "[", RowBox[{"a", ",", "b"}], "]"}]}]], "Input"], Cell[BoxData["15"], "Output"], Cell[BoxData[ RowBox[{ RowBox[{"a", "=", "12345"}], ";", " ", RowBox[{"b", "=", "67890"}], ";", RowBox[{"LCM", "[", RowBox[{"a", ",", "b"}], "]"}]}]], "Input"], Cell[BoxData["55873470"], "Output"], Cell[TextData[{ "If two integers have a gcd equal to 1, we say that they are ", StyleBox["coprime", FontSlant->"Italic"], ". A consequence of the above is the following important theorem." }], "Text", CellTags->"DefAppA coprime"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " be in \[DoubleStruckCapitalN]. Then there exist integers", Cell[BoxData[ FormBox[ RowBox[{" ", "u"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], ", such that\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], "=", RowBox[{ RowBox[{"u", ".", "a"}], "+", RowBox[{"v", ".", "b"}]}]}], TraditionalForm]]], ".\n\t\t\nIn particular, if ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " are coprime, there exist integers ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], ", such that\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"u", ".", "a"}], "+", RowBox[{"v", ".", "b"}]}], "=", "1"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA GCD=ua+vb"], Cell["The following lemma seems too obvious to need a proof.", "Text"], Cell[TextData[{ StyleBox["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " divide a product ", Cell[BoxData[ FormBox[ RowBox[{"a", " ", "b"}], TraditionalForm]]], " and let the ", Cell[BoxData[ FormBox["gcd", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"d", " "}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " be 1. Then ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["b", TraditionalForm]]], "." }], "Theorem", CellTags->"LemAppA d Div ab"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], " Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"d", ",", "a"}], ")"}], "=", "1"}], TraditionalForm]]], ", ", ButtonBox["Theorem A.3", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA GCD=ua+vb"], " implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"x", " ", "d"}], "+", RowBox[{"y", " ", "a"}]}], "=", "1"}], TraditionalForm]]], ", for some integers ", Cell[BoxData[ FormBox[ RowBox[{"x", " "}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox["y", TraditionalForm]]], ". So,", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ RowBox[{ RowBox[{"x", " ", "d", " ", "b"}], "+", RowBox[{"y", " ", "a", " ", "b"}]}], "=", "b"}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"a", " ", "b"}], TraditionalForm]]], ", it follows that ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " also divides ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", " ", "d", " ", "b"}], "+", RowBox[{"y", " ", "a", " ", "b"}]}], TraditionalForm]]], " which equals ", Cell[BoxData[ FormBox["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[{ StyleBox["Corollary A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be prime and let ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " divide ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["a", "i"]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], " in \[DoubleStruckCapitalZ] , ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ". \nThen ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " divides at least one of the factors ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], StyleBox[" ", FontColor->RGBColor[0.500008, 0, 0.500008]], "Use ", ButtonBox["Lemma A.4", BaseStyle->"Hyperlink", ButtonData:>"LemAppA d Div ab"], " and induction on ", Cell[BoxData[ FormBox["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["\<\ With an induction argument the following theorem can now easily be proved.\ \>", "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\t", StyleBox["Fundamental Theorem of Number Theory", FontSlant->"Italic"], "\nAny positive integer has a unique factorization of the form\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Product]", "i"], SubscriptBox[ SubsuperscriptBox["p", "i", "e"], "i"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["e", "i"], "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Fundamental"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"a", "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ SubscriptBox["\[Product]", "i"], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ SuperscriptBox[ SubscriptBox["p", "i"], SubscriptBox["e", "i"]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["e", "i"], TraditionalForm]]], " in \[DoubleStruckCapitalN] and ", Cell[BoxData[ FormBox[ RowBox[{"b", "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ SubscriptBox["\[Product]", "i"], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", FormBox[ SubscriptBox["p", "i"], TraditionalForm], ")"}], SubscriptBox["f", "i"]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["f", "i"], TraditionalForm]]], " in \[DoubleStruckCapitalN]. Then one easily checks that" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], "=", FormBox[ RowBox[{ UnderscriptBox[ StyleBox["\[Product]", FontSize->18], "i"], SuperscriptBox[ SubscriptBox["p", "i"], RowBox[{"min", RowBox[{"{", RowBox[{ SubscriptBox["e", "i"], ",", SubscriptBox["f", "i"]}], "}"}]}]]}], TraditionalForm]}], TraditionalForm]]]], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppA gcd=ProdMin"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"lcm", "[", RowBox[{"a", ",", "b"}], "]"}], "=", RowBox[{ UnderscriptBox[ StyleBox["\[Product]", FontSize->18], "i"], SuperscriptBox[ SubscriptBox["p", "i"], RowBox[{"max", RowBox[{"{", RowBox[{ SubscriptBox["e", "i"], ",", SubscriptBox["f", "i"]}], "}"}]}]]}]}], TraditionalForm]]]], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppA lcm=ProdMax"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], " ", RowBox[{"lcm", "[", RowBox[{"a", ",", "b"}], "]"}]}], "=", RowBox[{"a", " ", "b"}]}], TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppA gcd lcm=mn"], Cell[TextData[{ "The ", StyleBox["Mathematica", FontSlant->"Italic"], " expression ", StyleBox["FactorInteger", FontVariations->{"Underline"->True}], " gives the factorization of an integer ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". The outcome is a list of pairs. Each pair contains a prime divisor of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and its exponent." }], "Text", CellChangeTimes->{{3.423460398674354*^9, 3.4234604119399796`*^9}}], Cell[BoxData[ RowBox[{"FactorInteger", "[", "123456789", "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"3607", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3803", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", "21375"}], ";", " ", RowBox[{"b", "=", " ", "89775"}], ";"}], "\n", RowBox[{"FactorInteger", "[", "a", "]"}], "\n", RowBox[{"FactorInteger", "[", "b", "]"}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"GCD", "[", RowBox[{"a", ",", "b"}], "]"}], "]"}], "\n", RowBox[{"FactorInteger", "[", RowBox[{"LCM", "[", RowBox[{"a", ",", "b"}], "]"}], "]"}], "\n", RowBox[{ RowBox[{ RowBox[{"GCD", "[", RowBox[{"a", ",", "b"}], "]"}], " ", RowBox[{"LCM", "[", RowBox[{"a", ",", "b"}], "]"}]}], " ", "==", " ", RowBox[{"a", " ", "b"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"19", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"19", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"19", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"3", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "3"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"19", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[BoxData["True"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], "\tEuclid's Algorithm" }], "Section", CellTags->"SectAppA Euclid"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " be two positive integers with ", Cell[BoxData[ FormBox[ RowBox[{"b", "\[GreaterEqual]", "a"}], TraditionalForm]]], ". Clearly, any divisor of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " is a divisor of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"b", "-", "a"}], TraditionalForm]]], " and vice versa. So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], "=", RowBox[{"gcd", "(", RowBox[{"a", ",", RowBox[{"b", "-", "a"}]}], ")"}]}], TraditionalForm]]], ". Writing ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", RowBox[{ RowBox[{"q", ".", "a"}], "+", "r"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "r", "<", "a"}], TraditionalForm]]], ", one has for the same reason that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], "=", RowBox[{"gcd", "(", RowBox[{"r", ",", "a"}], ")"}]}], TraditionalForm]]], ". If ", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"r", "=", "0"}]}], TraditionalForm]]], " (and ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", RowBox[{"q", ".", "a"}]}], TraditionalForm]]], "), we may conclude that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], "=", "a"}], TraditionalForm]]], ", otherwise we continue in the same way with ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ". So, we write ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{ RowBox[{ RowBox[{"q", "'"}], ".", "r"}], "+", RowBox[{"r", "'"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", RowBox[{"r", "'"}], "<", "r"}], TraditionalForm]]], ", have ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], "=", RowBox[{"gcd", "(", RowBox[{ RowBox[{"r", "'"}], ",", "r"}], ")"}]}], TraditionalForm]]], ", etc., until one of the arguments indeed divides the other. This algorithm \ is an extremely fast way of computing the gcd of two integers and it is known \ as ", StyleBox["Euclid's Algorithm", FontSlant->"Italic"], "." }], "Text"], Cell[TextData[{ StyleBox["Algorithm A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\tSimple Version of ", ButtonBox["Euclid", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Euclid of Alexandria"], "'s Algorithm\n\t", StyleBox["input\t\t", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"a", ",", " ", "b"}], TraditionalForm]]], " positive integers\n\t", StyleBox["while", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"b", ">", "0"}], TraditionalForm]]], StyleBox[" do\tbegin", FontWeight->"Bold"], "\n\t\t\t\t", StyleBox["put", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " as the remainder of the ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " after division by ", Cell[BoxData[ FormBox["b", TraditionalForm]]], ".\n\t\t\t\t(So, write ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{ RowBox[{"q", ".", "b"}], "+", "r"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "r", "<", "b"}], TraditionalForm]]], ".)\n\t\t\t\t", StyleBox["put", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", "b"}], TraditionalForm]]], "\n\t\t\t\t", StyleBox["pu", FontWeight->"Bold"], "t ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", "r"}], TraditionalForm]]], "\n\t\t\t\t", StyleBox["end", FontWeight->"Bold"], "\n\t", StyleBox["output", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox["a", TraditionalForm]]] }], "Theorem", CellTags->"AlgAppA Simple Euclid"], Cell[TextData[{ "With the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["While", FontVariations->{"Underline"->True}], ", ", StyleBox["Floor", FontVariations->{"Underline"->True}], ", and ", StyleBox["Print", FontVariations->{"Underline"->True}], " the above algorithm runs like this" }], "Text", CellChangeTimes->{ 3.423392491066374*^9, {3.423454549707062*^9, 3.4234545515976872`*^9}, { 3.423464586443308*^9, 3.423464587193322*^9}, 3.4234742969004107`*^9}], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", "1645"}], ";", " ", RowBox[{"b", "=", "861"}], ";"}], "\n", RowBox[{"While", "[", RowBox[{ RowBox[{"b", "\[NotEqual]", "0"}], ",", " ", RowBox[{ RowBox[{"r", "=", RowBox[{"a", "-", RowBox[{ RowBox[{"Floor", "[", RowBox[{"a", "/", "b"}], "]"}], "*", "b"}]}]}], ";", RowBox[{ RowBox[{"{", RowBox[{"a", ",", "b"}], "}"}], "=", RowBox[{"{", RowBox[{"b", ",", "r"}], "}"}]}], ";", RowBox[{"Print", "[", RowBox[{"{", RowBox[{"a", ",", "b"}], "}"}], "]"}]}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"861", ",", "784"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"784", ",", "77"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"77", ",", "14"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"14", ",", "7"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"7", ",", "0"}], "}"}]], "Print"], Cell[TextData[{ "If one also wants to find the coefficients ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " satisfying ", ButtonBox["Theorem A.3", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA GCD=ua+vb"], ", this algorithm can be adapted as described below. Note that by leaving \ out the lines involving the integers ", Cell[BoxData[ FormBox[ SubscriptBox["u", "i"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["v", "i"], TraditionalForm]]], ", this (extended) algorithm reduces to the simple version above." }], "Text"], Cell[TextData[{ StyleBox["Algorithm A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\tExtended Version of ", ButtonBox["Euclid", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Euclid of Alexandria"], "'s Algorithm\n\t", StyleBox["input", FontFamily->"Courier", FontWeight->"Bold"], StyleBox["\t\t", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"b", "\[GreaterEqual]", "a", ">", "0"}], TraditionalForm]]], "\n\t", StyleBox["initialize", FontFamily->"Courier", FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], "=", "b"}], TraditionalForm]]], "; ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "1"], "=", "a"}], TraditionalForm]]], ";\n\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "0"], "=", "0"}], TraditionalForm]]], "; ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "1"], "=", "1"}], TraditionalForm]]], "; ", Cell[BoxData[ RowBox[{ FormBox[ SubscriptBox["v", "0"], TraditionalForm], "=", "1"}]]], "; ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], "=", "0"}], TraditionalForm]]], ";", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox["", TraditionalForm], "n"}], "=", "1"}], TextForm]]], "\n\t", StyleBox["while", FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "n"], ">", "0"}], TraditionalForm]]], " ", StyleBox["do\tbegin", FontFamily->"Courier", FontWeight->"Bold"], StyleBox["\t\n\t\t\t\tput ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{"n", "+", "1"}]}], TraditionalForm]]], ";\n\t\t\t\t", StyleBox["write", FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["s", RowBox[{"n", "-", "2"}]], TraditionalForm], "=", RowBox[{ FormBox[ RowBox[{ FormBox[ SubscriptBox["q", "n"], TraditionalForm], SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], TraditionalForm], "+", FormBox[ SubscriptBox["s", "n"], TraditionalForm]}]}], TextForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", FormBox[ SubscriptBox["s", "n"], TraditionalForm], "<", FormBox[ SubscriptBox["s", RowBox[{"n", "-", "1"}]], TraditionalForm]}], TextForm]]], "\n\t\t\t\t", StyleBox["put", FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "n"], TraditionalForm], "=", RowBox[{ RowBox[{ FormBox[ SubscriptBox["q", "n"], TraditionalForm], " ", FormBox[ SubscriptBox["u", RowBox[{"n", "-", "1"}]], TraditionalForm]}], "+", FormBox[ SubscriptBox["u", RowBox[{"n", "-", "2"}]], TraditionalForm]}]}], TextForm]]], ";", StyleBox["\n\t\t\t\tp", FontWeight->"Bold"], StyleBox["ut", FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["v", "n"], TraditionalForm], "=", RowBox[{ RowBox[{ FormBox[ SubscriptBox["q", "n"], TraditionalForm], " ", FormBox[ SubscriptBox["v", RowBox[{"n", "-", "1"}]], TraditionalForm]}], "+", FormBox[ SubscriptBox["v", RowBox[{"n", "-", "2"}]], TraditionalForm]}]}], TextForm]]], ";\n\t\t\t\t", StyleBox["end", FontWeight->"Bold"], "\n\t", StyleBox["put", FontFamily->"Courier", FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{"u", "=", SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "n"]}], TraditionalForm], FormBox[ SubscriptBox["u", RowBox[{"n", "-", "1"}]], TraditionalForm]}], TextForm]]], "; ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{"v", "=", SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"n", "-", "1"}]]}], TraditionalForm], " ", FormBox[ SubscriptBox["v", RowBox[{"n", "-", "1"}]], TraditionalForm]}], TextForm]]], ";" }], "Theorem", CellTags->"AlgAppA ExtEuclidAlg"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], "=", RowBox[{ SubscriptBox["s", RowBox[{"n", "-", "1"}]], "=", RowBox[{ RowBox[{"u", ".", "a"}], "+", RowBox[{"v", ".", "b"}]}]}]}], TraditionalForm]]]], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormAppA gcd=ua+vb"], Cell[TextData[{ "Again Mathematica knows this extended version of Euclid's Algorithm as a \ standard function. It is called ", StyleBox["ExtendedGCD", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234640245876427`*^9, 3.4234640259158015`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"a", "=", "861"}], ";", " ", RowBox[{"b", "=", "1645"}], ";", " ", RowBox[{"ExtendedGCD", "[", RowBox[{"a", ",", "b"}], "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"7", ",", RowBox[{"{", RowBox[{"107", ",", RowBox[{"-", "56"}]}], "}"}]}], "}"}]], "Output"], Cell["Note that in the example above one indeed has that", "Text"], Cell[TextData[{ "7 = gcd(861,1645) = 107\[Times]861 ", Cell[BoxData[ FormBox["-", TraditionalForm]]], " 56\[Times]1645" }], "DisplayFormula"], Cell[TextData[{ StyleBox["Proof of Algorithm A.8:\n", FontWeight->"Bold"], "First observe that the elements ", Cell[BoxData[ FormBox[ SubscriptBox["s", "n"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[GreaterEqual]", "1"}], TraditionalForm]]], ", form a strictly decreasing sequence of non-negative integers. So the \ algorithm will terminate after at most ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " iterations. Later in this paragraph we shall analyze how fast Euclid's \ Algorithm really is. \nFrom the recurrence relation ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "k"], "=", RowBox[{ SubscriptBox["s", RowBox[{"k", "-", "2"}]], "-", RowBox[{ SubscriptBox["q", "k"], " ", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}]}]}], TraditionalForm]]], " the algorithm it follows that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], "=", RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"]}], ")"}], "=", RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"]}], ")"}], "=", RowBox[{"\[Ellipsis]", "=", RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["s", RowBox[{"n", "-", "1"}]], ",", SubscriptBox["s", "n"]}], ")"}], "=", RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["s", RowBox[{"n", "-", "1"}]], ",", "0"}], ")"}], "=", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}]}]}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "This proves the first equality in ", ButtonBox["(A.8)", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], ". We shall now prove that for all ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "k", "\[LessEqual]", "n"}], TraditionalForm]]], "," }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]], SubscriptBox["u", "k"], " ", "a"}], "+", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "k"], SubscriptBox["v", "k"], " ", "b"}]}], "=", SubscriptBox["s", "k"]}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Note that substitution of ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", RowBox[{"n", "-", "1"}]}], TraditionalForm]]], " in this relation proves the second equality in ", ButtonBox["(A.8)", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], ".\nFor ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "0"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "1"}], TraditionalForm]]], " the above relation holds by our choice of the initialization values for ", Cell[BoxData[ FormBox[ SubscriptBox["u", "0"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["u", "1"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["v", "0"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["v", "1"], TraditionalForm]]], ". We now proceed by induction. It follows from the recurrence relations in \ the algorithm and from the induction hypothesis, that " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "k"], "=", RowBox[{ RowBox[{ FormBox[ SubscriptBox["s", RowBox[{"k", "-", "2"}]], TraditionalForm], "-", FormBox[ RowBox[{ SubscriptBox["q", "k"], SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]}], "=", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ FormBox[ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "3"}]], TraditionalForm], SubscriptBox["u", RowBox[{"k", "-", "2"}]]}], TraditionalForm], " ", "a"}], "+", RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "2"}]], TraditionalForm], " ", FormBox[ SubscriptBox["v", RowBox[{"k", "-", "2"}]], TraditionalForm], " ", "b"}]}], "}"}], "-", RowBox[{ FormBox[ SubscriptBox["q", "k"], TraditionalForm], " ", RowBox[{"{", RowBox[{ RowBox[{ FormBox[ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "2"}]], TraditionalForm], SubscriptBox["u", RowBox[{"k", "-", "1"}]]}], TraditionalForm], " ", "a"}], "+", RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]], TraditionalForm], FormBox[ SubscriptBox["v", RowBox[{"k", "-", "2"}]], TraditionalForm], " ", "b"}]}], "}"}]}]}], "=", "\n", "\t\t\t", "\n", "\t\t\t", RowBox[{"=", RowBox[{ RowBox[{ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]], TraditionalForm], " ", FormBox[ RowBox[{"(", SubscriptBox["u", RowBox[{"k", "-", "2"}]]}], TraditionalForm]}], "+", RowBox[{ FormBox[ SubscriptBox["q", "k"], TraditionalForm], " ", FormBox[ RowBox[{ SubscriptBox["u", RowBox[{"k", "-", "1"}]], ")"}], TraditionalForm], "a"}], "+", RowBox[{ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "k"], "("}], TraditionalForm], FormBox[ SubscriptBox["v", RowBox[{"k", "-", "2"}]], TraditionalForm]}], "+", RowBox[{ FormBox[ SubscriptBox["q", "k"], TraditionalForm], " ", FormBox[ RowBox[{ SubscriptBox["v", RowBox[{"k", "-", "1"}]], ")"}], TraditionalForm], " ", "b"}]}], "=", RowBox[{ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]], TraditionalForm], " ", FormBox[ SubscriptBox["u", "k"], TraditionalForm], " ", "a"}], "+", RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "k"], TraditionalForm], " ", FormBox[ SubscriptBox["v", "k"], TraditionalForm], " ", RowBox[{"b", "."}]}]}]}]}]}]}]}], 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[{ "Of course there is no need to keep all the previously calculated values of \ ", Cell[BoxData[ FormBox[ SubscriptBox["s", "k"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["u", "k"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["v", "k"], TraditionalForm]]], " stored in the program. Only the last two of each together with ", Cell[BoxData[ FormBox[ SubscriptBox["q", "k"], TraditionalForm]]], " will suffice. The reason for introducing them in the algorithm was only to \ facilitate the readability of the proof above." }], "Text"], Cell[TextData[{ "With the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["While", FontVariations->{"Underline"->True}], ", ", StyleBox["Floor", FontVariations->{"Underline"->True}], ", and ", StyleBox["Print", FontVariations->{"Underline"->True}], ", the above algorithm runs like this:" }], "Text", CellChangeTimes->{ 3.423392497410164*^9, {3.4234545561601872`*^9, 3.423454558019562*^9}, { 3.423464592568425*^9, 3.423464594177831*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"b", "=", "1645"}], ";", RowBox[{"a", "=", "861"}], ";"}], "\n", RowBox[{ RowBox[{"n", "=", "1"}], ";"}], "\n", RowBox[{ RowBox[{"so", "=", "b"}], ";", RowBox[{"sn", "=", "a"}], ";"}], "\n", RowBox[{ RowBox[{"uo", "=", "0"}], ";", RowBox[{"un", "=", "1"}], ";"}], "\n", RowBox[{ RowBox[{"vo", "=", "1"}], ";", RowBox[{"vn", "=", "0"}], ";"}], "\n", RowBox[{"While", "[", RowBox[{ RowBox[{"sn", "\[NotEqual]", "0"}], ",", "\t\t\t", RowBox[{ RowBox[{"Print", "[", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"n", "-", "1"}]], ",", "\"\<\[Times]\>\"", ",", "un", ",", "\"\<\[Times]\>\"", ",", "a", ",", "\"\< + \>\"", ",", SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "n"], ",", "\"\<\[Times]\>\"", ",", "vn", ",", "\"\<\[Times]\>\"", ",", "b", ",", "\"\<=\>\"", ",", "sn"}], "]"}], ";", "\t\t\t", RowBox[{"q", "=", RowBox[{"Floor", "[", RowBox[{"so", "/", "sn"}], "]"}]}], ";", RowBox[{"n", "=", RowBox[{"n", "+", "1"}]}], ";", "\t\t\t", RowBox[{ RowBox[{"{", RowBox[{"so", ",", "sn", ",", "uo", ",", "un", ",", "vo", ",", "vn"}], "}"}], "=", RowBox[{"{", RowBox[{"sn", ",", RowBox[{"so", "-", RowBox[{"q", "*", "sn"}]}], ",", "un", ",", RowBox[{ RowBox[{"q", "*", "un"}], "+", "uo"}], ",", "vn", ",", RowBox[{ RowBox[{"q", "*", "vn"}], "+", "vo"}]}], "}"}]}]}]}], "]"}]}], "Input",\ GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{ "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "861", "\[InvisibleSpace]", "\<\" + \"\>", "\[InvisibleSpace]", RowBox[{"-", "1"}], "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "0", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1645", "\[InvisibleSpace]", "\<\"=\"\>", "\[InvisibleSpace]", "861"}], SequenceForm[ 1, "\[Times]", 1, "\[Times]", 861, " + ", -1, "\[Times]", 0, "\[Times]", 1645, "=", 861], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"-", "1"}], "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "861", "\[InvisibleSpace]", "\<\" + \"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1645", "\[InvisibleSpace]", "\<\"=\"\>", "\[InvisibleSpace]", "784"}], SequenceForm[-1, "\[Times]", 1, "\[Times]", 861, " + ", 1, "\[Times]", 1, "\[Times]", 1645, "=", 784], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "861", "\[InvisibleSpace]", "\<\" + \"\>", "\[InvisibleSpace]", RowBox[{"-", "1"}], "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1645", "\[InvisibleSpace]", "\<\"=\"\>", "\[InvisibleSpace]", "77"}], SequenceForm[ 1, "\[Times]", 2, "\[Times]", 861, " + ", -1, "\[Times]", 1, "\[Times]", 1645, "=", 77], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"-", "1"}], "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "21", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "861", "\[InvisibleSpace]", "\<\" + \"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "11", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1645", "\[InvisibleSpace]", "\<\"=\"\>", "\[InvisibleSpace]", "14"}], SequenceForm[-1, "\[Times]", 21, "\[Times]", 861, " + ", 1, "\[Times]", 11, "\[Times]", 1645, "=", 14], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ "1", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "107", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "861", "\[InvisibleSpace]", "\<\" + \"\>", "\[InvisibleSpace]", RowBox[{"-", "1"}], "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "56", "\[InvisibleSpace]", "\<\"\[Times]\"\>", "\[InvisibleSpace]", "1645", "\[InvisibleSpace]", "\<\"=\"\>", "\[InvisibleSpace]", "7"}], SequenceForm[ 1, "\[Times]", 107, "\[Times]", 861, " + ", -1, "\[Times]", 56, "\[Times]", 1645, "=", 7], Editable->False]], "Print"], Cell[TextData[{ "We would like to conclude this section by saying something about the \ complexity of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], ". It may be clear that this algorithm is at it slowest if at each step the \ quotient ", Cell[BoxData[ FormBox[ SubscriptBox["q", "k"], TraditionalForm]]], " has value 1 (if possible). This is the case if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", RowBox[{"k", "-", "2"}]], "=", RowBox[{ SubscriptBox["s", RowBox[{"k", "-", "1"}]], "+", SubscriptBox["s", "k"]}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "k", "\[LessEqual]", RowBox[{"n", "-", "1"}]}], TraditionalForm]]], " and that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", RowBox[{"n", "-", "2"}]], "=", RowBox[{"2", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "n"], "=", "0"}], TraditionalForm]]], ". In other words, the smallest value of ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " (and arbitrary ", Cell[BoxData[ FormBox[ RowBox[{"0", "<", "a", "<", "b"}], TraditionalForm]]], ") such that the evaluation of ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], TraditionalForm]]], " takes ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], " steps is given by ", Cell[BoxData[ FormBox[ RowBox[{"b", "=", SubscriptBox["F", "n"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", SubscriptBox["F", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], ", where the ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{ FormBox[ RowBox[{"{", SubscriptBox["F", "i"]}], TraditionalForm], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " sequence is the famous sequence of ", StyleBox["Fibonacci numbers", FontSlant->"Italic"], " defined by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", "0"], "=", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", "1"], "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", RowBox[{"i", "+", "2"}]], "=", RowBox[{ SubscriptBox["F", RowBox[{"i", "+", "1"}]], "+", SubscriptBox["F", "i"]}]}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "Text", CellTags->"DefAppA Fibonnaci"], Cell[TextData[{ "By letting ", StyleBox["Mathematica ", FontSlant->"Italic"], "operate repeatedly on a list of two consecutive Fibonnacci numbers (the \ function ", StyleBox["Nest", FontVariations->{"Underline"->True}], " is used for this), one gets the following method to evaluate these numbers \ (in the example ", Cell[BoxData[ FormBox[ SubscriptBox["F", "100"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["F", "101"], TraditionalForm]]], " are computed):" }], "Text", CellChangeTimes->{{3.423474312447385*^9, 3.4234743168849134`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"f", "[", RowBox[{"{", RowBox[{"u_", ",", "v_"}], "}"}], "]"}], ":=", RowBox[{"{", RowBox[{"v", ",", RowBox[{"u", "+", "v"}]}], "}"}]}], "\n", RowBox[{ RowBox[{ RowBox[{"n", "=", "100"}], ";", RowBox[{"Nest", "[", RowBox[{"f", ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", "n"}], "]"}]}], "\t"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"354224848179261915075", ",", "573147844013817084101"}], "}"}]], "Output"], Cell[TextData[{ "This could also have been done directly with the function ", StyleBox["Fibonacci", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4234743493694963`*^9, 3.423474355994539*^9}}], Cell[BoxData[ RowBox[{"Fibonacci", "[", "100", "]"}]], "Input"], Cell[BoxData["354224848179261915075"], "Output"], Cell["\<\ The reader may check the above analysis in the following way.\ \>", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"GCDiterations", "[", RowBox[{ RowBox[{"n_Integer", "?", "Positive"}], ",", " ", RowBox[{"m_Integer", "?", "Positive"}]}], "]"}], " ", ":=", " ", RowBox[{"Block", "[", " ", RowBox[{ RowBox[{"{", " ", RowBox[{ RowBox[{"a", "=", "n"}], ",", " ", RowBox[{"b", "=", "m"}], ",", " ", "r", ",", " ", RowBox[{"t", "=", "0"}]}], "}"}], ",", "\t\t\t\t\t\t\t", RowBox[{ RowBox[{"While", "[", " ", RowBox[{ RowBox[{"b", " ", ">", " ", "0"}], ",", RowBox[{ RowBox[{"r", " ", "=", " ", RowBox[{"Mod", "[", RowBox[{"a", ",", "b"}], "]"}]}], ";", RowBox[{ RowBox[{"{", RowBox[{"a", ",", "b", ",", "t"}], "}"}], "=", RowBox[{"{", RowBox[{"b", ",", "r", ",", RowBox[{"t", "+", "1"}]}], "}"}]}]}]}], "]"}], ";", "\t\t\t\t\t\t\t", "t"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "100"}], ";"}], "\n", RowBox[{"GCDiterations", "[", RowBox[{ RowBox[{"Fibonacci", "[", "n", "]"}], ",", RowBox[{"Fibonacci", "[", RowBox[{"n", "-", "1"}], "]"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["98"], "Output"], Cell[BoxData[ RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"GCDiterations", "[", " ", RowBox[{ RowBox[{"Fibonacci", "[", "n", "]"}], ",", " ", RowBox[{"Fibonacci", "[", RowBox[{"n", "-", "1"}], "]"}]}], " ", "]"}], ",", " ", RowBox[{"{", RowBox[{"n", ",", " ", "2", ",", " ", "100"}], "}"}]}], " ", "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6", ",", "7", ",", "8", ",", "9", ",", "10", ",", "11", ",", "12", ",", "13", ",", "14", ",", "15", ",", "16", ",", "17", ",", "18", ",", "19", ",", "20", ",", "21", ",", "22", ",", "23", ",", "24", ",", "25", ",", "26", ",", "27", ",", "28", ",", "29", ",", "30", ",", "31", ",", "32", ",", "33", ",", "34", ",", "35", ",", "36", ",", "37", ",", "38", ",", "39", ",", "40", ",", "41", ",", "42", ",", "43", ",", "44", ",", "45", ",", "46", ",", "47", ",", "48", ",", "49", ",", "50", ",", "51", ",", "52", ",", "53", ",", "54", ",", "55", ",", "56", ",", "57", ",", "58", ",", "59", ",", "60", ",", "61", ",", "62", ",", "63", ",", "64", ",", "65", ",", "66", ",", "67", ",", "68", ",", "69", ",", "70", ",", "71", ",", "72", ",", "73", ",", "74", ",", "75", ",", "76", ",", "77", ",", "78", ",", "79", ",", "80", ",", "81", ",", "82", ",", "83", ",", "84", ",", "85", ",", "86", ",", "87", ",", "88", ",", "89", ",", "90", ",", "91", ",", "92", ",", "93", ",", "94", ",", "95", ",", "96", ",", "97", ",", "98"}], "}"}]], "Output"], Cell[TextData[{ "Note that the GCDiterations algorithm above does not affect the values of \ ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " (contrary to our implementation of the simple version of ", ButtonBox["Euclid's algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA Simple Euclid"], "). It also makes use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Mod", FontVariations->{"Underline"->True}], " that will be discussed in the next section." }], "Text", CellChangeTimes->{3.423396310215816*^9}], Cell[TextData[{ "Plugging in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", "n"], "=", RowBox[{"c", " ", SuperscriptBox["f", "n"]}]}], TraditionalForm]]], " in the defining recurrence relation of the Fibonacci numbers, so in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", RowBox[{"i", "+", "2"}]], "=", RowBox[{ SubscriptBox["F", RowBox[{"i", "+", "1"}]], "+", SubscriptBox["F", "i"]}]}], TraditionalForm]]], ", leads to the quadratic equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", "2"], "=", RowBox[{"f", "+", "1"}]}], TraditionalForm]]], ", which has as zero's: ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"1", "\[PlusMinus]", SqrtBox["5"]}], "2"], TraditionalForm]]], ". Without proof we state the following upperbound on the complexity of \ Euclid's Algorithm. The reader may prove it with induction on b (distinguish \ the cases ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[LessEqual]", FractionBox["b", "f"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox["b", "f"], "<", "a", "\[LessEqual]", "b"}], TraditionalForm]]], ")." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold"], "Complexity of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], "\nLet a and b be positive integers, ", Cell[BoxData[ FormBox[ RowBox[{"b", "\[GreaterEqual]", "a"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"b", "\[NotEqual]", "1"}], ","}], TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ RowBox[{"f", "=", FractionBox[ RowBox[{"1", " ", "+", " ", FormBox[ SqrtBox["5"], TraditionalForm]}], "2"]}], TraditionalForm]]], ". Then the number of iterations, that Euclid's Algorithm will need to \ compute ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"a", ",", "b"}], ")"}], TraditionalForm]]], " is at most ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "f"], "b"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Compl Eucl"], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", RowBox[{"Fibonacci", "[", "100", "]"}]}], ";", " ", RowBox[{"b", "=", RowBox[{"Fibonacci", "[", "99", "]"}]}], ";"}], "\n", RowBox[{"GCDiterations", "[", RowBox[{"a", ",", "b"}], "]"}], "\n", RowBox[{"Ceiling", "[", RowBox[{"Log", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", "+", RowBox[{"Sqrt", "[", "5", "]"}]}], ")"}], "/", "2"}], " ", ",", "b"}], "]"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["98"], "Output"], Cell[BoxData["98"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], "\tCongruences, Fermat, Euler, Chinese Remainder Theorem" }], "Section", CellBaseline->Top, CellTags->"SecAppA Congruences"], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tCongruences" }], "Subsection", CellTags->"SubSecA Congruences"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nTwo integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " are said to be ", StyleBox["congruent", FontSlant->"Italic"], " to each other", StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], StyleBox["modulo", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", if their difference ", Cell[BoxData[ FormBox[ RowBox[{"b", "-", "a"}], TraditionalForm]]], " is divisible by ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". This is denoted by\n\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppA Congr Rel"], Cell[TextData[{ "The ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Mod", FontVariations->{"Underline"->True}], Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{"a", ",", "m"}]}], TraditionalForm]]], "] gives the unique integer ", Cell[BoxData[ FormBox[ RowBox[{"r", ",", " ", RowBox[{"0", "\[LessEqual]", " ", "r", "<", "m"}]}], TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"r", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", CellChangeTimes->{3.4233963150127215`*^9}], Cell[BoxData[ RowBox[{ RowBox[{"a", "=", "12345"}], ";", " ", RowBox[{"m", "=", "13"}], ";", " ", RowBox[{"Mod", "[", RowBox[{"a", ",", "m"}], "]"}]}]], "Input"], Cell[BoxData["8"], "Output"], Cell[TextData[{ "An easy test if the integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " are congruent of each other modulo m is given by the following example:" }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "13"}], ";", " ", RowBox[{"a", "=", "12345"}], ";", " ", RowBox[{"b", "=", "103579"}], ";", " ", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", "-", "b"}], ",", "m"}], "]"}], "==", "0"}]}]], "Input"], Cell[BoxData["True"], "Output"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA set of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " integers ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "m"]}], TraditionalForm]]], " is called a", StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], StyleBox["complete residue system", FontSlant->"Italic"], " modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", if each integer is congruent to (exactly) one of the elements ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], ", modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Definition", CellTags->"DefAppA compl resid"], Cell[TextData[{ "The most commonly used complete residue systems modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " are the sets ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", " ", ",", RowBox[{"m", "-", "1"}]}], "}"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "m"}], "}"}], TraditionalForm]]], ". With the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Range", FontVariations->{"Underline"->True}], " and ", StyleBox["Table", FontVariations->{"Underline"->True}], " one can generate these systems." }], "Text", CellChangeTimes->{ 3.423393931700594*^9, {3.4234704717254395`*^9, 3.423470472928572*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "10"}], ";"}], "\n", RowBox[{"Table", "[", RowBox[{"i", ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", RowBox[{"m", "-", "1"}]}], "}"}]}], "]"}], "\n", RowBox[{"Range", "[", "m", "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "0", ",", "1", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6", ",", "7", ",", "8", ",", "9"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6", ",", "7", ",", "8", ",", "9", ",", "10"}], "}"}]], "Output"], Cell[TextData[{ "Clearly the ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " integers ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], ", form a complete residue system modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " ", "if and only if", " for each pair ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"j", "\[LessEqual]", "m"}], TraditionalForm]]], " one has that" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", "i"], "\[Congruent]", RowBox[{ SubscriptBox["a", "j"], " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}], " ", "\[DoubleLongRightArrow]", " ", "i"}]}]}], "=", "j"}], TraditionalForm]]]], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppA ai=aj ->i=j"], Cell[TextData[{ "The congruence relation \[Congruent] modulo defines an ", ButtonBox["equivalence relation", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Equiv Rel"], " (see Definition B.5 ) on \[DoubleStruckCapitalZ]. A complete residue \ system is just a set of representatives of the ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " equivalence classes." }], "Text"], Cell[TextData[{ StyleBox["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ RowBox[{"k", " ", "a"}], "\[Congruent]", RowBox[{"k", " ", "b", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"k", ",", "m"}], ")"}], "=", "d"}], TraditionalForm]]], ". Then\n\n\t\t ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"m", "/", "d"}]}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"LemAppA DivEqRelByK"], Cell[TextData[{ StyleBox["Proof: ", FontWeight->"Bold"], "Write ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", RowBox[{ RowBox[{"k", "'"}], "d"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{"m", "'"}], " ", "d"}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"k", "'"}], ",", RowBox[{"m", "'"}]}], ")"}], "=", "1"}], TraditionalForm]]], ". It follows from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"k", " ", "a"}], "-", RowBox[{"k", " ", "b"}]}], "=", RowBox[{"x", " ", "m"}]}], TraditionalForm]]], ", for some ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Element]", "\[DoubleStruckCapitalZ]"}], TraditionalForm]]], ", that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"k", "'"}], RowBox[{"(", RowBox[{"a", "-", "b"}], ")"}]}], "=", RowBox[{"x", " ", RowBox[{"m", "'"}]}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"m", "'"}], ",", RowBox[{"k", "'"}]}], ")"}], "=", "1"}], TraditionalForm]]], ", it follows from ", ButtonBox["Lemma A.4", BaseStyle->"Hyperlink", ButtonData:>"LemAppA d Div ab"], " that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "'"}], "|", RowBox[{"(", RowBox[{"a", "-", "b"}], ")"}]}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"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["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "m"]}], TraditionalForm]]], " be a complete residue system modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"k", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], ".\nThen ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", " ", SubscriptBox["a", "1"]}], ",", RowBox[{"k", " ", SubscriptBox["a", "2"]}], ",", "\[Ellipsis]", ",", RowBox[{"k", " ", SubscriptBox["a", "m"]}]}], TraditionalForm]]], " is also a complete residue system modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Theorem", CellTags->"LemAppA Also ka_i is CRS"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], " We use criterion ", ButtonBox["(A.9)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA ai=aj ->i=j"], ". By ", ButtonBox["Lemma A.10", BaseStyle->"Hyperlink", ButtonData:>"LemAppA DivEqRelByK"], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", " ", SubscriptBox["a", "i"]}], "\[Congruent]", RowBox[{"k", " ", SubscriptBox["a", "j"], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " implies that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "\[Congruent]", RowBox[{ SubscriptBox["a", "j"], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ". This in turn implies that ", Cell[BoxData[ FormBox[ RowBox[{"i", "=", "j"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tEuler and Fermat" }], "Subsection", CellTags->"SubsAppA Euler"], Cell[TextData[{ "Often we shall only be interested in representatives of those residue \ classes modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", whose elements have coprime with ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". The number of these classes is denoted by the following function." }], "Text"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nThe ", StyleBox["Euler's Totient Function \[Phi]", FontSlant->"Italic"], StyleBox[" (see ", FontColor->RGBColor[0, 0, 0.500008]], ButtonBox["Euler", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Leonhard Euler"], StyleBox[") ", FontColor->RGBColor[0, 0, 0.500008]], "is defined by\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Phi]", "(", "m", ")"}], "=", RowBox[{"|", RowBox[{"{", " ", RowBox[{ RowBox[{ RowBox[{"0", "\[LessEqual]", "i", "<", "m"}], " ", "|", " ", RowBox[{"gcd", "(", RowBox[{"i", ",", "m"}], ")"}]}], "=", "1"}], " ", "}"}], "|"}]}], TraditionalForm]]], ".\n\nIn words, ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "m", ")"}], TraditionalForm]]], " is the number of integers in between 0 and ", Cell[BoxData[ FormBox[ RowBox[{"m", "-", "1"}], TraditionalForm]]], " that are coprime with ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Definition", CellTags->"DefAppA Euler Totient"], Cell[TextData[{ "In ", StyleBox["Mathematica", FontSlant->"Italic"], ", this function can be evaluated with the ", StyleBox["EulerPhi", FontVariations->{"Underline"->True}], " function. For instance" }], "Text", CellChangeTimes->{{3.4234553324997916`*^9, 3.4234553468590746`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "15"}], ";", " ", RowBox[{"EulerPhi", "[", "m", "]"}]}]], "Input"], Cell[BoxData["8"], "Output"], Cell["\<\ corresponding to the eight elements: 1, 2, ,4, 7, 8, 11, 13, and 14. Later on \ in this section, we see how the function \[Phi](m) can be efficiently \ computed.\ \>", "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nFor all positive integers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " \n\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", "m"}]], RowBox[{"\[CurlyPhi]", "(", "d", ")"}]}], "=", "m"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Sum Phi=n"], Cell[TextData[{ "It is quite easy to see in an example which of the m integers in between 1 \ and ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " are contributing to which term ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "d", ")"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", "m"}], TraditionalForm]]], ". When ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "15"}], TraditionalForm]]], ", we have the divisors 1, 3, 5 and 15 of m. The eight elements 1, 2, ,4, 7, \ 8, 11, 13, 14 all have gcd 1 with 15 (note that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Phi]", "(", "15", ")"}], "=", "8"}], TraditionalForm]]], ") , the four (", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"\[Phi]", "(", "5", ")"}]}], TraditionalForm]]], ") elements 3, 6, 9, 12 have ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "=", "3"}], TraditionalForm]]], " with 15, the two (", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"\[Phi]", "(", "3", ")"}]}], TraditionalForm]]], ") elements 5, 10 have ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "=", "5"}], TraditionalForm]]], " and the single (", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"\[Phi]", "(", "1", ")"}]}], TraditionalForm]]], ") element 0 has ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "=", "15"}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ StyleBox["Proof of Theorem A.12:\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " divide ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". By writing ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", RowBox[{"i", " ", "d"}]}], TraditionalForm]]], " one sees immediately that the number of elements ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "r", "<", "m"}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"r", ",", "m"}], ")"}], " ", "=", "d"}], TraditionalForm]]], " is equal to the number of integers ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", FractionBox["m", "d"]}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"i", ",", FractionBox["m", "d"]}], ")"}], "=", "1"}], TraditionalForm]]], ", therefore, this number is ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", FractionBox["m", "d"], ")"}], TraditionalForm]]], ".\nOn the other hand, ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"r", ",", "m"}], ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " for each integer ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "r", "<", "m"}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox[ StyleBox["\[Sum]", FontSize->6], RowBox[{"d", "|", "m"}]], RowBox[{"\[Phi]", "(", FractionBox["m", "d"], ")"}]}], "=", "m"}], TraditionalForm]]], ". This statement is equivalent to what needs to be proved." }], "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 following non-standard ", StyleBox["Mathematica", FontSlant->"Italic"], " statement evaluates sums of function values ", Cell[BoxData[ FormBox[ RowBox[{"f", "[", "d", "]"}], TraditionalForm]]], " over all divisors ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " of a given integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". " }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"DivisorSum", "[", RowBox[{"f_", ",", "m_"}], "]"}], ":=", " ", RowBox[{"Plus", " ", "@@", " ", RowBox[{"(", RowBox[{"f", " ", "/@", " ", RowBox[{"Divisors", "[", "m", "]"}]}], ")"}]}]}]], "Input", GeneratedCell->True, CellTags->"FunctAppA Divisor sum"], Cell[TextData[{ "One can use this function to check ", ButtonBox["Theorem A.12", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Phi=n"], "." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "15"}], ";", RowBox[{"DivisorSum", "[", RowBox[{"EulerPhi", ",", " ", "m"}], "]"}]}]], "Input"], Cell[BoxData["15"], "Output", CellChangeTimes->{3.423369306746431*^9}], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA set of ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "m", ")"}], TraditionalForm]]], " integers ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["r", "1"], ",", SubscriptBox["r", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["r", RowBox[{"\[Phi]", "(", "m", ")"}]]}], TraditionalForm]]], " is called a ", StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], StyleBox["reduced residue system", FontSlant->"Italic"], " modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " if each integer ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"j", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], ", is congruent to (exactly) one of the elements ", Cell[BoxData[ FormBox[ SubscriptBox["r", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"\[Phi]", "(", "m", ")"}]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppA Reduced RS"], Cell["\<\ A reduced residue system can be quite easily generated by means of the \ following newly defined functions. \ \>", "Text"], Cell["The function CoPrimeQ tests if two numbers are comprime.", "Text", CellChangeTimes->{{3.4234634905569363`*^9, 3.423463535746171*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"CoPrimeQ", "[", RowBox[{"n_Integer", ",", " ", "m_Integer"}], "]"}], " ", ":=", " ", RowBox[{ RowBox[{"GCD", "[", RowBox[{"n", ",", " ", "m"}], "]"}], " ", "==", " ", "1"}]}]], "Input", GeneratedCell->True], Cell[BoxData[{ RowBox[{"CoPrimeQ", "[", RowBox[{"35", ",", "91"}], "]"}], "\n", RowBox[{"CoPrimeQ", "[", RowBox[{"36", ",", "91"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["False"], "Output"], Cell[BoxData["True"], "Output"], Cell[TextData[{ "The function CoPrime", Cell[BoxData[ FormBox[ RowBox[{"[", "m", "]"}], TraditionalForm]]], " generates all integers ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " in between 1 and ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " that are coprime with ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". It also makes use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Select", FontVariations->{"Underline"->True}], " and ", StyleBox["Range", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423463544230872*^9, 3.4234636372496023`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"CoPrimes", "[", RowBox[{"n_Integer", "?", "Positive"}], "]"}], " ", ":=", " ", RowBox[{"Select", "[", " ", RowBox[{ RowBox[{"Range", "[", "n", "]"}], ",", " ", RowBox[{ RowBox[{"CoPrimeQ", "[", RowBox[{"n", ",", " ", "#"}], "]"}], "&"}]}], " ", "]"}]}]], "Input", CellChangeTimes->{3.4234634454927053`*^9}, CellTags->"InputAppA CoPrimes"], Cell[BoxData[ RowBox[{"CoPrimes", "[", "15", "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "2", ",", "4", ",", "7", ",", "8", ",", "11", ",", "13", ",", "14"}], "}"}]], "Output"], Cell[TextData[{ "Analogously to ", ButtonBox["Lemma A.11", BaseStyle->"Hyperlink", ButtonData:>"LemAppA Also ka_i is CRS"], " one has the following lemma." }], "Text"], Cell[TextData[{ StyleBox["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["r", "1"], ",", SubscriptBox["r", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["r", RowBox[{"\[Phi]", "(", "m", ")"}]]}], TraditionalForm]]], " be a reduced residue system modulo m and let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], ".\nThen ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", SubscriptBox["r", "1"]}], ",", RowBox[{"a", " ", SubscriptBox["r", "2"]}], ",", "\[Ellipsis]", ",", RowBox[{"a", " ", SubscriptBox["r", RowBox[{"\[Phi]", "(", "m", ")"}]]}]}], TraditionalForm]]], " is also a reduced residue system modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Theorem", CellTags->"LemAppA AR_i also Red"], Cell[TextData[{ "With the above lemma one can easily prove that the classes in a reduced \ residue system form a ", ButtonBox["multiplicative group", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], " (see Subsection B.1.1)." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\t(see ", ButtonBox["Euler", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Leonhard Euler"], ")\nLet ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be two integers that are coprime. Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{"\[CurlyPhi]", "(", "m", ")"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Euler"], Cell["It is quite easy to check this theorem in concrete cases.", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "12345"}], ";", " ", RowBox[{"a", "=", " ", "11111"}], ";", " ", RowBox[{"GCD", "[", RowBox[{"m", ",", "a"}], "]"}]}], "\n", RowBox[{"EulerPhi", "[", "m", "]"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", "^", RowBox[{"EulerPhi", "[", "m", "]"}]}], ",", "m"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output"], Cell[BoxData["6576"], "Output"], Cell[BoxData["1"], "Output"], Cell[TextData[{ "Exponentiations modulo some integer can be performed much faster in ", StyleBox["Mathematica", FontSlant->"Italic"], " with the ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{"a", ",", "b", ",", "m"}], "]"}], TraditionalForm]]], " function, which reduces all intermediate results in the computation of ", Cell[BoxData[ FormBox[ SuperscriptBox["a", "b"], TraditionalForm]]], " modulo", Cell[BoxData[ FormBox[ RowBox[{" ", "m"}], TraditionalForm]]], ".:" }], "Text", CellChangeTimes->{{3.42346082600448*^9, 3.4234608281919937`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "123456789"}], ";", " ", RowBox[{"a", "=", " ", "1111111111"}], ";", " ", RowBox[{"GCD", "[", RowBox[{"m", ",", "a"}], "]"}]}], "\n", RowBox[{"PowerMod", "[", RowBox[{"a", ",", " ", RowBox[{"EulerPhi", "[", "m", "]"}], ",", " ", "m"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output"], Cell[BoxData["1"], "Output"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], " Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["r", "1"], ",", SubscriptBox["r", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["r", RowBox[{"\[Phi]", "(", "m", ")"}]]}], TraditionalForm]]], " be a reduced residue system modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". By ", ButtonBox["Lemma A.13", BaseStyle->"Hyperlink", ButtonData:>"LemAppA AR_i also Red"] }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"\[Phi]", RowBox[{"(", "m", ")"}]}]], SubscriptBox["r", "i"]}], " ", "\[Congruent]", " ", FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"\[Phi]", "(", "m", ")"}]], RowBox[{"(", RowBox[{"a", " ", SubscriptBox["r", "i"]}], ")"}]}], TraditionalForm], " ", "\[Congruent]", " ", RowBox[{ FormBox[ SuperscriptBox["a", RowBox[{ RowBox[{"\[Phi]", "(", "m", ")"}], " "}]], TraditionalForm], " ", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"\[Phi]", RowBox[{"(", "m", ")"}]}]], RowBox[{ SubscriptBox["r", "i"], " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}], "."}]}]}]}]}], TextForm]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Since each factor ", Cell[BoxData[ FormBox[ SubscriptBox["r", "i"], TraditionalForm]]], " is coprime with m, one can divide both hands by ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"\[Phi]", "(", "m", ")"}]], SubscriptBox["r", "i"]}], TraditionalForm]]], " by ", ButtonBox["Lemma A.10", BaseStyle->"Hyperlink", ButtonData:>"LemAppA DivEqRelByK"], ". This results in 1\[Congruent] ", Cell[BoxData[ FormBox[ SuperscriptBox["a", RowBox[{"\[Phi]", "(", "m", ")"}]], TraditionalForm]]], " (mod m)." }], "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 p be a prime number. Since every integer i, ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", " ", "i", "<", "p"}], TraditionalForm]]], ", is coprime with p, it follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Phi]", "(", "p", ")"}], "=", RowBox[{"p", "-", "1"}]}], TraditionalForm]]], ". ", ButtonBox["Euler's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler"], " implies the next theorem for all values of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " except for ", Cell[BoxData[ FormBox["a", TraditionalForm]]], "'s that are a multiple of p. For these values, the statement in the next \ theorem is trivially satisfied. " }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\t", ButtonBox["Fermat", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Pierre de Fermat"], "'s Little Theorem\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be a prime number and let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " be any integer. Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "p"], "\[Congruent]", RowBox[{"a", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Fermat"], Cell[TextData[{ "This can easily be checked in individual cases with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423460832348271*^9, 3.4234608330982757`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", " ", "98947"}], ";", " ", RowBox[{"a", "=", " ", "12345"}], ";", " ", RowBox[{"PrimeQ", "[", "p", "]"}]}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"a", ",", "p", ",", "p"}], "]"}], "==", "a"}]}], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output"], Cell[BoxData["True"], "Output"], Cell[TextData[{ "As we have just observed, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Phi]", "(", "p", ")"}], "=", RowBox[{"p", "-", "1"}]}], TraditionalForm]]], " for prime. Because exactly one of every p consecutive integers is \ divisible by p, we have the following stronger result:" }], "Text"], Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ RowBox[{"\[Phi]", "(", SuperscriptBox["p", "e"], ")"}], "=", RowBox[{ RowBox[{ SuperscriptBox["p", "e"], "-", RowBox[{"(", RowBox[{ SuperscriptBox["p", "e"], "/", "p"}], ")"}]}], "=", RowBox[{ RowBox[{ SuperscriptBox["p", RowBox[{"e", "-", "1"}]], "(", RowBox[{"p", "-", "1"}], ")"}], "=", RowBox[{ SuperscriptBox["p", "e"], "(", RowBox[{"1", "-", FractionBox["1", "p"]}], ")"}]}]}]}], TraditionalForm], " ", "."}], TextForm]], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppA Phi p^e="], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA function ", Cell[BoxData[ FormBox[ RowBox[{"f", ":", " ", RowBox[{ "\[DoubleStruckCapitalN]", "\[LongRightArrow]", "\[DoubleStruckCapitalN]"}]}], TraditionalForm]]], " is said to be ", StyleBox["multiplicative", FontSlant->"Italic"], ", if for every pair of positive integers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", "n"}], ")"}], " ", "=", RowBox[{ RowBox[{"1", " ", "\[DoubleLongRightArrow]", " ", RowBox[{"f", "(", RowBox[{"m", ".", "n"}], ")"}]}], "=", RowBox[{ RowBox[{"f", "(", "m", ")"}], RowBox[{"f", "(", "n", ")"}]}]}]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppA multiplicative"], Cell[TextData[{ StyleBox["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Euler's Totient function ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "m", ")"}], TraditionalForm]]], " is multiplicative." }], "Theorem", CellTags->"LemAppA Phi is mult"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], " Let ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be coprime and let ", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ FormBox[ SubscriptBox["a", "1"], TraditionalForm], ",", FormBox[ SubscriptBox["a", "2"], TraditionalForm], ",", "\[Ellipsis]", " ", ",", FormBox[ SubscriptBox["a", RowBox[{"\[Phi]", "(", "m", ")"}]], TraditionalForm]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["b", "1"], TraditionalForm], ",", FormBox[ SubscriptBox["b", "2"], TraditionalForm], ",", "\[Ellipsis]", " ", ",", FormBox[ SubscriptBox["b", RowBox[{"\[Phi]", "(", "n", ")"}]], TraditionalForm]}], TraditionalForm]]], " be ", ButtonBox["reduced residue systems", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Reduced RS"], " modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". It suffices to show that the ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Phi]", "(", "m", ")"}], " ", RowBox[{"\[Phi]", "(", "n", ")"}]}], TraditionalForm]]], " integers ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", ".", SubscriptBox["a", RowBox[{"i", " "}]]}], "+", RowBox[{"m", ".", SubscriptBox["b", "j"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"\[Phi]", "(", "m", ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"\[Phi]", "(", "n", ")"}]}], TraditionalForm]]], ", form a reduced residue system modulo ", Cell[BoxData[ FormBox[ RowBox[{"m", " ", "n"}], TraditionalForm]]], ". It is quite easy to check that the integers ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", ".", SubscriptBox["a", "i"]}], "+", RowBox[{"m", ".", SubscriptBox["b", "j"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"\[Phi]", "(", "m", ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"\[Phi]", "(", "n", ")"}]}], TraditionalForm]]], ", are all distinct modulo ", Cell[BoxData[ FormBox[ RowBox[{"m", " ", "n"}], TraditionalForm]]], " and that they are coprime with ", Cell[BoxData[ FormBox[ RowBox[{"m", " ", "n"}], TraditionalForm]]], ". (Use ", ButtonBox["Lemma A.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " and formula ", ButtonBox["(A.9)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA ai=aj ->i=j"], ")." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "It remains to verify that any integer ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"k", ",", RowBox[{"m", ".", "n"}]}], ")"}], "=", "1"}], TraditionalForm]]], ", is congruent to ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", ".", SubscriptBox["a", "i"]}], "+", RowBox[{"m", ".", SubscriptBox["b", "j"]}]}], TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox[ RowBox[{"m", " ", "n"}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"\[Phi]", "(", "m", ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"\[Phi]", "(", "n", ")"}]}], TraditionalForm]]], ".\nFrom ", ButtonBox["Lemma A.13", BaseStyle->"Hyperlink", ButtonData:>"LemAppA AR_i also Red"], " we know that integers ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["j", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"\[Phi]", "(", "m", ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"\[Phi]", "(", "n", ")"}]}], TraditionalForm]]], ", exist for which" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"k", "\[Congruent]", RowBox[{ RowBox[{"n", ".", SubscriptBox["a", "i"]}], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}], " ", "and", " ", FormBox[ RowBox[{"k", "\[Congruent]", RowBox[{ SubscriptBox["b", "j"], " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}], "."}]}]}], TraditionalForm]}]}], FontColor->RGBColor[0.500008, 0, 0.500008]], TextForm]], "DisplayFormula"], Cell[TextData[{ "This implies that both ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " divide ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", FormBox[ RowBox[{"n", ".", SubscriptBox["a", "i"]}], TraditionalForm], "-", FormBox[ RowBox[{"m", " ", ".", SubscriptBox["b", "j"]}], TraditionalForm]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", "n"}], ")"}], "=", "1"}], TraditionalForm]]], ", it follows from ", ButtonBox["(A.4)", BaseStyle->"Hyperlink", ButtonData:>"PropAppA LCM2"], " and ", ButtonBox["(A.7)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA gcd lcm=mn"], ", that also ", Cell[BoxData[ FormBox[ RowBox[{"m", ".", "n"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"k", "-", FormBox[ RowBox[{"n", ".", SubscriptBox["a", "i"]}], TraditionalForm], "-", FormBox[ RowBox[{"m", ".", SubscriptBox["b", "j"]}], TraditionalForm]}], 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["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\n\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Phi]", "(", "m", ")"}], "=", RowBox[{"m", RowBox[{ UnderscriptBox["\[Product]", RowBox[{ RowBox[{"p", " ", "prime"}], ",", " ", RowBox[{"p", "|", "m"}]}]], RowBox[{"(", RowBox[{"1", "-", FractionBox["1", "p"]}], ")"}]}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Euler Phi Form"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], " Combine ", ButtonBox["(A.10)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA Phi p^e="], " and ", ButtonBox["Lemma A.16", BaseStyle->"Hyperlink", ButtonData:>"LemAppA Phi is mult"], "." }], "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 ", ButtonBox["Section A.5", BaseStyle->"Hyperlink", ButtonData:>"SecAppA Mobius"], " we shall see how a direct counting argument also proves Theorem A.17. " }], "Text"], Cell[TextData[{ "With the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Length", FontVariations->{"Underline"->True}], ", ", StyleBox["EulerPhi", FontVariations->{"Underline"->True}], " and the function ", ButtonBox["CoPrimes", BaseStyle->"Hyperlink", ButtonData:>"InputAppA CoPrimes"], " (which makes use of ", ButtonBox["CoPrimeQ", BaseStyle->"Hyperlink", ButtonData:>"InputAppA CoPrimeQ"], ") defined above one can check Theorem A.17 as follows:" }], "Text", CellChangeTimes->{ 3.423394414141181*^9, {3.4234553568433857`*^9, 3.423455371358918*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "15"}], ";"}], "\n", RowBox[{"Length", "[", RowBox[{"CoPrimes", "[", "m", "]"}], "]"}], "\n", RowBox[{"EulerPhi", "[", "m", "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["8"], "Output"], Cell[BoxData["8"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tSolving Linear Congruence Relations" }], "Subsection", CellTags->"SubsAppA lin congr"], Cell[TextData[{ "The simplest congruence relation, that one may have to solve, is the \ single, ", StyleBox["linear congruence relation", FontSlant->"Italic"] }], "Text", CellTags->"DefAppA linear CR"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "x"}], "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]]], "NumberedEquationAppendix", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe linear congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "x"}], "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " has a solution ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " ", "if and only if", " ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["b", TraditionalForm]]], ".\nIn this case the number of different solutions modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA AX=B mod M"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], StyleBox[" That ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "|", "b"}], TraditionalForm]], FontWeight->"Plain"], StyleBox[" is a necessary condition for (A.11) to have a solution ", FontWeight->"Plain"], Cell[BoxData[ FormBox["x", TraditionalForm]]], StyleBox[" is trivial. We shall now prove that it is also a sufficient \ condition.\nLet ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"d", "=", RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}]}], TraditionalForm]]], StyleBox[" and write ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{ RowBox[{"a", "'"}], " ", "d"}]}], TraditionalForm]]], StyleBox[", ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{"m", "'"}], " ", "d"}]}], TraditionalForm]]], StyleBox[" and ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"b", "=", RowBox[{ RowBox[{"b", "'"}], "d"}]}], TraditionalForm]]], StyleBox[", where ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"a", "'"}], ",", RowBox[{"m", "'"}]}], ")"}], "=", "1"}], TraditionalForm]]], StyleBox[". By ", FontWeight->"Plain"], ButtonBox["Lemma A.11", BaseStyle->"Hyperlink", ButtonData:>"LemAppA Also ka_i is CRS"], StyleBox[", the congruence relation ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"a", "'"}], "x"}], "\[Congruent]", RowBox[{ RowBox[{"b", "'"}], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"m", "'"}]}], ")"}]}]}], TraditionalForm]]], StyleBox[" has a unique solution ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"x", "'"}], TraditionalForm]]], StyleBox[" modulo ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"m", "'"}], TraditionalForm]]], StyleBox[". Clearly, a solution ", FontWeight->"Plain"], Cell[BoxData[ FormBox["x", TraditionalForm]]], StyleBox[" of ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "x"}], "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], StyleBox[" satisfies ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"x", "'"}], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"m", "'"}]}], ")"}]}]}], TraditionalForm]]], StyleBox[". So, each solution ", FontWeight->"Plain"], Cell[BoxData[ FormBox["x", TraditionalForm]]], StyleBox[" modulo ", FontWeight->"Plain"], Cell[BoxData[ FormBox["m", TraditionalForm]]], StyleBox[" can be written as ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "'"}], "+", RowBox[{"i", " ", RowBox[{"m", "'"}]}]}], TraditionalForm]]], StyleBox[", ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", "d"}], TraditionalForm]]], StyleBox[". Write ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"a", "'"}], RowBox[{"x", "'"}]}], "=", RowBox[{ RowBox[{"b", "'"}], "+", RowBox[{"u", " ", RowBox[{"m", "'"}]}]}]}], TraditionalForm]]], StyleBox[", ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", "\[DoubleStruckCapitalZ]"}], TraditionalForm]]], StyleBox[". Then for each ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", "d"}], TraditionalForm]]], StyleBox[", ", FontWeight->"Plain"] }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "(", RowBox[{ RowBox[{"x", "'"}], "+", RowBox[{"i", " ", RowBox[{"m", "'"}]}]}], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"d", " ", RowBox[{"a", "'"}], RowBox[{"x", "'"}]}], "+", RowBox[{"i", " ", "d", " ", RowBox[{"a", "'"}], RowBox[{"m", "'"}]}]}], "=", RowBox[{ RowBox[{ RowBox[{"d", " ", RowBox[{"b", "'"}]}], "+", RowBox[{"u", " ", "d", " ", RowBox[{"m", "'"}]}], "+", RowBox[{"i", " ", RowBox[{"a", " ", "'"}], "m"}]}], "=", RowBox[{"b", "+", RowBox[{ RowBox[{"(", RowBox[{"u", "+", RowBox[{"ia", "'"}]}], ")"}], RowBox[{"m", "."}]}]}]}]}]}], TraditionalForm]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Hence, the numbers ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "'"}], "+", RowBox[{"i", " ", RowBox[{"m", "'"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", "d"}], TraditionalForm]]], ", represent all the solutions modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "x"}], "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "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[{ "The solution of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "x"}], "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], ", can easily be found with the extended version of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], ". Indeed, from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"u", " ", "a"}], "+", RowBox[{"v", " ", "m"}]}], "=", "1"}], TraditionalForm]]], " (see ", ButtonBox["Theorem A.3", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA GCD=ua+vb"], "), it follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", " ", "a"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ". So, the solution ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{"b", " ", "u", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}], TraditionalForm]]], ". If ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], ", one often writes ", Cell[BoxData[ FormBox[ SuperscriptBox["a", RowBox[{"-", "1"}]], TraditionalForm]]], " for the unique element u satisfying ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", " ", "a"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Example A.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" (Method 1)", FontWeight->"Bold", FontSlant->"Plain"], "\nTo solve ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"14", " ", "x"}], "\[Congruent]", RowBox[{"26", " ", RowBox[{"(", RowBox[{"mod", " ", "34"}], ")"}]}]}], TraditionalForm]]], ", we note that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"14", ",", "34"}], ")"}], "=", "2"}], TraditionalForm]]], ", which indeed divides 26. \nWe first solve ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"7", " ", RowBox[{"x", "'"}]}], "\[Congruent]", RowBox[{"13", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]], ". With the extended version of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], " we find ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"5", "\[CenterDot]", "7"}], "+", RowBox[{ RowBox[{"(", RowBox[{"-", "2"}], ")"}], " ", "17"}]}], "=", RowBox[{ RowBox[{"gcd", "(", RowBox[{"7", ",", " ", "17"}], ")"}], "=", "1"}]}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"7", "\[CenterDot]", "5"}], " ", "\[Congruent]", " ", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"x", "'"}], TraditionalForm]]], " can be computed from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "'"}], "\[Congruent]", RowBox[{ FormBox[ RowBox[{ SuperscriptBox["7", RowBox[{"-", "1"}]], "\[CenterDot]"}], TraditionalForm], "13"}], "\[Congruent]", RowBox[{"5", "\[CenterDot]", "13"}], "\[Congruent]", RowBox[{"14", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]], ".\nBy the theorem above, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"14", " ", "x"}], "\[Congruent]", RowBox[{"26", " ", RowBox[{"(", RowBox[{"mod", " ", "34"}], ")"}]}]}], TraditionalForm]]], " has the numbers 14 and 14+17=31 as solutions modulo 34." }], "Example"], Cell[BoxData[{ RowBox[{"ExtendedGCD", "[", RowBox[{"7", ",", "17"}], "]"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"5", "*", "13"}], ",", "17"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{"5", ",", RowBox[{"-", "2"}]}], "}"}]}], "}"}]], "Output"], Cell[BoxData["14"], "Output"], Cell[TextData[{ StyleBox["Example A.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" (Method 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nTo solve 123456789 ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " \[Congruent] 135798642 (mod 179424673), we first check if gcd(123456789, \ 179424673) divides 135798642. Next, we compute ", Cell[BoxData[ FormBox[ SuperscriptBox["123456789", RowBox[{"-", "1"}]], TraditionalForm]]], " mod 179424673 and then compute ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["123456789", RowBox[{"-", "1"}]], "\[CenterDot]", "135798642"}], TraditionalForm]]], " which gives 21562478 as solution ." }], "Example"], Cell[TextData[{ "Instead of using Euclid's Algorithm to compute ", Cell[BoxData[ FormBox[ SuperscriptBox["123456789", RowBox[{"-", "1"}]], TraditionalForm]]], " mod 179424673, we can also use ", ButtonBox["Euler's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler"], ". Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["a", RowBox[{"\[Phi]", "(", "m", ")"}]], TraditionalForm], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", SuperscriptBox["a", RowBox[{ RowBox[{"\[Phi]", "(", "m", ")"}], "-", "1"}]]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " and thus that ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{"-", "1"}]], "\[Congruent]", SuperscriptBox["a", RowBox[{ RowBox[{"\[Phi]", "(", "m", ")"}], "-", "1"}]]}], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[{ RowBox[{"GCD", "[", RowBox[{"148953050", ",", " ", "179424673"}], "]"}], "\n", RowBox[{"PowerMod", "[", RowBox[{"123456789", ",", " ", RowBox[{ RowBox[{"EulerPhi", "[", "179424673", "]"}], "-", "1"}], ",", " ", "179424673"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output"], Cell[BoxData["172609538"], "Output"], Cell[TextData[{ "So, the number 172609538 is the multiplicative inverse of 123456789 modulo \ 179424673. The solution x of the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"123456789", " ", "x"}], "\[Congruent]", RowBox[{"135798642", " ", RowBox[{"(", RowBox[{"mod", " ", "179424673"}], ")"}]}]}], TraditionalForm]]], " is given by:" }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"135798642", " ", "*", "172609538"}], ",", "179424673"}], "]"}]], "Input"], Cell[BoxData["21562478"], "Output"], Cell["We can check this:", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"123456789", "*", "21562478"}], ",", " ", "179424673"}], "]"}]], "Input"], Cell[BoxData["135798642"], "Output"], Cell[TextData[{ "The ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " computes the multiplicative inverse of a number very efficiently in the \ following way:" }], "Text", CellChangeTimes->{{3.4234608381139326`*^9, 3.4234608390983143`*^9}}], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"123456789", ",", RowBox[{"-", "1"}], ",", " ", "179424673"}], "]"}]], "Input"], Cell[BoxData["172609538"], "Output"], Cell[TextData[{ "The ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Solve", FontVariations->{"Underline"->True}], " gives all the solutions of the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "x"}], "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ", if they do exist. " }], "Text", CellChangeTimes->{3.4233956540084915`*^9}], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "x", "]"}], ";"}], "\n", RowBox[{"Solve", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"12", " ", "x"}], " ", "==", " ", "8"}], ",", " ", RowBox[{"Modulus", "==", " ", "16"}]}], "}"}], ",", " ", "x"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "16"}], ",", RowBox[{"x", "\[Rule]", "2"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "16"}], ",", RowBox[{"x", "\[Rule]", "6"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "16"}], ",", RowBox[{"x", "\[Rule]", "10"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"Modulus", "\[Rule]", "16"}], ",", RowBox[{"x", "\[Rule]", "14"}]}], "}"}]}], "}"}]], "Output"], Cell["To get only the solutions, one can execute", "Text"], Cell[BoxData[ RowBox[{"x", " ", "/.", " ", RowBox[{"Solve", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"12", " ", "x"}], " ", "==", " ", "8"}], ",", " ", RowBox[{"Modulus", "==", " ", "16"}]}], "}"}], ",", " ", "x"}], "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"2", ",", "6", ",", "10", ",", "14"}], "}"}]], "Output"], Cell["The reader is invited to try", "Text"], Cell[BoxData[ RowBox[{"x", " ", "/.", " ", RowBox[{"Solve", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"13", " ", "x"}], " ", "==", " ", "1"}], ",", " ", RowBox[{"Modulus", "==", " ", "16"}]}], "}"}], ",", " ", "x"}], "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"Solve", "[", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"12", " ", "x"}], " ", "==", " ", "7"}], ",", " ", RowBox[{"Modulus", "==", " ", "16"}]}], "}"}], ",", " ", "x"}], "]"}]], "Input"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Chinese Remainder Theorem" }], "Subsection", CellTags->"SubsAppA Chinese RT"], Cell[TextData[{ "We shall now discuss the case that ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " has to satisfy several, linear congruence relations simultaneously, say ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox["a", "i"], TraditionalForm], " ", "x"}], "\[Congruent]", RowBox[{ FormBox[ SubscriptBox["b", "i"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], ")"}]}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{"gcd", "(", SubscriptBox["a", "i"]}], TraditionalForm], ",", RowBox[{ FormBox[ RowBox[{ SubscriptBox["m", "i"], ")"}], TraditionalForm], "|", FormBox[ SubscriptBox["b", "i"], TraditionalForm]}]}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ". Dividing the i-th relation by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox["d", "i"], TraditionalForm], "=", FormBox[ RowBox[{"gcd", "(", SubscriptBox["a", "i"]}], TraditionalForm]}], ",", FormBox[ RowBox[{ SubscriptBox["m", "i"], ")"}], TraditionalForm]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", one gets as before the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ SubscriptBox["a", "i"], TraditionalForm], "'"}], RowBox[{"x", "'"}]}], "\[Congruent]", RowBox[{ RowBox[{ FormBox[ SubscriptBox["b", "i"], TraditionalForm], "'"}], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"m", "'"}]}], ")"}]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ SuperscriptBox[ SubscriptBox["a", "i"], "'"], ",", SuperscriptBox[ SubscriptBox["m", "i"], "'"]}], ")"}], "=", "1"}], TraditionalForm]]], ". By the proof of ", ButtonBox["Theorem A.18", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA AX=B mod M"], ", a solution of this congruence relation is equivalent to a solution of one \ of the ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " congruence relations ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ SubscriptBox["a", "i"], TraditionalForm], "'"}], "x"}], "\[Congruent]", RowBox[{ RowBox[{ FormBox[ SubscriptBox["b", "i"], TraditionalForm], "'"}], "+", RowBox[{ RowBox[{ FormBox[ SubscriptBox["jm", "i"], TraditionalForm], "'"}], " ", RowBox[{"(", RowBox[{"mod", " ", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], ")"}]}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "j", "<", "d"}], TraditionalForm]]], ". In view of this, we restrict our attention to the case that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{"gcd", "(", SubscriptBox["a", "i"]}], TraditionalForm], ",", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], ")"}], "=", "1"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], " \t\t", StyleBox["The Chinese Remainder Theorem", FontSlant->"Italic"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", be ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " pairwise coprime integers. Further, let ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", be integers with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{"gcd", "(", SubscriptBox["a", "i"]}], TraditionalForm], ",", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], ")"}], "=", "1."}], TraditionalForm]]], " Then the system of ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " simultaneous congruence relations" }], "Theorem", CellTags->"TheoAppA Chinese RT"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ SubscriptBox["a", "i"], TraditionalForm], " ", "x"}], "\[Congruent]", RowBox[{ FormBox[ SubscriptBox["b", "i"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], ")"}]}]}], ",", StyleBox[" \t", FontSize->16], FormBox[ RowBox[{ "1", " ", "\[LessEqual]", " ", "i", " ", "\[LessEqual]", " ", "k"}], TraditionalForm], ","}], TextForm]], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormAppA ax=b mod m multi"], Cell[TextData[{ "has a ", StyleBox["unique solution", FontVariations->{"Underline"->True}], " modulo ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["m", "i"]}], TraditionalForm]]], " for all possible k-tuples of integers ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", "1"], ",", SubscriptBox["b", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["b", "k"]}], TraditionalForm]]], "." }], "Theorem", CounterIncrements->"None"], Cell[TextData[{ StyleBox["Proof:", FontWeight->"Bold"], " Suppose that ", Cell[BoxData[ FormBox[ RowBox[{"x", "'"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "'"}], "'"}], TraditionalForm]]], " both form a solution. Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox["a", "i"], TraditionalForm], "(", RowBox[{ RowBox[{"x", "'"}], "-", RowBox[{ RowBox[{"x", "'"}], "'"}]}], ")"}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ". By ", ButtonBox["Lemma A.4", BaseStyle->"Hyperlink", ButtonData:>"LemAppA d Div ab"], ", ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "'"}], "-", RowBox[{ RowBox[{"x", "'"}], "'"}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "'"}], "\[Congruent]", RowBox[{ RowBox[{ RowBox[{"x", "'"}], "'"}], " ", RowBox[{"(", RowBox[{"mod", " ", FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["m", "i"]}], TraditionalForm]}], ")"}]}]}], TraditionalForm]]], ". Hence, if the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " congruence relations have a simultaneous solution, it will be unique \ modulo ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["m", "i"]}], TraditionalForm]]], ".\nOn the other hand, since there are as many different values for ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["m", "i"]}], TraditionalForm]]], " as there are possible k-tuples of reduced right hand sides ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["b", "1"], ",", SubscriptBox["b", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["b", "k"]}], TraditionalForm]]], " there must be a one-to-one correspondence between them." }], "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 proof above does not give an efficient algorithm to determine the \ solution of ", ButtonBox["(A.12)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA ax=b mod m multi"], ". We shall now explain how this can be done.\nLet ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ SubscriptBox["u", "i"], TraditionalForm]]], " be the unique solution modulo ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["m", "i"]}], TraditionalForm]]], " of" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", "i"], SubscriptBox["u", "i"]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["m", "i"]}], ")"}]}]}], TraditionalForm]]], "," }], "NumberedEquationAppendix", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", "j"], SubscriptBox["u", "i"]}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["m", "i"]}], ")"}]}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "j", "\[LessEqual]", "k"}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"j", "\[NotEqual]", "i"}], TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True], Cell[TextData[{ "With Euclid's Algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["u", "i"], TraditionalForm]]], " is easy to determine. Indeed from (A.14) it follows that ", Cell[BoxData[ FormBox[ SubscriptBox["u", RowBox[{"i", " "}]], TraditionalForm]]], "is a multiple of ", Cell[BoxData[ FormBox[ SuperscriptBox["m", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "defined by ", Cell[BoxData[ FormBox[ SubscriptBox["\[Product]", RowBox[{"j", ",", " ", RowBox[{"j", " ", "\[NotEqual]", " ", "i"}]}]], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ SubscriptBox["m", "j"], TraditionalForm]]], ", say ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "i"], "=", RowBox[{"r", " ", SuperscriptBox["m", RowBox[{"(", "i", ")"}]]}]}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "r", "<", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], TraditionalForm]]], ". The value of r follows from (A.13). Indeed, r is the solution of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox["a", "i"], TraditionalForm], "r", " ", FormBox[ SuperscriptBox["m", RowBox[{"(", "i", ")"}]], TraditionalForm]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], ")"}]}]}], TraditionalForm]]], ". Hence" }], "Text"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "i"], "=", RowBox[{ RowBox[{"{", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "i"], SuperscriptBox["m", RowBox[{"(", "i", ")"}]]}], ")"}], RowBox[{"-", "1"}]], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["m", "i"]}], ")"}]}], "}"}], " ", SuperscriptBox["m", RowBox[{ RowBox[{"(", "i", ")"}], "."}]]}]}], TraditionalForm]], "DisplayFormula"], Cell[TextData[{ "The numbers ", Cell[BoxData[ FormBox[ SubscriptBox["u", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", can be stored using at most ", Cell[BoxData[ FormBox[ RowBox[{"k", " ", FormBox[ SubscriptBox["log", "2"], TraditionalForm], " ", "m"}], TraditionalForm]]], " bits of memory space. \nThe solution of ", ButtonBox["(A.12)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA ax=b mod m multi"], " is now given by" }], "Text"], Cell[BoxData[ FormBox[ RowBox[{"x", "=", RowBox[{ RowBox[{ SubscriptBox["u", "1"], SubscriptBox["b", "1"]}], "+", RowBox[{ SubscriptBox["u", "2"], SubscriptBox["b", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["u", "k"], RowBox[{ SubscriptBox["b", "k"], "."}]}]}]}], TraditionalForm]], "DisplayFormula"], Cell[TextData[{ StyleBox["Example A.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nTo solve" }], "Example", CellTags->"ExamAppA Chin Rem Th"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"3", " ", "x"}], "\[Congruent]", RowBox[{"7", " ", RowBox[{"(", RowBox[{"mod", " ", "11"}], ")"}]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", " ", "x"}], "\[Congruent]", RowBox[{"9", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], " \t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"12", " ", "x"}], "\[Congruent]", RowBox[{"5", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]] }], "DisplayFormula"], Cell["we rewrite these congruences as", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{ FormBox[ SuperscriptBox["3", RowBox[{"-", "1"}]], TraditionalForm], "\[CenterDot]", "7"}], " ", RowBox[{"(", RowBox[{"mod", " ", "11"}], ")"}]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ FormBox[ RowBox[{ SuperscriptBox["2", RowBox[{"-", "1"}]], "\[CenterDot]"}], TraditionalForm], "9", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ FormBox[ RowBox[{ SuperscriptBox["12", RowBox[{"-", "1"}]], "\[CenterDot]"}], TraditionalForm], "5", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]] }], "DisplayFormula"], Cell["which reduces to", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"4", "\[CenterDot]", "7"}], " ", RowBox[{"(", RowBox[{"mod", " ", "11"}], ")"}]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"7", "\[CenterDot]", " ", "9"}], " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], " \t", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"10", "\[CenterDot]", "5"}], " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]] }], "DisplayFormula"], Cell["i.e.", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{"6", " ", RowBox[{"(", RowBox[{"mod", " ", "11"}], ")"}]}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{"11", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], " \t", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{"16", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["Next we compute the solutions of ", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "1"], TraditionalForm], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "11"}], ")"}]}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "1"], TraditionalForm], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], " \t", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "1"], TraditionalForm], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]], "\n", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "2"], TraditionalForm], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "11"}], ")"}]}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "2"], TraditionalForm], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], " \t", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "2"], TraditionalForm], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]], "\n", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "3"], TraditionalForm], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "11"}], ")"}]}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "3"], TraditionalForm], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], " \t", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "3"], TraditionalForm], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Writing ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "1"], TraditionalForm], "=", RowBox[{ FormBox[ SubscriptBox["l", "1"], TraditionalForm], "\[CenterDot]", "13", "\[CenterDot]", "17"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "2"], TraditionalForm], "=", RowBox[{ SubscriptBox["l", "2"], "\[CenterDot]", "11", "\[CenterDot]", "17"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["u", "3"], TraditionalForm], "=", RowBox[{ SubscriptBox["l", "3"], "\[CenterDot]", "11", "\[CenterDot]", "13"}]}], TraditionalForm]]], ", we find with ", ButtonBox["Theorem A.18", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA AX=B mod M"], ", (or the ", StyleBox["Solve", FontVariations->{"Underline"->True}], " function) that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "1"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "11"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "2"], "\[Congruent]", RowBox[{"8", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "3"], "\[Congruent]", RowBox[{"5", " ", RowBox[{"(", RowBox[{"mod", " ", "17"}], ")"}]}]}], TraditionalForm]]], " and thus that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "1"], "\[Congruent]", RowBox[{"221", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"11", "\[CenterDot]", "13", "\[CenterDot]", "17"}]}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "2"], "\[Congruent]", RowBox[{"1496", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"11", "\[CenterDot]", "13", "\[CenterDot]", "17"}]}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["u", "3"], "\[Congruent]", RowBox[{"715", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"11", "\[CenterDot]", "13", "\[CenterDot]", "17"}]}], ")"}]}]}], TraditionalForm]]], "." }], "Text", CellChangeTimes->{3.423395665211688*^9}, TextAlignment->Left, TextJustification->1, FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{"6", "\[CenterDot]", "221"}], "+", RowBox[{"11", "\[CenterDot]", "1496"}], "+", RowBox[{"16", "\[CenterDot]", "715"}]}], "\[Congruent]", RowBox[{"50", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"11", "\[CenterDot]", "13", "\[CenterDot]", "17"}]}], ")"}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ "To solve congruence relations ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "\[Congruent]", RowBox[{ SubscriptBox["b", "i"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["m", "i"]}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", with all the ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], "'s mutually prime with the Chinese Remainder Theorem with ", StyleBox["Mathematica.", FontSlant->"Italic"] }], "Text", CellChangeTimes->{3.4214705577162347`*^9}, TextAlignment->Left, TextJustification->0], Cell[TextData[{ "Such a system can now be solved with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["ChineseRemainder", FontVariations->{"Underline"->True}], " that is available in the above package. We demonstrate this by determining \ ", Cell[BoxData[ FormBox[ SubscriptBox["u", "1"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["u", "2"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["u", "3"], TraditionalForm]]], " in the above example." }], "Text", CellChangeTimes->{{3.42346310570465*^9, 3.4234631072202845`*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"11", ",", "13", ",", "17"}], "}"}]}], "]"}], "\n", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"11", ",", "13", ",", "17"}], "}"}]}], "]"}], "\n", RowBox[{"ChineseRemainder", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"11", ",", "13", ",", "17"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["221"], "Output", CellChangeTimes->{3.4214705652162347`*^9}], Cell[BoxData["1496"], "Output", CellChangeTimes->{3.4214705653099847`*^9}], Cell[BoxData["715"], "Output", CellChangeTimes->{3.4214705654506097`*^9}] }, Open ]], Cell[TextData[{ "When considering the system of congruence relations ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", "i"], SubscriptBox["x", "i"]}], "\[Congruent]", RowBox[{ SubscriptBox["b", "i"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["m", "i"]}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", where the ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], "'s are relatively prime and where ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{"gcd", "(", SubscriptBox["a", "i"]}], TraditionalForm], ",", FormBox[ SubscriptBox["m", "i"], TraditionalForm]}], ")"}], "=", "1"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", it is quite easy for ", StyleBox["Mathematica", FontSlant->"Italic"], " to reduce this system to the equivalent system ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["x", "i"], "\[Congruent]", RowBox[{ SubsuperscriptBox["a", "i", RowBox[{"-", "1"}]], SubscriptBox["b", "i"], " ", RowBox[{"(", RowBox[{"mod", " ", SubscriptBox["m", "i"]}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", which can be solved with the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " function. We use the functions ", StyleBox["PowerMod", FontVariations->{"Underline"->True}], " and ", StyleBox["Mod", FontVariations->{"Underline"->True}], " for this reduction. They operate equally well on vectors (coordinatewise) \ as on numbers. \nWe demonstrate this with the parameters of the example \ above. " }], "Text", CellChangeTimes->{ 3.4233963363409834`*^9, {3.4234608426920867`*^9, 3.4234608438639693`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", RowBox[{"{", RowBox[{"3", ",", "2", ",", " ", "12"}], "}"}]}], ";", RowBox[{"b", "=", RowBox[{"{", RowBox[{"7", ",", "9", ",", "5"}], "}"}]}], ";", RowBox[{"m", "=", RowBox[{"{", RowBox[{"11", ",", "13", ",", "17"}], "}"}]}], ";"}], "\n", RowBox[{"b", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"b", "*", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{"-", "1"}], ",", "m"}], "]"}]}], ",", "m"}], "]"}]}], "\n", RowBox[{"ChineseRemainder", "[", RowBox[{"b", ",", "m"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"6", ",", "11", ",", "16"}], "}"}]], "Output"], Cell[BoxData["50"], "Output"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A", ".", CounterBox["Section"], "\tQuadratic Residues" }], "Section", CellTags->"SecAppA QR"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be an odd prime. The quadratic ", ButtonBox["congruence relation", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Congr Rel"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"a", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", " ", "x"}], "+", "c"}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[NotCongruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ", can be simplified by dividing the congruence relation by ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " followed by the substitution ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[RightArrow]", RowBox[{"x", "-", RowBox[{"b", "/", RowBox[{"(", RowBox[{"2", "a"}], ")"}]}]}]}], TraditionalForm]]], ". In this way, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"a", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", " ", "x"}], "+", "c"}], "\[Congruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " reduces to a quadratic congruence relation of the type:" }], "Text", CellTags->"DefAppA quadratic CR"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "\[Congruent]", RowBox[{"u", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]]], "NumberedEquationAppendix", GeneratedCell->True], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be an odd prime and ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " an integer not divisible by ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is called a ", StyleBox["quadratic residue (QR)", FontSlant->"Italic"], ", if (A.15) has an integer solution, and ", StyleBox["quadratic non-residue (NQR)", FontSlant->"Italic"], ", if (A.15) does not have an integer solution." }], "Definition", CellTags->"DefAppA QR"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be an odd prime and ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " an integer. The", StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], StyleBox["Legendre symbol", FontSlant->"Italic"], StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"(", FractionBox["u", "p"], ")"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}], TraditionalForm]]], " is defined by\n\t", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["u", "p"], ")"}], TraditionalForm]]], " = ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ { RowBox[{"+", "1"}]}, {GridBox[{ { RowBox[{"-", "1"}]}, { RowBox[{" ", "0"}]} }]} }]}], TraditionalForm]]], "\t ", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", "u", " ", "is", " ", StyleBox["a", FontSlant->"Plain"], StyleBox[" ", FontSlant->"Plain"], "quadratic", " ", "residue", " ", "mod", " ", "p"}], ","}], " "}]}, { RowBox[{" ", RowBox[{ RowBox[{"if", " ", "u", " ", "is", " ", StyleBox["a", FontSlant->"Plain"], StyleBox[" ", FontSlant->"Plain"], "quadratic", " ", "nonresidue", " ", "mod", " ", "p"}], ","}]}]}, { RowBox[{"if", " ", "p", " ", "divides", " ", RowBox[{"u", "."}], " "}]} }], TraditionalForm]]], "\t", StyleBox["\n", FontColor->RGBColor[0, 0, 0.996109]], "If there is no confusion about the actual choice of the prime number ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", one often writes ", StyleBox["\[Chi](u)", FontSlant->"Italic"], " instead of ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["u", "p"], ")"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppA Legendre S"], Cell["\<\ The Legendre symbol is a special case of the following function.\ \>", "Text"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ FormBox[ SubscriptBox["\[CapitalPi]", "i"], TraditionalForm], " ", FormBox[ SuperscriptBox[ RowBox[{"(", FormBox[ SubscriptBox["p", "i"], TraditionalForm], ")"}], SubscriptBox["e", "i"]], TraditionalForm]}]}], TraditionalForm]]], " be an odd integer and let ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " be an integer with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"u", ",", "m"}], ")"}], "=", "1."}], TraditionalForm]]], "\nThen the ", StyleBox["Jacobi symbol", FontSlant->"Italic"], StyleBox[" (", FontColor->RGBColor[0, 0, 0.500008]], Cell[BoxData[ FormBox[ FractionBox["u", "m"], TraditionalForm]]], StyleBox[")", FontColor->RGBColor[0, 0, 0.500008]], " is defined by\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], "=", RowBox[{ SubscriptBox["\[Product]", "i"], SuperscriptBox[ RowBox[{"(", FractionBox["u", SubscriptBox["p", "i"]], ")"}], SubscriptBox["e", "i"]]}]}], TraditionalForm]]], "\n\nwhere ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["u", "p"], ")"}], TraditionalForm]]], " denotes the Legendre symbol." }], "Definition", CellTags->"DefAppA Jacobi S"], Cell[TextData[{ "The Jacobi symbol (and a fortiori the Legendre symbol) can be evaluated \ with the standard ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["JacobiSymbol", FontVariations->{"Underline"->True}], Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{"u", ",", " ", "m"}]}], TraditionalForm]]], "]. So, we can check if 12 is a quadratic residue modulo 13 (indeed ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["5", "2"], "\[Congruent]", RowBox[{"12", " ", RowBox[{"(", RowBox[{"mod", " ", "13"}], ")"}]}]}], TraditionalForm]]], ") by means of the Jacobi Symbol[12, 13] which should give value 1." }], "Text", CellChangeTimes->{{3.4233949142537565`*^9, 3.42339491784753*^9}, { 3.4234706920549746`*^9, 3.423470693945612*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"u", "=", "12"}], ";", " ", RowBox[{"m", "=", "13"}], ";", " ", RowBox[{"JacobiSymbol", "[", RowBox[{"u", ",", " ", "m"}], "]"}]}]], "Input"], Cell[BoxData["1"], "Output"], Cell[TextData[{ "We want to derive some properties of the Legendre symbol.\nLet ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["a", "2"], TraditionalForm], "\[Congruent]", RowBox[{"u", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". Then, also ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"p", "-", "a"}], ")"}], "2"], TraditionalForm], "\[Congruent]", RowBox[{"u", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". The polynomial ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["x", "2"], TraditionalForm], "-", "u"}], TraditionalForm]]], " has at most two zeros in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], "), so modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " there can not be more than two different solutions to ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["x", "2"], TraditionalForm], "\[Congruent]", RowBox[{"u", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". It follows that the quadratic residues modulo p are given by the \ integers" }], "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["i", "2"], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", FractionBox[ RowBox[{"p", "-", "1"}], "2"]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "or, alternatively, by the integers ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"p", "-", "i"}], ")"}], "2"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", FormBox[ FractionBox[ RowBox[{"p", "-", "1"}], "2"], TraditionalForm]}], TraditionalForm]]], ". We conclude that there are exactly ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", "-", "1"}], "2"], TraditionalForm]]], " QR's and ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", "-", "1"}], "2"], TraditionalForm]]], " NQR's. This proves the first of the following two theorems." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet p be an odd prime. Then, exactly ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", "-", "1"}], "2"], TraditionalForm]]], " of the integers ", Cell[BoxData[ FormBox[ RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", RowBox[{"p", "-", "1"}]}], TraditionalForm]]], " are quadratic residue and ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", "-", "1"}], "2"], TraditionalForm]]], " are quadratic non-residue. In formula\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"u", "=", "0"}], RowBox[{"p", "-", "1"}]], RowBox[{"\[Chi]", "(", "u", ")"}]}], "=", "0."}], TraditionalForm]]] }], "Theorem", CellTags->"TheoAppA Sum Chi"], Cell[TextData[{ "The reader can check the above theorem in concrete examples by means of the \ following two ", StyleBox["Mathematica", FontSlant->"Italic"], " functions." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "17"}], ";", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"p", "-", "1"}]], RowBox[{"JacobiSymbol", "[", RowBox[{"i", ",", "p"}], "]"}]}]}]], "Input"], Cell[BoxData["0"], "Output"], Cell[TextData[{ "The next function lists all quadratic residues mod ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "." }], "Text", CellChangeTimes->{{3.423463729986351*^9, 3.423463749424349*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"ListQuadRes", "[", "p_", "]"}], ":=", " ", RowBox[{"Select", "[", RowBox[{ RowBox[{"Range", "[", "p", "]"}], ",", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"#1", ",", "p"}], "]"}], "==", "1"}], "&"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"p", "=", "17"}], ";"}], "\n", " "}], "\n", RowBox[{"ListQuadRes", "[", "p", "]"}]}], "Input", GeneratedCell->True, CellTags->"InputAppA ListQuadRes"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "2", ",", "4", ",", "8", ",", "9", ",", "13", ",", "15", ",", "16"}], "}"}]], "Output"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be an odd prime. Then for all integers ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Chi]", "(", RowBox[{"u", ".", "v"}], ")"}], "=", RowBox[{ RowBox[{"\[Chi]", "(", "u", ")"}], ".", RowBox[{"\[Chi]", "(", "v", ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Chi(uv)"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": This theorem will be a trivial consequence of ", ButtonBox["Theorem A.23", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA u/p=u^(p-1)/2"], " later on. We shall present here a more elementary proof.\nIf ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " or ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " the assertion is trivial, because both hands are equal to zero. The proof \ in case that ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " does not divide ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " or ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " is split up in three cases.\n", StyleBox["Case 1", FontVariations->{"Underline"->True}], ": ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " are both QR.\nThen ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{ FormBox[ SuperscriptBox["a", "2"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"v", "\[Congruent]", RowBox[{ FormBox[ SuperscriptBox["b", "2"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ", for some integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", ".", "v"}], "\[Congruent]", RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"a", ".", "b"}], ")"}], "2"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". So ", Cell[BoxData[ FormBox[ RowBox[{"u", ".", "v"}], TraditionalForm]]], " is QR.\n", StyleBox["Case 2", FontVariations->{"Underline"->True}], ": Exactly one of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " is QR, say ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is QR and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " is NQR.\nSuppose that also ", Cell[BoxData[ FormBox[ RowBox[{"u", ".", "v"}], TraditionalForm]]], " is QR. Then there exist integers ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{ FormBox[ SuperscriptBox["a", "2"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", ".", "v"}], "\[Congruent]", RowBox[{ FormBox[ SuperscriptBox["b", "2"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[NotCongruent]", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ", it follows that ", Cell[BoxData[ FormBox[ RowBox[{"v", "\[Congruent]", RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"b", "/", "a"}], ")"}], "2"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". A contradiction!\n", StyleBox["Case 3", FontVariations->{"Underline"->True}], ": Both ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " are NQR.\nFrom ", ButtonBox["Lemma A.11", BaseStyle->"Hyperlink", ButtonData:>"LemAppA Also ka_i is CRS"], " we know that ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[CenterDot]", "u"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", "=", "1"}], ",", "2", ",", "\[Ellipsis]", " ", ",", RowBox[{"p", "-", "1"}]}], TraditionalForm]]], ", runs through all non-zero elements modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". For the ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", "-", "1"}], "2"], TraditionalForm]]], " values of ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " for which ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " is QR, we have by Case 2 that ", Cell[BoxData[ FormBox[ RowBox[{"i", ".", "u"}], TraditionalForm]]], " is NQR. So, for the ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", "-", "1"}], "2"], TraditionalForm]]], " values of ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " for which ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " is NQR, it follows that ", Cell[BoxData[ FormBox[ RowBox[{"i", ".", "u"}], TraditionalForm]]], " is QR. So ", Cell[BoxData[ FormBox[ RowBox[{"u", ".", "v"}], TraditionalForm]]], " is QR." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\<\ Although the next theorem will never be used in this textbook, we do mention \ it, because it is often needed in related areas in Discrete Mathematics.\ \>", "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet p be an odd prime. Then, for every integer v\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"u", "=", "0"}], RowBox[{"p", "-", "1"}]], RowBox[{ RowBox[{"\[Chi]", "(", "u", ")"}], ".", RowBox[{"\[Chi]", "(", RowBox[{"u", "+", "v"}], ")"}]}]}], "=", RowBox[{"{", GridBox[{ { RowBox[{ RowBox[{"p", "-", "1"}], ","}]}, { RowBox[{ RowBox[{"-", "1"}], ","}]} }]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{"if", " ", "p", " ", "divides", " ", "v"}], ","}]}, { RowBox[{"otherwise", "."}]} }], TraditionalForm]]] }], "Theorem", CellTags->"TheoAppA chi(u)chi(u+k)"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": If ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["v", TraditionalForm]]], ", the statement is trivial. When ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " does not divide ", Cell[BoxData[ FormBox["v", TraditionalForm]]], ", one has by ", ButtonBox["Theorem A.21", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chi(uv)"], " and ", ButtonBox["Theorem A.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Chi"], " that\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ UnderoverscriptBox["\[Sum]", RowBox[{"u", "=", "0"}], RowBox[{"p", "-", "1"}]], TraditionalForm], RowBox[{ RowBox[{"\[Chi]", "(", "u", ")"}], RowBox[{"\[Chi]", "(", RowBox[{"u", "+", "v"}], ")"}]}]}], "=", RowBox[{ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"u", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{ RowBox[{"\[Chi]", "(", "u", ")"}], RowBox[{"\[Chi]", "(", RowBox[{"u", "+", "v"}], ")"}]}]}], TraditionalForm], "=", RowBox[{ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"u", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{ RowBox[{"\[Chi]", "(", "u", ")"}], RowBox[{"\[Chi]", "(", "u", ")"}], RowBox[{"\[Chi]", "(", RowBox[{"1", "+", RowBox[{"v", "/", "u"}]}], ")"}]}]}], TraditionalForm], " ", "=", " ", "\n", "\t\t\t\t", RowBox[{ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"u", "=", "1"}], RowBox[{"p", "-", "1"}]], RowBox[{"\[Chi]", "(", RowBox[{"1", "+", RowBox[{"v", "/", "u"}]}], ")"}]}], TraditionalForm], "=", RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"w", "\[NotEqual]", "1"}]], TraditionalForm], RowBox[{"\[Chi]", "(", "w", ")"}]}], "=", RowBox[{ RowBox[{"\[Dash]1", " ", "+", " ", FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"w", "=", "0"}], RowBox[{"p", "-", "1"}]], RowBox[{"\[Chi]", "(", "w", ")"}]}], TraditionalForm]}], "=", "\[Dash]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[{ "Let ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " be QR, say ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{ FormBox[ SuperscriptBox["a", "2"], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". By Fermat's Theorem ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["u", FractionBox[ RowBox[{"p", "-", "1"}], "2"]], TraditionalForm], "\[Congruent]", FormBox[ SuperscriptBox["a", RowBox[{"p", "-", "1"}]], TraditionalForm], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ". So, the ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", " ", "-", " ", "1"}], "2"], TraditionalForm]]], " QR's are zero of the polynomial ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["x", FractionBox[ RowBox[{"p", "-", "1"}], "2"]], TraditionalForm], "-", "1"}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], ". Since a polynomial of degree ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", " ", "\[Dash]", " ", "1"}], "2"], TraditionalForm]]], " over GF(", Cell[BoxData[ FormBox["p", TraditionalForm]]], ") has at most ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"p", " ", "-", " ", "1"}], "2"], TraditionalForm]]], " different zeros in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], "), one has in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], ":" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], "-", "1"}], "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{"u", " ", "is", " ", "QR"}]], RowBox[{ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], "."}]}]}], TraditionalForm]]]], "NumberedEquationAppendix", CellMargins->{{Inherited, 1}, {Inherited, Inherited}}, GeneratedCell->True, CellTags->"FormAppA x^(p-1)/2 is prod QR"], Cell[TextData[{ "It also follows that ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["u", FractionBox[ RowBox[{"p", "-", "1"}], "2"]], TraditionalForm], "\[NotEqual]", "1"}], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is NQR. Since ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", FormBox[ SuperscriptBox["u", FractionBox[ RowBox[{"p", "-", "1"}], "2"]], TraditionalForm], ")"}], "2"], TraditionalForm], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " by ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " and since ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["y", "2"], TraditionalForm], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " has only 1 and \[Dash]1 as roots, it follows that ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["u", FractionBox[ RowBox[{"p", "-", "1"}], "2"]], TraditionalForm], "\[Congruent]", RowBox[{"\[Dash]1", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is NQR. This proves the following theorem for all ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " coprime with ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". For ", Cell[BoxData[ FormBox[ RowBox[{"p", "|", "u"}], TraditionalForm]]], " the theorem is trivially true." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be an odd prime. Then for all integers ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ",\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "p"], ")"}], "\[Congruent]", RowBox[{ SuperscriptBox["u", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA u/p=u^(p-1)/2"], Cell[TextData[{ StyleBox["Corollary A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be an odd prime. Then\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox[ RowBox[{"-", "1"}], "p"], ")"}], "=", RowBox[{"{", GridBox[{ { RowBox[{ RowBox[{"+", "1"}], ","}]}, { RowBox[{ RowBox[{"-", "1"}], ","}]} }]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", "p"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "4"}], ")"}]}]}], ","}]}, { RowBox[{ RowBox[{"if", " ", "p"}], "\[Congruent]", RowBox[{"3", " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "4"}], ")"}], "."}]}]}]} }], TraditionalForm]]] }], "Theorem", CellTags->"CorAppA Chi(-1)"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], FractionBox[ RowBox[{"p", "-", "1"}], "2"]], "=", "1"}], TraditionalForm]]], " ", "if and only if", " ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "4"}], ")"}]}]}], 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[{ "Another value of the ", ButtonBox["Legendre symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"], " that we shall need later on is ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["2", "p"], ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet p be an odd prime. Then\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["2", "p"], ")"}], "=", RowBox[{"{", GridBox[{ { RowBox[{ RowBox[{"+", "1"}], ","}]}, { RowBox[{ RowBox[{"-", "1"}], ","}]} }]}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", "p"}], "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}]}]}], ","}]}, { RowBox[{ RowBox[{"if", " ", "p"}], "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "3"}], " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}], "."}]}]}]} }], TraditionalForm]]] }], "Theorem", CellTags->"TheoAppA Chi(2)"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ":" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ RowBox[{ FormBox[ SuperscriptBox["2", FractionBox[ RowBox[{"p", "-", "1"}], "2"]], TraditionalForm], FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"k", "=", "1"}], FractionBox[ RowBox[{"p", "-", "1"}], "2"]], "k"}], TraditionalForm]}], "\[Congruent]", FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"k", "=", "1"}], FractionBox[ RowBox[{"p", "-", "1"}], "2"]], RowBox[{"(", RowBox[{"2", "k"}], ")"}]}], TraditionalForm], "\[Congruent]", " ", RowBox[{ RowBox[{"(", FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"k", "=", "1"}], RowBox[{"\[LeftFloor]", FractionBox[ RowBox[{"p", "-", "1"}], "4"], "\[RightFloor]"}]], RowBox[{"(", RowBox[{"2", "k"}], ")"}]}], TraditionalForm], ")"}], "\[CenterDot]", RowBox[{"(", FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"k", "=", RowBox[{"1", "+", RowBox[{"\[LeftFloor]", FractionBox[ RowBox[{"p", "-", "1"}], "4"], "\[RightFloor]"}]}]}], FractionBox[ RowBox[{"p", "-", "1"}], "2"]], RowBox[{"(", RowBox[{"2", "k"}], ")"}]}], TraditionalForm], ")"}]}], " ", "\[Congruent]"}], " "}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", "\[Dash]1", ")"}], RowBox[{ FractionBox[ RowBox[{"p", "-", "1"}], "2"], " ", "-", " ", RowBox[{"\[LeftFloor]", FractionBox[ RowBox[{"p", "-", "1"}], "4"], "\[RightFloor]"}]}]], TraditionalForm], ".", RowBox[{"(", FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"k", "=", "1"}], RowBox[{"\[LeftFloor]", FractionBox[ RowBox[{"p", "-", "1"}], "4"], "\[RightFloor]"}]], RowBox[{"(", RowBox[{"2", "k"}], ")"}]}], TraditionalForm], ")"}], ".", RowBox[{"(", FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"k", "=", RowBox[{"1", "+", RowBox[{"\[LeftFloor]", FractionBox[ RowBox[{"p", "-", "1"}], "4"], "\[RightFloor]"}]}]}], FractionBox[ RowBox[{"p", "-", "1"}], "2"]], RowBox[{"(", "p\[Dash]2k", ")"}]}], TraditionalForm], ")"}]}], " ", "\[Congruent]", " ", RowBox[{ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", "\[Dash]1", ")"}], RowBox[{ FractionBox[ RowBox[{"p", "-", "1"}], "2"], " ", "-", " ", RowBox[{"\[LeftFloor]", FractionBox[ RowBox[{"p", "-", "1"}], "4"], "\[RightFloor]"}]}]], TraditionalForm], ".", " ", RowBox[{"(", FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"k", "=", "1"}], FractionBox[ RowBox[{"p", "-", "1"}], "2"]], "k"}], TraditionalForm], ")"}]}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Dividing both hands in the above relation by ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"k", "=", "1"}], FractionBox[ RowBox[{"p", "-", "1"}], "2"]], "k"}], TraditionalForm]]], " yields" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["2", FractionBox[ RowBox[{"p", "-", "1"}], "2"]], TraditionalForm], "\[Congruent]", RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", "\[Dash]1", ")"}], RowBox[{ FractionBox[ RowBox[{"p", "-", "1"}], "2"], " ", "-", " ", RowBox[{"\[LeftFloor]", FractionBox[ RowBox[{"p", "-", "1"}], "4"], "\[RightFloor]"}]}]], TraditionalForm], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "The assertion now follows from ", ButtonBox["Theorem A.23", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA u/p=u^(p-1)/2"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "We recall the definition of the ", ButtonBox["Jacobi symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], " in terms of the ", ButtonBox["Legendre symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"] }], "Text"], Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], "=", RowBox[{ SubscriptBox["\[Product]", "i"], SuperscriptBox[ RowBox[{"(", FractionBox["u", SubscriptBox["p", "i"]], ")"}], SubscriptBox["e", "i"]]}]}], TraditionalForm], ",", " ", RowBox[{"where", " ", RowBox[{ FormBox[ RowBox[{ FormBox[ RowBox[{"m", "=", SubscriptBox["\[Product]", "i"]}], TraditionalForm], SuperscriptBox[ SubscriptBox["p", "i"], SubscriptBox["e", "i"]]}], TraditionalForm], "."}]}]}], TextForm]], "NumberedEquationAppendix", CellMargins->{{Inherited, 1}, {Inherited, Inherited}}, GeneratedCell->True, CellTags->"FormAppA Def Jac (2x)"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet m and n be odd integers. Then the following relations hold for the \ Jacobi symbol\n\n\ti)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], "=", RowBox[{"(", FractionBox[ RowBox[{"u", "-", "m"}], "m"], ")"}]}], TraditionalForm]]], ",\n\t\t\n\tii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox[ RowBox[{"u", " ", "v"}], "m"], ")"}], "=", RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], RowBox[{"(", FractionBox["v", "m"], ")"}]}]}], TraditionalForm]]], ",\n\t\t\n\tiii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["u", RowBox[{"m", " ", "n"}]], ")"}], "=", RowBox[{ RowBox[{"(", FractionBox["u", "m"], ")"}], RowBox[{"(", FractionBox["u", "n"], ")"}]}]}], TraditionalForm]]], ",\n\t\t\n\tiv)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox[ RowBox[{"-", "1"}], "m"], ")"}], "=", "1"}], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "4"}], ")"}]}]}], TraditionalForm]]], ",\n\t\t\n\tv)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["2", "m"], ")"}], "=", "1"}], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", RowBox[{"(", RowBox[{"mod", " ", "8"}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Jacob iRelat"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The first two relations hold for the ", ButtonBox["Legendre symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"], " and, by ", ButtonBox["(A.17)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA Def Jac (2x)"], ", also for the ", ButtonBox["Jacobi symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], ". The third relation is a direct consequence of ", ButtonBox["(A.17)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA Def Jac (2x)"], ".\nTo see that the fourth relation is a direct consequence of ", ButtonBox["(A.17)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA Def Jac (2x)"], " and ", ButtonBox["Corollary A.24", BaseStyle->"Hyperlink", ButtonData:>"CorAppA Chi(-1)"], ", it suffices to observe that a product of an odd number of integers, each \ congruent to 3 modulo 4, is also congruent to 3 modulo 4, while for an even \ number the product will be 1 modulo 4. The proof of the last relation goes \ analogously (now use ", ButtonBox["Theorem A.25", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chi(2)"], "). " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "One more relation is needed to be able to compute ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["u", "m"], ")"}], TraditionalForm]]], " fast. We shall not give its proof, because the theory goes beyond the \ scope of this book. The interested reader is referred to Theorem 99 in ", ButtonBox["[HarW45]", BaseStyle->"Hyperlink", ButtonData:>"RefHar45"], " or Theorem 7.2.1 in ", ButtonBox["[Shap83]", BaseStyle->"Hyperlink", ButtonData:>"RefShap83"], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\t(Quadratic Reciprocity Law by ", ButtonBox["Gauss", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Johann Carl Friedrich Gauss"], ")\nLet ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be odd coprime integers. Then\n\t\t\t", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{"(", FractionBox["m", "n"]}], TraditionalForm], ")"}], FormBox[ RowBox[{"(", FractionBox["n", "m"]}], TraditionalForm]}], ")"}], "=", SuperscriptBox[ StyleBox[ RowBox[{"(", "\[Dash]1", ")"}], FontSize->12, FontColor->GrayLevel[0]], FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"m", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}]}], "4"]]}], FontSize->16, FontColor->GrayLevel[0]], TraditionalForm]]] }], "Theorem", CellTags->"TheoAppA Quad Reci Gauss"], Cell[TextData[{ "With the relations in ", ButtonBox["Theorem A.25", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chi(2)"], ", ", ButtonBox["Theorem A.26", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Jacob iRelat"], ", and ", ButtonBox["Theorem A.27", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Quad Reci Gauss"], " one can evaluate the ", ButtonBox["Jacobi symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], " very quickly." }], "Text"], Cell[TextData[{ StyleBox["Example A.", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontSlant->"Plain"] }], "Example", FontWeight->"Bold"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["12703", "16361"], ")"}], FormBox[ OverscriptBox["=", RowBox[{"A", ".27"}]], TraditionalForm], RowBox[{ RowBox[{"(", FractionBox["16361", "12703"], ")"}], FormBox[ OverscriptBox["=", RowBox[{ RowBox[{"A", ".26", " ", "i"}], ")"}]], TraditionalForm], RowBox[{ RowBox[{"(", FractionBox["3658", "12703"], ")"}], FormBox[ OverscriptBox["=", RowBox[{ RowBox[{"A", ".26", " ", "ii"}], ")"}]], TraditionalForm], RowBox[{ RowBox[{ RowBox[{"(", FractionBox["2", "12703"], ")"}], "\[CenterDot]", RowBox[{"(", FractionBox["1829", "12703"], ")"}]}], FormBox[ OverscriptBox[ RowBox[{"=", "\n", "\t"}], RowBox[{ RowBox[{ RowBox[{ RowBox[{"A", ".26", " ", "v"}], ")"}], " ", "&"}], " ", "A", ".27"}]], TraditionalForm]}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{"(", FractionBox["12703", "1829"], ")"}], FormBox[ OverscriptBox["=", RowBox[{ RowBox[{"A", ".26", " ", "i"}], ")"}]], TraditionalForm], RowBox[{ RowBox[{"(", FractionBox["1729", "1829"], ")"}], FormBox[ OverscriptBox["=", RowBox[{"A", ".27"}]], TraditionalForm], RowBox[{ RowBox[{"(", FractionBox["1829", "1729"], ")"}], FormBox[ OverscriptBox["=", RowBox[{ RowBox[{"A", ".26", " ", "i"}], ")"}]], TraditionalForm], RowBox[{ RowBox[{"(", FractionBox["100", "1729"], ")"}], FormBox[ OverscriptBox["=", RowBox[{ RowBox[{"A", ".26", " ", "ii"}], ")"}]], TraditionalForm], RowBox[{ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", FractionBox["2", "1729"], ")"}], "2"], "\[CenterDot]"}], TraditionalForm], RowBox[{"(", FractionBox["25", "1729"], ")"}]}]}]}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{"(", FractionBox["25", "1729"], ")"}], FormBox[ OverscriptBox["=", RowBox[{"A", ".27"}]], TraditionalForm], RowBox[{ RowBox[{"(", FractionBox["1729", "25"], ")"}], FormBox[ OverscriptBox["=", RowBox[{ RowBox[{"A", ".26", " ", "i"}], ")"}]], TraditionalForm], RowBox[{ RowBox[{"(", FractionBox["4", "25"], ")"}], FormBox[ OverscriptBox["=", RowBox[{ RowBox[{"A", ".26", " ", "ii"}], ")"}]], TraditionalForm], RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", FractionBox["2", "25"], ")"}], "2"], TraditionalForm], "=", "1."}]}]}]}]}], TraditionalForm]]] }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "It should be easy for the reader to verify that the above method has \ roughly the same complexity as ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], ". " }], "Text"], Cell[TextData[{ "Of course we could have evaluated ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["12703", "16361"], ")"}], TraditionalForm]]], " directly with ", StyleBox["Mathematica,", FontSlant->"Italic"], " as we have seen before." }], "Text"], Cell[BoxData[ RowBox[{"JacobiSymbol", "[", RowBox[{"12703", ",", "16361"}], "]"}]], "Input"], Cell[BoxData["1"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], "\tContinued Fractions" }], "Section", CellTags->"SecAppA Continued Fractions"], Cell["\<\ Quite often one wants to approximate a real number by means of a rational \ number. For instance, many people use 22/7 as an approximation of \[Pi]. A \ better approximation of \[Pi] is already given by 333/106 and again better is \ 355/113. One has to increase the denominator to 33102 to get the next \ improvement.\ \>", "Text"], Cell[BoxData[{ RowBox[{"N", "[", RowBox[{"Pi", "-", FractionBox["22", "7"]}], "]"}], "\n", RowBox[{"N", "[", RowBox[{"Pi", "-", FractionBox["333", "106"]}], "]"}], "\n", RowBox[{"N", "[", RowBox[{"Pi", "-", FractionBox["355", "113"]}], "]"}], "\n", RowBox[{"N", "[", RowBox[{"Pi", "-", FractionBox["103993", "33102"]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"-", "0.0012644892673496777`"}]], "Output"], Cell[BoxData["0.0000832196275291074982`"], "Output"], Cell[BoxData[ RowBox[{"-", "2.667641894049666`*^-7"}]], "Output"], Cell[BoxData["5.77890624242627382`*^-10"], "Output"], Cell["\<\ It is the theory of continued fractions that explains how to get such good \ approximations. \ \>", "Text"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA ", StyleBox["finite", FontSlant->"Italic"], " ", StyleBox["continued fraction", FontSlant->"Italic"], " is an expression of the form" }], "Definition", CellTags->"DefAppA Cont Frac"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "0"], "+", FractionBox["1", RowBox[{ SubscriptBox["a", "1"], "+", FractionBox["1", RowBox[{ SubscriptBox["a", "2"], "+", FractionBox["1", RowBox[{"\[Ellipsis]", " ", "+", FractionBox["\[Ellipsis]", RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "1"}]], "+", FractionBox["1", SubscriptBox["a", "m"]]}]]}]]}]]}]]}], TraditionalForm]]]], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.500008, 1, 0.900008], CellTags->"FormAppA Cont Frac"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "0"], "\[Element]", "\[DoubleStruckCapitalZ]"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], ".\nIt will often be denoted by the sequence ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "m"]}], "]"}], TraditionalForm]]], ". \n\nIf ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[RightArrow]", "\[Infinity]"}], TraditionalForm]]], " in (A.18), we speak of an ", StyleBox["infinite", FontSlant->"Italic"], " continued fraction. It has the form\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "0"], "+", FractionBox["1", RowBox[{ SubscriptBox["a", "1"], "+", FractionBox["1", RowBox[{ SubscriptBox["a", "2"], "+", FractionBox["1", RowBox[{ SubscriptBox["a", "3"], " ", "+", FractionBox["1", "\[Ellipsis]"]}]]}]]}]]}], TraditionalForm]]], "\n\t\t\nand will be shortened to ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", "\[Ellipsis]"}], "]"}], TraditionalForm]]], ". " }], "Definition", CounterIncrements->"None", Background->RGBColor[0.500008, 1, 0.900008]], Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " does no longer have a standard function to convert a list of positive \ integers to such an expression. The following function does realize this \ functionality." }], "Text", CellChangeTimes->{{3.423202483104906*^9, 3.4232024876518393`*^9}, { 3.4232025325899143`*^9, 3.4232026672166376`*^9}, {3.423203734630317*^9, 3.423203746974146*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"ContinuedFractionForm", "[", "c_List", "]"}], ":=", RowBox[{"DisplayForm", "[", RowBox[{"StyleBox", "[", RowBox[{ RowBox[{"Fold", "[", RowBox[{ RowBox[{ RowBox[{"RowBox", "[", RowBox[{"{", RowBox[{ RowBox[{"ToString", "[", "#2", "]"}], ",", "\"\<+\>\"", ",", RowBox[{"FractionBox", "[", RowBox[{"\"\<1\>\"", ",", "#1"}], "]"}]}], "}"}], "]"}], "&"}], ",", RowBox[{"Last", "[", "c", "]"}], ",", RowBox[{"Reverse", "[", RowBox[{"Most", "[", "c", "]"}], "]"}]}], "]"}], ",", RowBox[{"ScriptSizeMultipliers", "\[Rule]", "1"}]}], "]"}], "]"}]}]], "Input", InitializationCell->True, CellChangeTimes->{{3.4210585566887493`*^9, 3.421058598581251*^9}, { 3.4210586651154823`*^9, 3.4210586711001253`*^9}, {3.4210587022890224`*^9, 3.4210587059141846`*^9}, {3.421058739025043*^9, 3.4210587521818824`*^9}, { 3.421058796902151*^9, 3.421058817074542*^9}, {3.4210591443614473`*^9, 3.4210591703305297`*^9}, {3.421399418627346*^9, 3.421399419142971*^9}}, CellTags->"CFF"], Cell["As an example we give:", "Text", CellChangeTimes->{{3.423203318940157*^9, 3.4232033256902*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContinuedFractionForm", "[", RowBox[{"{", RowBox[{"5", ",", "6", ",", "7", ",", "8"}], "}"}], "]"}]], "Input", InitializationCell->True, CellChangeTimes->{{3.4210585566887493`*^9, 3.421058598581251*^9}, { 3.4210586651154823`*^9, 3.4210586711001253`*^9}, {3.4210587022890224`*^9, 3.4210587059141846`*^9}, {3.421058739025043*^9, 3.4210587521818824`*^9}, { 3.421058796902151*^9, 3.421058817074542*^9}, {3.4210591443614473`*^9, 3.4210591703305297`*^9}, {3.421399418627346*^9, 3.421399419142971*^9}, { 3.4232026916075745`*^9, 3.4232027568271594`*^9}, {3.4232033385809073`*^9, 3.423203342893435*^9}}], Cell[BoxData[ TagBox[ StyleBox[ RowBox[{"5", "+", FractionBox["1", RowBox[{"6", "+", FractionBox["1", RowBox[{"7", "+", FractionBox["1", "8"]}]]}]]}], ScriptSizeMultipliers->1], DisplayForm]], "Output", CellChangeTimes->{{3.423202698670165*^9, 3.4232027208891993`*^9}, 3.4232027577490463`*^9, 3.4232033434715633`*^9, 3.423298783543186*^9, 3.4233692843879147`*^9, 3.423371888361512*^9}] }, Open ]], Cell[TextData[{ "Clearly, each finite continued fraction represents a rational number. One \ can find it by simplifying the continued fraction step by step, starting with \ ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "1"}]], "+", FractionBox["1", SubscriptBox["a", "m"]]}], "=", FractionBox[ RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "1"}]], SubscriptBox["a", "m"]}], "+", "1"}], SubscriptBox["a", "m"]]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox["1", RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "1"}]], "+", FractionBox["1", SubscriptBox["a", "m"]]}]], "=", FractionBox[ SubscriptBox["a", "m"], RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "1"}]], SubscriptBox["a", "m"]}], "+", "1"}]]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "2"}]], "+", FractionBox["1", RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "1"}]], "+", FractionBox["1", SubscriptBox["a", "m"]]}]]}], "=", FractionBox[ RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "2"}]], "+", RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "2"}]], SubscriptBox["a", RowBox[{"m", "-", "1"}]], SubscriptBox["a", "m"]}], "+", SubscriptBox["a", "m"]}], RowBox[{"1", "+", RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "1"}]], SubscriptBox["a", "m"]}]}]]}], ","}], TraditionalForm]]], " etc.\nIn ", StyleBox["Mathematica", FontSlant->"Italic"], " this can be achieved with the function ", StyleBox["Normal", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.423202829515149*^9, 3.423202845859004*^9}, { 3.4232028789685907`*^9, 3.423202880546726*^9}, {3.4232031177513695`*^9, 3.4232031431109066`*^9}, {3.423203180673647*^9, 3.423203244611556*^9}, { 3.423474633902567*^9, 3.4234746372150884`*^9}}], Cell[BoxData[ RowBox[{"Normal", "[", RowBox[{"3", "+", FractionBox["1", RowBox[{"7", "+", FractionBox["1", RowBox[{"15", "+", FractionBox["1", RowBox[{"1", "+", FractionBox["1", "292"]}]]}]]}]]}], "]"}]], "Input"], Cell[BoxData[ FractionBox["103993", "33102"]], "Output", CellChangeTimes->{3.423371891521944*^9}], Cell["\<\ We shall now show that the opposite is also true: each rational number has a \ finite continued fraction.\ \>", "Text", CellChangeTimes->{{3.4232032713773527`*^9, 3.4232032935962443`*^9}}], Cell[TextData[{ StyleBox["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Each rational number has a finite continued fraction." }], "Theorem", CellTags->"LemAppA rat->CF"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ RowBox[{"a", "/", "b"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"b", ">", "0"}], TraditionalForm]]], ", represent a rational number. We apply the simple version of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA Simple Euclid"], " (Alg. A.7) to the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}], TraditionalForm]]], ", so we put ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], "=", "a"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "1"], "=", "b"}], TraditionalForm]]], ", and compute recursively ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "i"], "=", RowBox[{ RowBox[{ SubscriptBox["q", "i"], SubscriptBox["s", RowBox[{"i", "+", "1"}]]}], "+", SubscriptBox["s", RowBox[{"i", "+", "2"}]]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", SubscriptBox["s", RowBox[{"i", "+", "2"}]], "<", SubscriptBox["s", RowBox[{"i", "+", "1"}]]}], TraditionalForm]]], ", until ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", RowBox[{"m", "+", "2"}]], "=", "0"}], TraditionalForm]]], " (and thus ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "m"], "=", RowBox[{ SubscriptBox["q", "m"], SubscriptBox["s", RowBox[{"m", "+", "1"}]]}]}], TraditionalForm]]], ") for some integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". Then" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FractionBox["a", "b"], "=", RowBox[{ FractionBox[ SubscriptBox["s", "0"], SubscriptBox["s", "1"]], "=", RowBox[{ FractionBox[ RowBox[{ RowBox[{ SubscriptBox["q", "0"], SubscriptBox["s", "1"]}], "+", SubscriptBox["s", "2"]}], SubscriptBox["s", "1"]], "=", RowBox[{ RowBox[{ SubscriptBox["q", "0"], "+", FractionBox["1", SubscriptBox["s", RowBox[{"1", "/", SubscriptBox["s", "2"]}]]]}], "=", RowBox[{ RowBox[{ SubscriptBox["q", "0"], "+", FractionBox["1", FractionBox[ RowBox[{ RowBox[{ SubscriptBox["q", "1"], SubscriptBox["s", "2"]}], "+", SubscriptBox["s", "3"]}], SubscriptBox["s", "2"]]]}], "=", RowBox[{ RowBox[{ SubscriptBox["q", "0"], "+", FractionBox["1", RowBox[{ SubscriptBox["q", "1"], "+", FractionBox["1", RowBox[{ SubscriptBox["s", "2"], "/", SubscriptBox["s", "3"]}]]}]]}], "="}]}]}]}]}]}], TraditionalForm]]], "\[Ellipsis]\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"\[Ellipsis]", "=", RowBox[{ SubscriptBox["q", "0"], "+", FractionBox["1", RowBox[{ SubscriptBox["q", "1"], "+", FractionBox["1", RowBox[{"\[Ellipsis]", "+", FractionBox["\[Ellipsis]", RowBox[{ SubscriptBox["q", RowBox[{"m", "-", "1"}]], "+", FractionBox["1", RowBox[{ SubscriptBox["s", "m"], "/", SubscriptBox["s", RowBox[{"m", "+", "1"}]]}]]}]]}]]}]]}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ SubscriptBox["q", "0"], "+", FractionBox["1", RowBox[{ SubscriptBox["q", "1"], "+", FractionBox["1", RowBox[{"\[Ellipsis]", "+", FractionBox["\[Ellipsis]", RowBox[{ SubscriptBox["q", RowBox[{"m", "-", "1"}]], "+", FractionBox["1", SubscriptBox["q", "m"]]}]]}]]}]]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"a", "/", "b"}], TraditionalForm]]], " has ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["q", "0"], ",", SubscriptBox["q", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["q", "m"]}], "]"}], TraditionalForm]]], " as continued fraction." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "It is important to observe that the representation of a rational number as \ a finite simple continued fraction, where all the ", Cell[BoxData[ FormBox[ SubscriptBox["q", "i"], TraditionalForm]]], "'s (", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "1"}], TraditionalForm]]], ") are positive, is not completely unique. Although the manner in which the \ ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["q", "i"], "'"}], "s", " "}], TraditionalForm]]], " are calculated with the simple version of Euclid's Algorithm (see proof \ above) gives a unique value of the ", Cell[BoxData[ FormBox[ SubscriptBox["q", "i"], TraditionalForm]]], "'s, it is clear that in the last step we have ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "m"], "\[GreaterEqual]", "2"}], TraditionalForm]]], ", since ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", RowBox[{"m", "+", "1"}]], "<", SubscriptBox["s", "m"]}], TraditionalForm]]], ". \nAs the last term in the expansion is a positive integer, and not equal \ to one, we can therefore rewrite the last term as follows: " }], "Text"], Cell[BoxData[ RowBox[{ FractionBox["1", SubscriptBox["q", "m"]], "=", FractionBox["1", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["q", "m"], "-", "1"}], ")"}], "+", FractionBox["1", "1"]}], "."}]]}]], "DisplayFormula"], Cell[TextData[{ "This shows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"[", RowBox[{ SubscriptBox["q", "0"], ",", SubscriptBox["q", "1"], ",", "...", ",", " ", SubscriptBox["q", "m"]}], "]"}], " "}], TraditionalForm]]], "has the same value as ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"[", RowBox[{ SubscriptBox["q", "0"], ",", RowBox[{ SubscriptBox["q", "1"], " ", "..."}], ",", " ", RowBox[{ SubscriptBox["q", "m"], "-", "1"}], ",", "1"}], "]"}], "."}], TraditionalForm]]], "\nThe last term in a continued fraction can be chosen in such a way as to \ make the number of terms in the expansion either even or odd, if that would \ be convenient." }], "Text"], Cell[TextData[{ "Formula ", ButtonBox["(A.18)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA Cont Frac"], " suggests the following way of computing a continued fraction of a number \ \[Alpha]." }], "Text"], Cell[TextData[{ StyleBox["Algorithm A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "The continued fraction of a number \[Alpha] can be computed by\n\n\t", StyleBox["initialize", FontWeight->"Bold"], "\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Alpha]", "0"], "=", "\[Alpha]"}], TraditionalForm]]], "\n\t", StyleBox["compute", FontWeight->"Bold"], " recursively\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "=", RowBox[{"\[LeftFloor]", SubscriptBox["\[Alpha]", "i"], "\[RightFloor]"}]}], TraditionalForm]]], " and \n\t\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Alpha]", RowBox[{"i", "+", "1"}]], "=", RowBox[{"1", "/", RowBox[{"(", RowBox[{ SubscriptBox["\[Alpha]", "i"], "-", SubscriptBox["a", "i"]}], ")"}]}]}], TraditionalForm]]], ", \tfor ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], ",\n\t", StyleBox["output", FontWeight->"Bold"], "\t\t\t\t", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", SubscriptBox["a", "2"], ",", "\[Ellipsis]"}], "]"}], TraditionalForm]]], "." }], "Theorem", CellTags->"AlgAppA CF"], Cell[TextData[{ StyleBox["Example A.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"11", "/", "9"}]}], TraditionalForm]]], ". Then we get" }], "Example"], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "a", "]"}], ";"}], "\n", RowBox[{ RowBox[{"alpha", "=", RowBox[{"11", "/", "9"}]}], ";", RowBox[{ RowBox[{"\[Alpha]", "[", "0", "]"}], "=", "alpha"}], ";"}], "\n", RowBox[{ RowBox[{"a", "[", "0", "]"}], "=", RowBox[{"\[LeftFloor]", RowBox[{"\[Alpha]", "[", "0", "]"}], "\[RightFloor]"}]}], "\n", RowBox[{ RowBox[{ RowBox[{"\[Alpha]", "[", "1", "]"}], "=", RowBox[{"1", "/", RowBox[{"(", RowBox[{ RowBox[{"\[Alpha]", "[", "0", "]"}], "-", RowBox[{"a", "[", "0", "]"}]}], ")"}]}]}], ";"}]}], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output", CellChangeTimes->{3.421750973224141*^9}], Cell["To get the next term, we compute", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[{ RowBox[{ RowBox[{"a", "[", "1", "]"}], "=", RowBox[{"\[LeftFloor]", RowBox[{"\[Alpha]", "[", "1", "]"}], "\[RightFloor]"}]}], "\n", RowBox[{ RowBox[{ RowBox[{"\[Alpha]", "[", "2", "]"}], "=", RowBox[{"1", "/", RowBox[{"(", RowBox[{ RowBox[{"\[Alpha]", "[", "1", "]"}], "-", RowBox[{"a", "[", "1", "]"}]}], ")"}]}]}], ";"}]}], "Input", GeneratedCell->True], Cell[BoxData["4"], "Output", CellChangeTimes->{3.4217509757397985`*^9}], Cell["We continue with", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[{ RowBox[{ RowBox[{"a", "[", "2", "]"}], "=", RowBox[{"\[LeftFloor]", RowBox[{"\[Alpha]", "[", "2", "]"}], "\[RightFloor]"}]}], "\n", RowBox[{ RowBox[{ RowBox[{"\[Alpha]", "[", "3", "]"}], "=", RowBox[{"1", "/", RowBox[{"(", RowBox[{ RowBox[{"\[Alpha]", "[", "2", "]"}], "-", RowBox[{"a", "[", "2", "]"}]}], ")"}]}]}], ";"}]}], "Input", GeneratedCell->True], Cell[BoxData["2"], "Output", CellChangeTimes->{3.421750977880451*^9}], Cell[TextData[{ "We conclude that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Alpha]", "2"], "=", SubscriptBox["a", "2"]}], TraditionalForm]]], " and thus that the continued fraction is given by ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{"1", ",", "4", ",", "2"}], "]"}], TraditionalForm]]], ". We can check this quite easily:" }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[ RowBox[{"Normal", "[", RowBox[{"1", "+", FractionBox["1", RowBox[{"4", "+", FractionBox["1", "2"]}]]}], "]"}]], "Input"], Cell[BoxData[ FractionBox["11", "9"]], "Output"], Cell[TextData[{ "To let ", StyleBox["Mathematica", FontSlant->"Italic"], " compute the continued fraction of a number, one can use the function ", StyleBox["ContinuedFraction", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{{3.4214705909662347`*^9, 3.4214706058412347`*^9}, { 3.4234746932623224`*^9, 3.423474700449868*^9}}], Cell["ContinuedFraction[135/159]", "Input", CellTags->"S5.67.1"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "5", ",", "1", ",", "1", ",", "1", ",", "2"}], "}"}]], "Output", CellChangeTimes->{3.4214705774349847`*^9}, CellTags->"S5.67.1"], Cell["\<\ If \[Alpha] is not rational, one has to include the number of terms that one \ wants to see.\ \>", "Text"], Cell["ContinuedFraction[Pi, 11]", "Input", CellTags->"S5.67.1"], Cell[BoxData[ TagBox[ StyleBox[ RowBox[{"3", "+", FractionBox["1", RowBox[{"7", "+", FractionBox["1", RowBox[{"15", "+", FractionBox["1", RowBox[{"1", "+", FractionBox["1", RowBox[{"292", "+", FractionBox["1", RowBox[{"1", "+", FractionBox["1", RowBox[{"1", "+", FractionBox["1", RowBox[{"1", "+", FractionBox["1", RowBox[{"2", "+", FractionBox["1", RowBox[{"1", "+", FractionBox["1", "3"]}]]}]]}]]}]]}]]}]]}]]}]]}]]}], ScriptSizeMultipliers->1], Global`ContinuedFractionForm[{3, 7, 15, 1, 292, 1, 1, 1, 2, 1, 3}]& ]], "Output"], Cell[TextData[{ "To express such a continued fraction as a regular fraction, one can use the \ ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Normal", FontVariations->{"Underline"->True}], " again." }], "Text", CellChangeTimes->{{3.4234746617308702`*^9, 3.423474663215255*^9}}], Cell["Normal[ContinuedFraction[Pi, 11]]", "Input", CellTags->"S5.67.1"], Cell[BoxData[ FractionBox["4272943", "1360120"]], "Output"], Cell[TextData[{ "If a continued fraction is given in the form ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "m"]}], "]"}], TraditionalForm]]], ", one gets the regular continued fraction by means of the function \ ContinuedFractionForm defined earlier. The reader should know that in ", StyleBox["Mathematica", FontSlant->"Italic"], " the numbering of the indices starts with ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "2"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[" ", TraditionalForm]]], "etc." }], "Text", CellChangeTimes->{{3.4232036026138473`*^9, 3.423203638410951*^9}, { 3.423204263007656*^9, 3.423204283616767*^9}, {3.423204322241273*^9, 3.423204335756725*^9}, {3.42320442245874*^9, 3.4232044225056143`*^9}, { 3.423474948888958*^9, 3.423474963373426*^9}}], Cell["\<\ AA={3,7,15,1,292}; ContinuedFractionForm[AA]\ \>", "Input", CellChangeTimes->{{3.423201707252121*^9, 3.4232017116584272`*^9}, { 3.4233714465245705`*^9, 3.423371450868348*^9}, {3.4233715365720215`*^9, 3.423371538181407*^9}}, CellTags->"S5.67.1"], Cell[BoxData[ TagBox[ StyleBox[ RowBox[{"3", "+", FractionBox["1", RowBox[{"7", "+", FractionBox["1", RowBox[{"15", "+", FractionBox["1", RowBox[{"1", "+", FractionBox["1", "292"]}]]}]]}]]}], ScriptSizeMultipliers->1], DisplayForm]], "Output", CellChangeTimes->{{3.4232016967676115`*^9, 3.42320171347095*^9}, 3.423371451743354*^9, {3.42337153160324*^9, 3.4233715389626617`*^9}, 3.4233719036630073`*^9}, CellTags->"S5.67.1"], Cell[TextData[{ "To obtain the first ", Cell[BoxData[ FormBox[ RowBox[{"m", "+", "1"}], TraditionalForm]]], " terms of the continued fraction of a real (i.e. the form ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "m"]}], "]"}], TraditionalForm]]], "), one can use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["ContinuedFraction", FontVariations->{"Underline"->True}], " again. " }], "Text", CellChangeTimes->{{3.423371985552601*^9, 3.4233720197384553`*^9}, { 3.4234748449351683`*^9, 3.423474906716813*^9}}], Cell["ContinuedFraction[Pi, 11]", "Input", CellChangeTimes->{3.4233719402113624`*^9}, CellTags->"S5.67.1"], Cell[BoxData[ RowBox[{"{", RowBox[{ "3", ",", "7", ",", "15", ",", "1", ",", "292", ",", "1", ",", "1", ",", "1", ",", "2", ",", "1", ",", "3"}], "}"}]], "Output", CellChangeTimes->{{3.4233719222500987`*^9, 3.4233719408841276`*^9}, 3.423372028046322*^9}, CellTags->"S5.67.1"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nThe ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-th ", StyleBox["convergent", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ SubscriptBox["C", "k"], TraditionalForm]]], " of a continued fraction ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "m"]}], "]"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "k", "\[LessEqual]", "m"}], TraditionalForm]]], ", is defined by ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "k"]}], "]"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppA Cont Frac Appr"], Cell[TextData[{ "The value of the succesive convergents can be evaluated with the function \ ", StyleBox["Convergents", FontVariations->{"Underline"->True}], " (and ", StyleBox["Length", FontVariations->{"Underline"->True}], ")." }], "Text", CellChangeTimes->{{3.423204443083476*^9, 3.4232044806923695`*^9}, { 3.4233711480705185`*^9, 3.4233711588673244`*^9}, 3.423372234895847*^9, { 3.4233723870923386`*^9, 3.423372390092857*^9}, {3.423372478076808*^9, 3.4233724968613033`*^9}}], Cell[CellGroupData[{ Cell["\<\ AA={3,7,15,1,292}; Convergents[AA,Length[AA]]\ \>", "Input", CellChangeTimes->{{3.42337117122662*^9, 3.423371180320312*^9}, { 3.4233713524927187`*^9, 3.42337142293067*^9}, {3.4233721481203947`*^9, 3.4233721969716444`*^9}, {3.423372255968322*^9, 3.4233722626746216`*^9}, { 3.423372320029897*^9, 3.423372343275276*^9}, {3.4233724455555644`*^9, 3.423372457323222*^9}}, CellTags->"S5.67.1"], Cell[BoxData[ RowBox[{"{", RowBox[{"3", ",", FractionBox["22", "7"], ",", FractionBox["333", "106"], ",", FractionBox["355", "113"], ",", FractionBox["103993", "33102"]}], "}"}]], "Output", CellChangeTimes->{ 3.4233721980033827`*^9, 3.423372263159226*^9, {3.4233723207333555`*^9, 3.4233723445571327`*^9}, 3.4233724608082*^9}, CellTags->"S5.67.1"] }, Open ]], Cell[TextData[{ "Each convergent, being a rational number, can be written as ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "k"], "/", SubscriptBox["q", "k"]}], TraditionalForm]]], ". The values of ", Cell[BoxData[ FormBox[ SubscriptBox["p", "k"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["q", "k"], TraditionalForm]]], " can be found with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Numerator", FontVariations->{"Underline"->True}], " and ", StyleBox["Denominator", FontVariations->{"Underline"->True}], ". " }], "Text", CellChangeTimes->{{3.4234749986392765`*^9, 3.4234750191081576`*^9}}], Cell["\<\ C5=Normal[ContinuedFraction[Pi,5]] p5=Numerator[C5] q5=Denominator[C5]\ \>", "Input", CellTags->"S5.67.1"], Cell[BoxData[ FractionBox["103993", "33102"]], "Output"], Cell[BoxData["103993"], "Output"], Cell[BoxData["33102"], "Output"], Cell[TextData[{ "The next theorem gives a nice relation between a continued fraction and its \ convergents. To be able to shorten the proof, we shall relax our usual \ restriction of the integrality of the ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], "'s." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be a finite or infinite sequence of reals, all positive with the possible \ exception of ", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]]], ".\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "k"], "=", RowBox[{ SubscriptBox["p", "k"], "/", SubscriptBox["q", "k"]}]}], TraditionalForm]]], " be defined by ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", " ", "\[Ellipsis]", ",", SubscriptBox["a", "k"]}], "]"}], TraditionalForm]]], " as in ", ButtonBox["(A.18)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA Cont Frac"], ". Then, the numbers ", Cell[BoxData[ FormBox[ SubscriptBox["p", "k"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["q", "k"], TraditionalForm]]], " satisfy the recurrence relation\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "0"], "=", SubscriptBox["a", "0"]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "=", RowBox[{ RowBox[{ SubscriptBox["a", "0"], SubscriptBox["a", "1"]}], "+", "1"}]}], TraditionalForm]]], ",\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "0"], "=", "1"}], TraditionalForm]]], ",\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "1"], "=", SubscriptBox["a", "1"]}], TraditionalForm]]], ",\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "k"], "=", RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["p", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["p", RowBox[{"k", "-", "2"}]]}]}], TraditionalForm]]], " , \t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "\[GreaterEqual]", "2"}], ","}], TraditionalForm]]], "\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "k"], "=", RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["q", RowBox[{"k", "-", "2", " "}]]}]}], TraditionalForm]]], ", \t\t", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "2"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA recurr CF"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The proof is by induction on ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ".\nFor ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "0"}], TraditionalForm]]], ", we have ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ SubscriptBox["p", "0"], SubscriptBox["q", "0"]], "=", RowBox[{ SubscriptBox["C", "0"], "=", RowBox[{ SubscriptBox["a", "0"], "=", FractionBox[ SubscriptBox["a", "0"], "1"]}]}]}], TraditionalForm]]], ", so indeed ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "0"], "=", SubscriptBox["a", "0"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "0"], "=", "1"}], TraditionalForm]]], ".\nFor ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "1"}], TraditionalForm]]], ", we have ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ SubscriptBox["p", "1"], SubscriptBox["q", "1"]], "=", RowBox[{ SubscriptBox["C", "1"], "=", RowBox[{ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"]}], "]"}], "=", RowBox[{ RowBox[{ SubscriptBox["a", "0"], "+", FractionBox["1", SubscriptBox["a", "1"]]}], "=", FractionBox[ RowBox[{ RowBox[{ SubscriptBox["a", "0"], SubscriptBox["a", "1"]}], "+", "1"}], SubscriptBox["a", "1"]]}]}]}]}], TraditionalForm]]], ", so indeed ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "=", RowBox[{ RowBox[{ SubscriptBox["a", "0"], SubscriptBox["a", "1"]}], "+", "1"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "1"], "=", SubscriptBox["a", "1"]}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Assume that the theorem has been proved up to a certain value of ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ". So, " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "k"], "=", " ", RowBox[{ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "k"]}], "]"}], TraditionalForm], " ", "=", RowBox[{ FractionBox[ SubscriptBox["p", "k"], SubscriptBox["q", "k"]], "=", FractionBox[ RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["p", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["p", RowBox[{"k", "-", "2"}]]}], RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["q", RowBox[{"k", "-", "2"}]]}]]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Now substitute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "k"], "\[RightArrow]", RowBox[{ SubscriptBox["a", "k"], "+", RowBox[{"1", "/", SubscriptBox["a", RowBox[{"k", "+", "1"}]]}]}]}], TraditionalForm]]], " above. Then " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[{ FormBox[ RowBox[{ SubscriptBox["C", RowBox[{"k", "+", "1"}]], OverscriptBox["=", RowBox[{"def", "."}]], " ", RowBox[{ FormBox[ RowBox[{ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["a", "k"], ",", SubscriptBox["a", RowBox[{"k", "+", "1"}]]}], "]"}], OverscriptBox["=", ButtonBox[ StyleBox[ RowBox[{ RowBox[{"Def", ".", " ", "A"}], ".12"}], FontSize->7], BaseStyle->"Hyperlink", ButtonData:>"DefAppA Cont Frac"]]}], TraditionalForm], FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", "\[Ellipsis]", ",", RowBox[{ SubscriptBox["a", "k"], "+", FractionBox["1", SubscriptBox["a", RowBox[{"k", "+", "1"}]]]}]}], "]"}], TraditionalForm]}]}], TraditionalForm], "\n", FormBox[ RowBox[{"\t\t\t "}], TraditionalForm]}]], "\n", Cell[BoxData[ FormBox[ OverscriptBox["=", RowBox[{"induct", "."}]], TraditionalForm]]], Cell[BoxData[ FormBox[ FractionBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["a", "k"], "+", FractionBox["1", SubscriptBox["a", RowBox[{"k", "+", "1"}]]]}], ")"}], SubscriptBox["p", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["p", RowBox[{"k", "-", "2"}]]}], RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["a", "k"], "+", FractionBox["1", SubscriptBox["a", RowBox[{"k", "+", "1"}]]]}], ")"}], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["q", RowBox[{"k", "-", "2"}]]}]], TraditionalForm]]], " =", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"k", "+", "1"}]], "(", RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["p", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["p", RowBox[{"k", "-", "2"}]]}], ")"}], "+", SubscriptBox["p", RowBox[{"k", "-", "1"}]]}], RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"k", "+", "1"}]], "(", RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["q", RowBox[{"k", "-", "2"}]]}], ")"}], "+", SubscriptBox["q", RowBox[{"k", "-", "1"}]]}]], TraditionalForm]]], " \n\n", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["=", RowBox[{"rec", ".", "rel", "."}]], FractionBox[ RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"k", "+", "1"}]], SubscriptBox["p", "k"]}], "+", SubscriptBox["p", RowBox[{"k", "-", "1"}]]}], RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"k", "+", "1"}]], SubscriptBox["q", "k"]}], "+", SubscriptBox["q", RowBox[{"k", "-", "1"}]]}]]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["=", RowBox[{"rec", ".", "rel", "."}]], FractionBox[ SubscriptBox["p", RowBox[{"k", "+", "1"}]], SubscriptBox["q", RowBox[{"k", "+", "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["A small result, that we need later, is the inequality ", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "k"], "\[GreaterEqual]", SubscriptBox["F", "k"]}], TraditionalForm]]], "," }], "NumberedEquationAppendix", CellMargins->{{Inherited, 5}, {Inherited, Inherited}}, GeneratedCell->True, CellTags->"FormAppA qk>Fk"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ SubscriptBox["F", "k"], TraditionalForm]]], " is the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-th ", ButtonBox["Fibonnaci", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Fibonnaci"], " number, defined by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", "0"], "=", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", "1"], "=", "1"}], TraditionalForm]]], ", and the recurrence relation ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", "k"], "=", RowBox[{ SubscriptBox["F", RowBox[{"k", "-", "1"}]], "+", SubscriptBox["F", RowBox[{"k", "-", "2"}]]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "2"}], TraditionalForm]]], ". The inequality ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "k"], "\[GreaterEqual]", SubscriptBox["F", "k"]}], TraditionalForm]]], " follows with an easy induction argument from ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "0"], ">", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "1"], "\[GreaterEqual]", "1"}], TraditionalForm]]], ", and the recurrence relation ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "k"], "=", RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["q", RowBox[{"k", "-", "2"}]]}]}], TraditionalForm]]], " in which ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "k"], "\[GreaterEqual]", "1"}], TraditionalForm]]], " (use ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "k"], "\[GreaterEqual]", RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "1"}]], "+", SubscriptBox["q", RowBox[{"k", "-", "2"}]]}]}], TraditionalForm]]], ")." }], "Text"], Cell[TextData[{ StyleBox["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "k"], "=", RowBox[{ SubscriptBox["p", "k"], "/", SubscriptBox["q", "k"]}]}], TraditionalForm]]], " be the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-th convergent of a continued fraction. Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], "-", RowBox[{ SubscriptBox["p", RowBox[{"k", "-", "1"}]], SubscriptBox["q", "k"]}]}], "=", SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]]}], TraditionalForm]]] }], "Theorem", CellTags->"LemAppA pq-pq=-1"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The proof is again by induction on ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ". For ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "1"}], TraditionalForm]]], " we have by ", ButtonBox["Theorem A.30", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA recurr CF"], " that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", "1"], SubscriptBox["q", "0"]}], "-", RowBox[{ SubscriptBox["p", "0"], SubscriptBox["q", "1"]}]}], "="}], TraditionalForm], FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["a", "0"], SubscriptBox["a", "1"]}], "+", "1"}], ")"}], "\[Times]", "1"}], "-"}], TraditionalForm], SubscriptBox["a", "0"], "\[Times]", SubscriptBox["a", "1"]}], "=", "1"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "To prove the step from ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", "1"}], TraditionalForm]]], " we use the recurrence relation in Theorem A.30: " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"k", "+", "1"}]], SubscriptBox["q", "k"]}], "-", RowBox[{ SubscriptBox["p", "k"], SubscriptBox["q", RowBox[{"k", "+", "1"}]], OverscriptBox["=", StyleBox[ ButtonBox[ StyleBox[ RowBox[{ RowBox[{"Thm", ".", " ", "A"}], ".30"}], FontSize->9], BaseStyle->"Hyperlink", ButtonData:>"TheoAppA recurr CF"], FontSize->9]], RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"k", "+", "1"}]], SubscriptBox["p", "k"]}], "+", SubscriptBox["p", RowBox[{"k", "-", "1"}]]}], ")"}], SubscriptBox["q", "k"]}], "-", RowBox[{ SubscriptBox["p", "k"], "(", RowBox[{ RowBox[{ SubscriptBox["a", RowBox[{"k", "+", "1"}]], SubscriptBox["q", "k"]}], "+", SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], ")"}]}], "=", "\n", "\n", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"k", "-", "1"}]], SubscriptBox["q", "k"]}], "-", RowBox[{ SubscriptBox["p", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}]}], OverscriptBox["=", RowBox[{"ind", "."}]], RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"-", "1"}], ")"}], SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]]}], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "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["Corollary A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "k"], "=", RowBox[{ SubscriptBox["p", "k"], "/", SubscriptBox["q", "k"]}]}], TraditionalForm]]], " be the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-th convergent of a continued fraction. Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"gcd", "(", RowBox[{ SubscriptBox["p", "k"], ",", SubscriptBox["q", "k"]}], ")"}], "=", "1"}], ","}], TraditionalForm]]], "\t" }], "Theorem", CellTags->"CorAppA CF gcd(p q)=1"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": This is an immediate consequence of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"k", "-", "1"}]], SubscriptBox["q", "k"]}], "-", RowBox[{ SubscriptBox["p", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}]}], "=", SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], ". Indeed, each number dividing ", Cell[BoxData[ FormBox[ SubscriptBox["p", "k"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["q", "k"], TraditionalForm]]], " must also divide ", Cell[BoxData[ FormBox[ RowBox[{"-", "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[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "k"], "=", RowBox[{ SubscriptBox["p", "k"], "/", SubscriptBox["q", "k"]}]}], TraditionalForm]]], " be the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-th convergent of a finite or infinite continued fraction ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", " ", "\[Ellipsis]"}], "]"}], TraditionalForm]]], ". Then\t" }], "Theorem"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["C", "k"], "-", SubscriptBox["C", RowBox[{"k", "-", "1"}]]}], "=", FractionBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]], RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "1"}]], SubscriptBox["q", "k"]}]]}], TraditionalForm]]], ",\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "\[GreaterEqual]", "1"}], ","}], TraditionalForm]]] }], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormAppA Ck-Ck-1"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["C", "k"], "-", SubscriptBox["C", RowBox[{"k", "-", "2"}]]}], "=", FractionBox[ SuperscriptBox[ RowBox[{ SubscriptBox["a", "k"], "(", RowBox[{"-", "1"}], ")"}], "k"], RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "2"}]], SubscriptBox["q", "k"]}]]}], TraditionalForm]]], ",\t\t", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "2."}], TraditionalForm]]] }], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "0"], "<", SubscriptBox["C", "2"], "<", SubscriptBox["C", "4"], "<", "\[Ellipsis]\[Ellipsis]", "<", SubscriptBox["C", "5"], "<", SubscriptBox["C", "3"], "<", SubscriptBox["C", "1"]}], TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.839994, 1, 0.2]], Cell["\<\ For an infinite continued fraction, the strictly increasing bounded sequence \ of the even convergents has the same limit as the strictly decreasing bounded \ sequence of the odd convergents.\ \>", "Theorem", CounterIncrements->"None"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": By ", ButtonBox["Lemma A.31", BaseStyle->"Hyperlink", ButtonData:>"LemAppA pq-pq=-1"], " and ", ButtonBox["Theorem A.30", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA recurr CF"], " " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["C", "k"], "-", SubscriptBox["C", RowBox[{"k", "-", "1"}]]}], "=", RowBox[{ RowBox[{ FractionBox[ SubscriptBox["p", "k"], SubscriptBox["q", "k"]], "-", FractionBox[ SubscriptBox["p", RowBox[{"k", "-", "1"}]], SubscriptBox["q", RowBox[{"k", "-", "1"}]]]}], "=", RowBox[{ FractionBox[ RowBox[{ RowBox[{ SubscriptBox["p", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], "-", RowBox[{ SubscriptBox["p", RowBox[{"k", "-", "1"}]], SubscriptBox["q", "k"]}]}], RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "1"}]], SubscriptBox["q", "k"]}]], "=", FractionBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], RowBox[{"k", "-", "1"}]], RowBox[{ SubscriptBox["q", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}]]}]}]}], TraditionalForm]]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["C", "k"], "-", SubscriptBox["C", RowBox[{"k", "-", "2"}]]}], "=", RowBox[{ RowBox[{ FractionBox[ SubscriptBox["p", "k"], SubscriptBox["q", "k"]], "-", FractionBox[ SubscriptBox["p", RowBox[{"k", "-", "2"}]], SubscriptBox["q", RowBox[{"k", "-", "2"}]]]}], "=", FractionBox[ RowBox[{ RowBox[{ SubscriptBox["p", "k"], SubscriptBox["q", RowBox[{"k", "-", "2"}]]}], "-", RowBox[{ SubscriptBox["p", RowBox[{"k", "-", "2"}]], SubscriptBox["q", "k"]}]}], RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "2"}]], SubscriptBox["q", "k"]}]]}]}], TraditionalForm]]], "\n\n\t ", Cell[BoxData[ FormBox["=", TraditionalForm]]], Cell[BoxData[ FormBox[ FractionBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["p", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["p", RowBox[{"k", "-", "2"}]]}], ")"}], SubscriptBox["q", RowBox[{"k", "-", "2"}]]}], "-", RowBox[{ SubscriptBox["p", RowBox[{"k", "-", "2"}]], "(", RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}], "+", SubscriptBox["q", RowBox[{"k", "-", "2"}]]}], ")"}]}], RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "2"}]], SubscriptBox["q", "k"]}]], TraditionalForm]]], "\n\t \n\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ FormBox[ FractionBox[ RowBox[{ RowBox[{ SubscriptBox["a", "k"], SubscriptBox["p", RowBox[{"k", "-", "1"}]], SubscriptBox["q", RowBox[{"k", "-", "2"}]]}], "-", RowBox[{ SubscriptBox["a", "k"], SubscriptBox["p", RowBox[{"k", "-", "2"}]], SubscriptBox["q", RowBox[{"k", "-", "1"}]]}]}], RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "2"}]], SubscriptBox["q", "k"]}]], TraditionalForm], "=", FractionBox[ SuperscriptBox[ RowBox[{ SubscriptBox["a", "k"], "(", RowBox[{"-", "1"}], ")"}], "k"], RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "2"}]], SubscriptBox["q", "k"]}]]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "This proves (A.20) and (A.21). That the even convergents form a strictly \ increasing sequence follows from (A.21), which implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["C", RowBox[{"2", "k"}]], "-", SubscriptBox["C", RowBox[{ RowBox[{"2", "k"}], "-", "2"}]]}], ">", "0"}], TraditionalForm]]], " (the ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], "'s are positive). For the same reason, the odd convergents are strictly \ decreasing.\nTo show that each even convergent, say ", Cell[BoxData[ FormBox[ SubscriptBox["C", RowBox[{"2", "i"}]], TraditionalForm]]], ", is less that any odd convergent, say ", Cell[BoxData[ FormBox[ SubscriptBox["C", RowBox[{ RowBox[{"2", "j"}], "+", "1"}]], TraditionalForm]]], ", we first observe that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["C", RowBox[{ RowBox[{"2", "k"}], "+", "1"}]], "-", SubscriptBox["C", RowBox[{"2", "k"}]]}], ">", "0"}], TraditionalForm]]], " by ", ButtonBox["(A.20)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA Ck-Ck-1"], ". We combine this with the above to get" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ SubscriptBox["C", RowBox[{"2", "i"}]], "<", SubscriptBox["C", RowBox[{ RowBox[{"2", "i"}], "+", RowBox[{"2", "j"}]}]]}], TraditionalForm], "<", SubscriptBox["C", RowBox[{ RowBox[{"2", "i"}], "+", RowBox[{"2", "j"}], "+", "1"}]], "<", SubscriptBox["C", RowBox[{ RowBox[{"2", "j"}], "+", "1"}]]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Finally, by ", ButtonBox["(A.19)", BaseStyle->"Hyperlink", ButtonData:>"FormAppA qk>Fk"], " and (A.20), for ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "2"}], TraditionalForm]]] }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox[ RowBox[{"(", RowBox[{"|", "C"}], ")"}], "k"], "-", SubscriptBox["C", RowBox[{"k", "-", "1"}]]}], "|"}], "=", RowBox[{ FractionBox["1", RowBox[{ SubscriptBox["q", RowBox[{"k", "-", "1"}]], SubscriptBox["q", "k"]}]], "\[LessEqual]", FractionBox["1", RowBox[{ SubscriptBox["F", RowBox[{"k", "-", "1"}]], SubscriptBox["F", "k"]}]], "\[LessEqual]", FractionBox["1", SuperscriptBox[ RowBox[{"(", RowBox[{"k", "-", "1"}], ")"}], "2"]]}]}], TraditionalForm]]] }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "thus, the difference between two consecutive convergents tends to zero as \ ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " tends to infinity. This shows that the limit of the even convergents must \ be the same as the limit of the odd convergents." }], "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 A.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nBelow we have listed the first 10 convergents of ", Cell[BoxData[ FormBox["\[Pi]", TraditionalForm]]], " in their natural ordering. " }], "Example"], Cell[BoxData[{ RowBox[{"Do", "[", RowBox[{ RowBox[{"Print", "[", RowBox[{ RowBox[{"k", "-", "1"}], ",", "\"\< \>\"", ",", RowBox[{"N", "[", RowBox[{ RowBox[{"Normal", "[", RowBox[{"ContinuedFraction", "[", RowBox[{"Pi", ",", " ", "k"}], "]"}], "]"}], ",", "16"}], "]"}]}], "]"}], ",", RowBox[{"{", RowBox[{"k", ",", "1", ",", "9", ",", "2"}], "}"}]}], "]"}], "\n", RowBox[{"Print", "[", RowBox[{"\[Pi]", ",", "\"\< \>\"", ",", RowBox[{"N", "[", RowBox[{"Pi", ",", "16"}], "]"}]}], "]"}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{"Print", "[", RowBox[{ RowBox[{"k", "-", "1"}], ",", "\"\< \>\"", ",", RowBox[{"N", "[", RowBox[{ RowBox[{"Normal", "[", RowBox[{"ContinuedFraction", "[", RowBox[{"Pi", ",", " ", "k"}], "]"}], "]"}], ",", "16"}], "]"}]}], "]"}], ",", RowBox[{"{", RowBox[{"k", ",", "10", ",", "2", ",", RowBox[{"-", "2"}]}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{"0", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[0, " ", 3.], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"2", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.141509433962264`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[2, " ", 3.141509433962264], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"4", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14159265301190249`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[4, " ", 3.1415926530119025`], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"6", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14159265346743676`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[6, " ", 3.1415926534674368`], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"8", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14159265358107786`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[8, " ", 3.141592653581078], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\[Pi]", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14159265358979311`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[Pi, " ", 3.141592653589793], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"9", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14159265359140382`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[9, " ", 3.141592653591404], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"7", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14159265361893647`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[7, " ", 3.1415926536189365`], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"5", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14159265392142117`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[5, " ", 3.141592653921421], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"3", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14159292035398252`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[3, " ", 3.1415929203539825`], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"1", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", StyleBox["3.14285714285714279`", StyleBoxAutoDelete->True, PrintPrecision->16]}], SequenceForm[1, " ", 3.142857142857143], Editable->False]], "Print"], Cell[TextData[{ "The next two theorems will be stated without their proofs. These can be \ found in any introduction to continued fractions, e.g. ", ButtonBox["[Rose84]", BaseStyle->"Hyperlink", ButtonData:>"RefRose84"], ", but the arguments are too technical for our purposes. " }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "k"], "=", RowBox[{ SubscriptBox["p", "k"], "/", SubscriptBox["q", "k"]}]}], TraditionalForm]]], " be the ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-th convergent of a finite or infinite continued fraction ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", RowBox[{"[", RowBox[{ SubscriptBox["a", "0"], ",", SubscriptBox["a", "1"], ",", " ", "\[Ellipsis]"}], "]"}]}], TraditionalForm]]], " and suppose that ", Cell[BoxData[ FormBox[ RowBox[{"|", RowBox[{"\[Alpha]", "-", RowBox[{"r", "/", "s"}]}], "|", RowBox[{"<", RowBox[{"|", RowBox[{"\[Alpha]", "-", RowBox[{ SubscriptBox["p", "k"], "/", SubscriptBox["q", "k"]}]}], "|"}]}]}], TraditionalForm]]], ". \nThen ", Cell[BoxData[ FormBox[ RowBox[{"s", ">", SubscriptBox["q", "k"]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ "For instance, since ", Cell[BoxData[ FractionBox["355", "113"]]], "is a convergent of \[Pi], we now know that only rationals with a \ denominator greater than 113 may lie closer to \[Pi] than ", Cell[BoxData[ FractionBox["355", "113"]]], "does." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", "\[DoubleStruckCapitalR]"}], TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ RowBox[{"r", "/", "s"}], TraditionalForm]]], " (with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"r", ",", "s"}], ")"}], "=", "1"}], TraditionalForm]]], ") be a rational such that ", Cell[BoxData[ FormBox[ RowBox[{"|", RowBox[{"\[Alpha]", "-", RowBox[{"r", "/", "s"}]}], "|", RowBox[{ RowBox[{"<", RowBox[{"1", "/", "2"}]}], SuperscriptBox["s", "2"]}]}], TraditionalForm]]], ". \nThen ", Cell[BoxData[ FormBox[ RowBox[{"r", "/", "s"}], TraditionalForm]]], " is a convergent of the continued fraction expansion of \[Alpha]." }], "Theorem", CellTags->"TheoAppA CF Best Appr"], Cell[TextData[{ "This theorem says that a rational number ", Cell[BoxData[ FormBox[ RowBox[{"r", "/", "s"}], TraditionalForm]]], " that lies at distance at most ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "/", "2"}], SuperscriptBox["s", "2"]}], TraditionalForm]]], " from a number \[Alpha] will appear as convergent in the continued fraction \ of that number. " }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], "\tM\[ODoubleDot]bius Inversion Formula, the Principle of Inclusion and \ Exclusion" }], "Section", CellTags->"SecAppA Mobius"], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tM\[ODoubleDot]bius Inversion Formula" }], "Subsection", CellTags->"SubsAppA Mobius"], Cell[TextData[{ "Often in Discrete Mathematics a function ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is defined in terms of another function, say ", Cell[BoxData[ FormBox["g", TraditionalForm]]], ". The question is, how ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " can be expressed in terms of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], ". With the theory of partially ordered sets and the (generalized) M\ \[ODoubleDot]bius Inversion Formula one can frequently solve this problem \ (see Chapter IV in ", ButtonBox["[Aign79]", BaseStyle->"Hyperlink", ButtonData:>"RefAig79"], "). In this section we shall discuss two important special cases.They both \ follow from the theory, mentioned above, but it turns out that they can also \ be proved directly.\nOften we shall need an explicit factorization of an \ integer n. We no longer want the strict ordering of the prime numbers given \ by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "=", "2"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "2"], "=", "3"}], TraditionalForm]]], ", etc.. However, different subscripts will still denote different prime \ numbers." }], "Text"], Cell[TextData[{ StyleBox["Definition A.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", FormBox[ SuperscriptBox[ RowBox[{ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], " ", RowBox[{"(", SubscriptBox["p", "i"]}]}], TraditionalForm], ")"}], SubscriptBox["e", "i"]], TraditionalForm]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["e", "i"], TraditionalForm], ">", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", where the ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], "'s are different primes. Then the", StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], StyleBox["M\[ODoubleDot]bius function ", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"\[Mu]", "(", "n", ")"}], TraditionalForm]], FontSlant->"Italic"], " (", ButtonBox["M\[ODoubleDot]bius", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: August Ferdinand M\[ODoubleDot]bius"], ") is defined by\n\n\t\t\[Mu](n) = ", Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ {"1", " ", RowBox[{ RowBox[{ RowBox[{"if", " ", StyleBox["n", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox["1", FontSlant->"Italic"]}], StyleBox[",", FontSlant->"Italic"]}]}, {"0", " ", RowBox[{ RowBox[{ RowBox[{ RowBox[{"if", " ", StyleBox[ SubscriptBox["e", "i"], FontSlant->"Italic"]}], StyleBox["\[GreaterEqual]", FontSlant->"Italic"], RowBox[{ StyleBox["2", FontSlant->"Italic"], " ", "for", " ", "some", " ", StyleBox["1", FontSlant->"Italic"]}], StyleBox["\[LessEqual]", FontSlant->"Italic"], StyleBox["i", FontSlant->"Italic"], StyleBox["\[LessEqual]", FontSlant->"Italic"], StyleBox["k", FontSlant->"Italic"]}], StyleBox[",", FontSlant->"Italic"]}], " "}]}, { SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "k"], " ", RowBox[{"if", " ", "all", " ", StyleBox[ SubscriptBox["e", "i"], FontSlant->"Italic"], StyleBox[" ", FontSlant->"Italic"], "are", " ", "equal", " ", "to", " ", "1."}]} }]}]], TextJustification->1] }], "Definition", CellTags->"DefAppA Mobius function"], Cell[TextData[{ "In other words, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Mu]", "(", "n", ")"}], " "}], TraditionalForm]]], "is the multiplicative function satisfying ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Mu]", " ", RowBox[{"(", "1", ")"}]}], "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Mu]", " ", RowBox[{"(", "p", ")"}]}], "=", "\[Dash]1"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"\[Mu]", " ", FormBox[ RowBox[{"(", SuperscriptBox["p", "i"]}], TraditionalForm]}], ")"}], "=", " ", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "2"}], TraditionalForm]]], ", for any prime ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Mathematica has the standard function ", StyleBox["MoebiusMu", FontVariations->{"Underline"->True}], " to evaluate ", Cell[BoxData[ FormBox[ RowBox[{"\[Mu]", " ", RowBox[{"(", "n", ")"}]}], TraditionalForm]]], ". " }], "Text", CellChangeTimes->{{3.423475086624215*^9, 3.423475122186942*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "30"}], ";", " ", RowBox[{"MoebiusMu", "[", "n", "]"}]}]], "Input"], Cell[BoxData[ RowBox[{"-", "1"}]], "Output"], Cell["\<\ The M\[ODoubleDot]bius function is defined in this peculiar way to have the \ following property.\ \>", "Text"], Cell[TextData[{ StyleBox["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be a positive integer. Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], RowBox[{"\[Mu]", "(", "d", ")"}]}], " ", "=", " "}], TraditionalForm]]], Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ {"1", "if", RowBox[{ StyleBox[ RowBox[{"n", "=", "1"}], FontSlant->"Italic"], ","}]}, {"0", "if", RowBox[{ StyleBox["n", FontSlant->"Italic"], StyleBox[">", FontSlant->"Italic"], StyleBox[ RowBox[{ StyleBox["1", FontSlant->"Italic"], "."}]]}]} }]}]], TextJustification->1] }], "Theorem", CellTags->"LemAppA Sum Mu="], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": For ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "1"}], TraditionalForm]]], " the assertion is trivial. For ", Cell[BoxData[ FormBox[ RowBox[{"n", ">", "1"}], TraditionalForm]]], " we write as above ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SuperscriptBox[ SubscriptBox["p", "i"], SubscriptBox["e", "i"]]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["e", "i"], TraditionalForm], ">", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{"k", ">", "0"}], TraditionalForm]]], " and thus" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], TraditionalForm], " ", RowBox[{"\[Mu]", "(", "d", ")"}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", " ", "|", " ", RowBox[{ SubscriptBox[ SubsuperscriptBox["p", "1", "e"], "1"], RowBox[{ SubscriptBox[ SubsuperscriptBox["p", "2", "e"], "2"], ".", " ", ".", " ", ".", " ", SubscriptBox[ SubsuperscriptBox["p", "k", "e"], "k"]}]}]}]], TraditionalForm], " ", RowBox[{"\[Mu]", " ", RowBox[{"(", "d", ")"}]}]}], " ", "=", RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", " ", "|", " ", RowBox[{ SubscriptBox["p", "1"], RowBox[{ SubscriptBox["p", "2"], ".", " ", ".", " ", ".", " ", SubscriptBox["p", "k"]}]}]}]], TraditionalForm], " ", RowBox[{"\[Mu]", " ", RowBox[{"(", "d", ")"}]}]}], " ", "="}]}]}], TraditionalForm]]], "\n\n \t\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"1", "+", RowBox[{ FormBox[ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "1"}], "k"], TraditionalForm], RowBox[{ FormBox[ UnderscriptBox["\[Sum]", RowBox[{"1", "\[LessEqual]", SubscriptBox["i", "1"], "<", SubscriptBox["i", "2"], "<", " ", RowBox[{".", " ", ".", " ", "."}], " ", "<", " ", SubscriptBox["i", "l"], "\[LessEqual]", "k"}]], TraditionalForm], " ", RowBox[{"\[Mu]", " ", FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["p", SubscriptBox["i", "1"]], RowBox[{ SubscriptBox["p", SubscriptBox["i", "2"]], "\[CenterDot]", "\[CenterDot]", "\[CenterDot]", SubscriptBox["p", SubscriptBox["i", "l"]]}]}], ")"}], TraditionalForm]}]}]}]}]}], TraditionalForm]]], "\n \t\t\n \t\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{ FormBox[ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "1"}], "k"], TraditionalForm], RowBox[{ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"k"}, {"l"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm], " ", FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "l"], TraditionalForm]}]}], "=", RowBox[{"(", RowBox[{ RowBox[{"1", " ", "\[Dash]", " ", FormBox[ SuperscriptBox[ RowBox[{ RowBox[{"(", "1", ")"}], ")"}], RowBox[{"k", " "}]], TraditionalForm]}], "=", "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["The reader may want to check the above lemma by means of:", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"DivisorSum", "[", RowBox[{"f_", ",", "m_"}], "]"}], ":=", " ", RowBox[{"Plus", " ", "@@", " ", RowBox[{"(", RowBox[{"f", " ", "/@", " ", RowBox[{"Divisors", "[", "m", "]"}]}], ")"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "100"}], ";", RowBox[{"DivisorSum", "[", RowBox[{"MoebiusMu", ",", " ", "m"}], "]"}]}]], "Input"], Cell[BoxData["0"], "Output", CellChangeTimes->{{3.4233693190428333`*^9, 3.423369331276739*^9}}], Cell[TextData[{ StyleBox["Lemma A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be two positive integers such that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", ",", " ", RowBox[{"m", "|", "d", "|", "n"}]}]], RowBox[{"\[Mu]", "(", RowBox[{"n", "/", "d"}], ")"}]}], " ", "=", " "}], TraditionalForm]]], Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->DirectedInfinity[1]], GridBox[{ {"1", "if", RowBox[{ RowBox[{"m", StyleBox["=", FontSlant->"Italic"], StyleBox["n", FontSlant->"Italic"]}], ","}]}, {"0", "if", RowBox[{"otherwise", "."}]} }]}]], TextJustification->1] }], "Theorem", CellTags->"LemAppA Sum Moebius"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{ RowBox[{"n", "'"}], "m"}]}], TraditionalForm]]], ". For each ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"m", "|", "d", "|", "n"}], TraditionalForm]]], ", we write ", Cell[BoxData[ FormBox[ RowBox[{"d", "=", RowBox[{ RowBox[{"d", "'"}], "m"}]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", ",", " ", RowBox[{"m", "|", "d", "|", "n"}]}]], TraditionalForm], RowBox[{"\[Mu]", " ", RowBox[{"(", RowBox[{"n", "/", "d"}], ")"}]}]}], "=", RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{ RowBox[{"d", "'"}], " ", "|", " ", RowBox[{"n", "'"}]}]], TraditionalForm], RowBox[{"\[Mu]", " ", RowBox[{"(", RowBox[{ RowBox[{"n", "'"}], "/", RowBox[{"d", "'"}]}], ")"}]}]}]}], TraditionalForm]]], ", which by ", ButtonBox["Lemma A.36", BaseStyle->"Hyperlink", ButtonData:>"LemAppA Sum Mu="], " is 1 for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "'"}], "=", "1"}], TraditionalForm]]], ", (i.e. ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "n"}], TraditionalForm]]], "), and is 0 for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "'"}], ">", "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[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t\t", FontWeight->"Bold"], StyleBox["M\[ODoubleDot]bius Inversion Formula", FontColor->RGBColor[1, 0, 0]], "\nLet ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " be a function defined on \[DoubleStruckCapitalN] and let the function ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " on \[DoubleStruckCapitalN] be defined by\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"g", "(", "n", ")"}], "=", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], RowBox[{"f", "(", "d", ")"}]}]}], ","}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], ",\n\nThen, for all ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], " \n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "n", ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], RowBox[{ RowBox[{"\[Mu]", "(", "d", ")"}], RowBox[{"g", "(", RowBox[{"n", "/", "d"}], ")"}]}]}], "=", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], RowBox[{ RowBox[{"\[Mu]", "(", RowBox[{"n", "/", "d"}], ")"}], RowBox[{"g", "(", "d", ")"}]}]}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Moebius Inv"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": By the definition of ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "n", ")"}], TraditionalForm]]], " and ", ButtonBox["Lemma A.37", BaseStyle->"Hyperlink", ButtonData:>"LemAppA Sum Moebius"], "\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], " ", RowBox[{"\[Mu]", " ", RowBox[{"(", RowBox[{"n", "/", "d"}], ")"}], " ", RowBox[{"g", "(", "d", ")"}]}]}], " ", "=", " ", RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], TraditionalForm], " ", RowBox[{"\[Mu]", " ", RowBox[{"(", RowBox[{"n", "/", "d"}], ")"}], " ", RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"e", "|", "d"}]], TraditionalForm], " ", RowBox[{"f", "(", "e", ")"}]}]}]}], " ", "=", " ", RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"e", "|", "n"}]], TraditionalForm], " ", RowBox[{ RowBox[{"f", "(", "e", ")"}], " ", RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", ",", " ", RowBox[{"e", "|", "d", "|", "n"}]}]], TraditionalForm], " ", RowBox[{"\[Mu]", " ", RowBox[{"(", RowBox[{"n", "/", "d"}], ")"}]}]}]}]}], " ", "=", " ", RowBox[{ RowBox[{"f", "(", "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[{ StyleBox["Corollary A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\t", StyleBox["Multiplicative M\[ODoubleDot]bius Inversion Formula", FontColor->RGBColor[1, 0, 0]], "\nLet ", Cell[BoxData[ FormBox["F", TraditionalForm]]], " be a function defined on \[DoubleStruckCapitalN] and let the function ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " on \[DoubleStruckCapitalN] be defined by\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"g", "(", "n", ")"}], "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{"d", "|", "n"}]], RowBox[{"f", "(", "d", ")"}]}]}], ","}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], ",\n\nThen for all n in \[DoubleStruckCapitalN]\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "n", ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["\[Product]", RowBox[{"d", "|", "n"}]], RowBox[{ RowBox[{"\[Mu]", "(", "d", ")"}], RowBox[{"g", "(", RowBox[{"n", "/", "d"}], ")"}]}]}], "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{"d", "|", "n"}]], RowBox[{ RowBox[{"\[Mu]", "(", RowBox[{"n", "/", "d"}], ")"}], RowBox[{"g", "(", "d", ")"}]}]}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppA Mult Moebius"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Substitute ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"g", "(", "n", ")"}], "=", RowBox[{"log", " ", RowBox[{"(", RowBox[{"G", "(", "n", ")"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "n", ")"}], "=", RowBox[{"log", " ", RowBox[{"(", RowBox[{"F", "(", "n", ")"}], ")"}]}]}], TraditionalForm]]], " in the ", ButtonBox["M", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Moebius Inv"], ButtonBox["\[ODoubleDot]", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Moebius Inv"], ButtonBox["bius Inversion Formula", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Moebius Inv"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Example A.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nFrom ", ButtonBox["Theorem A.12", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Phi=n"], " we know that ", ButtonBox["Euler's Totient Function", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], StyleBox[" ", FontColor->RGBColor[0, 0.500008, 0]], "satisfies" }], "Example"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], TraditionalForm], " ", RowBox[{"\[Phi]", "(", "d", ")"}]}], " ", "=", " ", "n"}], TraditionalForm]]], ". " }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "It follows from the ", ButtonBox["M\[ODoubleDot]bius Inversion Formula", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Moebius Inv"], " (Thm. A.38) that for ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", RowBox[{ FormBox[ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], TraditionalForm], " ", FormBox[ SuperscriptBox[ RowBox[{"(", FormBox[ SubscriptBox["p", "i"], TraditionalForm], ")"}], SubscriptBox["e", "i"]], TraditionalForm]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["e", "i"], TraditionalForm], ">", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], "," }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "n", ")"}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], TraditionalForm], RowBox[{"\[Mu]", " ", RowBox[{"(", "d", ")"}], " ", FormBox[ FractionBox["n", "d"], TraditionalForm]}]}], "="}]}], TraditionalForm]]], "\t\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{ RowBox[{ FormBox[ FractionBox["n", "1"], TraditionalForm], " ", "\[Dash]", " ", FormBox[ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}]], TraditionalForm], FractionBox["n", SubscriptBox["p", "i"]]}], TraditionalForm]}], "+", RowBox[{ FormBox[ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"1", "\[LessEqual]", "i", "<", "j", "\[LessEqual]", "k"}]], TraditionalForm], FractionBox["n", RowBox[{ SubscriptBox["p", "i"], SubscriptBox["p", "j"]}]]}], TraditionalForm], " ", "\[Dash]", " ", "\[Ellipsis]"}], "+", " ", FormBox[ RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", "\[Dash]1", ")"}], "k"], TraditionalForm], FractionBox["n", RowBox[{ SubscriptBox["p", "1"], RowBox[{ SubscriptBox["p", "2"], "\[CenterDot]", "\[CenterDot]", "\[CenterDot]", SubscriptBox["p", "k"]}]}]]}], TraditionalForm]}], "="}]}], TraditionalForm]]], "\n\t\n\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"n", " ", FormBox[ RowBox[{"(", RowBox[{"1", "-", FractionBox["1", SubscriptBox["p", "i"]]}], ")"}], TraditionalForm], " ", RowBox[{ FormBox[ RowBox[{"(", RowBox[{"1", "-", FractionBox["1", SubscriptBox["p", "2"]]}], ")"}], TraditionalForm], "\[CenterDot]", "\[CenterDot]", "\[CenterDot]", RowBox[{ FormBox[ RowBox[{"(", RowBox[{"1", "-", FractionBox["1", SubscriptBox["p", "k"]]}], ")"}], TraditionalForm], "."}]}]}]}], TraditionalForm]]] }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "This proves ", ButtonBox["Theorem A.17", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler Phi Form"], " in a different way." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ ButtonBox["Theorem B.17", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Ip(m)="], " in Section B.3 will show a nice application of the ", ButtonBox["Multiplicative M\[ODoubleDot]bius Inversion Formula", BaseStyle->"Hyperlink", ButtonData:>"CorAppA Mult Moebius"], "." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Principle of Inclusion and Exclusion" }], "Subsection", CellTags->"SubsAppA Sylvester"], Cell[TextData[{ "We shall conclude this section with another useful principle. To develop \ some intuition, consider the integers in between 0 and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", ".", "q"}], "-", "1"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " are different primes. We want to evaluate ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["\[Phi]", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], RowBox[{"(", RowBox[{"p", ".", "q"}], ")"}]}], TraditionalForm]]], " directly, i.e. we want to count the number of integers ", Cell[BoxData[ FormBox[ RowBox[{" ", "i"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", RowBox[{"p", ".", "q"}]}], TraditionalForm]]], ", that are coprime with ", Cell[BoxData[ FormBox[ RowBox[{"p", ".", "q"}], TraditionalForm]]], ". Of course, this number is ", Cell[BoxData[ FormBox[ RowBox[{"p", " ", "q"}], TraditionalForm]]], " minus the number of integers", Cell[BoxData[ FormBox[ RowBox[{" ", "i"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", RowBox[{"p", ".", "q"}]}], TraditionalForm]]], ", that have a nontrivial factor in common with ", Cell[BoxData[ FormBox[ RowBox[{"p", ".", "q"}], TraditionalForm]]], ", i.e. that are divisible by ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " or ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". There are ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " multiples of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " in the range ", Cell[BoxData[ FormBox[ RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", RowBox[{ RowBox[{"p", ".", "q"}], "-", "1"}]}], TraditionalForm]]], " and similarly ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " multiples of ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". However, one of the multiples of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is also a multiple of ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ", namely 0 itself. We conclude that " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Phi]", "(", RowBox[{"p", ".", "q"}], ")"}], "=", RowBox[{ RowBox[{ RowBox[{ RowBox[{"p", ".", "q"}], " ", "\[Dash]", " ", "p", " ", "\[Dash]", " ", "q"}], "+", "1"}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], "=", RowBox[{ RowBox[{"p", ".", "q"}], " ", FormBox[ RowBox[{"(", RowBox[{"1", "-", FractionBox["1", "p"]}], ")"}], TraditionalForm], " ", FormBox[ RowBox[{"(", RowBox[{"1", "-", FractionBox["1", "q"]}], ")"}], TraditionalForm]}]}]}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "as it should be according to ", ButtonBox["Theorem A.17", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler Phi Form"], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\tThe Principle of Inclusion and Exclusion\nLet ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " be a finite set with ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " elements. Suppose that the elements in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " can satisfy certain properties ", Cell[BoxData[ FormBox[ RowBox[{"P", "(", "i", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ". \nLet ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ RowBox[{"N", "(", SubscriptBox["i", "1"]}], TraditionalForm], ",", FormBox[ SubscriptBox["i", "2"], TraditionalForm], ",", "\[Ellipsis]", " ", ",", FormBox[ SubscriptBox["i", "s"], TraditionalForm]}], ")"}], TraditionalForm]]], " be the number of elements in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " that satisfy properties ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{"P", "(", SubscriptBox["i", "1"]}], TraditionalForm], ")"}], ",", FormBox[ RowBox[{"P", "(", SubscriptBox["i", "2"]}], TraditionalForm]}], ")"}], ",", RowBox[{"\[Ellipsis]", " ", FormBox[ RowBox[{",", RowBox[{"P", "(", SubscriptBox["i", "s"]}]}], TraditionalForm]}]}], ")"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", FormBox[ SubscriptBox["i", "1"], TraditionalForm], "<", FormBox[ SubscriptBox["i", "2"], TraditionalForm], "<", RowBox[{"\[CenterDot]", "\[CenterDot]", "\[CenterDot]"}], "<", FormBox[ SubscriptBox["i", "s"], TraditionalForm], "\[LessEqual]", "k"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "s", "\[LessEqual]", "k"}], TraditionalForm]]], ", (and possibly also some of the other properties). \nLet ", Cell[BoxData[ FormBox[ RowBox[{"N", "(", "\[CapitalOSlash]", ")"}], TraditionalForm]]], " denote the number of elements in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " that satisfy none of the properties ", Cell[BoxData[ FormBox[ RowBox[{"P", "(", "i", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ".\nThen\n\t\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"N", "(", "\[CapitalOSlash]", ")"}], "=", RowBox[{"N", "-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}]], RowBox[{"N", "(", "i", ")"}]}], "+", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"1", "\[LessEqual]", "i", "<", "j", "\[LessEqual]", "k"}]], RowBox[{"N", "(", RowBox[{"i", ",", "j"}], ")"}]}], "-", "\[Ellipsis]", "+", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"-", "1"}], ")"}], "k"], RowBox[{"N", "(", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "k"}], ")"}]}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppA Incl-Excl"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": An element s in ", StyleBox["S", FontSlant->"Italic"], " that satisfies exactly r of the k properties is counted" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"1", " ", "\[Dash]", " ", FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"r"}, {"1"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]}], "+", RowBox[{ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"r"}, {"2"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm], " ", "\[Dash]", " ", "\[Ellipsis]"}], "+", " ", RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", "\[Dash]1", ")"}], "r"], TraditionalForm], " ", FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"r"}, {"r"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]}]}], "=", RowBox[{ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "\[Dash]1"}], ")"}], "r"], TraditionalForm], "=", RowBox[{ FormBox[ RowBox[{"{", GridBox[{ {"1"}, {"0"} }]}], TraditionalForm], " ", FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", "r"}], "=", "0"}], ","}]}, { RowBox[{ RowBox[{"if", " ", "r"}], "\[NotEqual]", "0."}]} }], TraditionalForm]}]}]}], " "}], TraditionalForm]]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\<\ times in the right hand side, just as in the left hand side. \ \>", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "We leave it as an exercise to the reader to prove ", ButtonBox["Theorem A.17", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler Phi Form"], " directly from the definition of the ", ButtonBox["Euler Totient Function", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], " and the above principle (Hint: Let ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", denote the prime numbers that divide ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", take ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", "n\[Dash]1"}], "}"}]}], TraditionalForm]]], ", and say that element ", Cell[BoxData[ FormBox[ RowBox[{"s", "\[Element]", "S"}], TraditionalForm]]], " has property ", Cell[BoxData[ FormBox[ RowBox[{"P", "(", "i", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", if ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " is divisible by ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], ".)" }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "A", ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectAppA Problems"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SuperscriptBox[ SubscriptBox["p", "i"], SubscriptBox["a", "i"]]}], TraditionalForm]]], " be the prime factorization of an integer n. How many different divisors \ does ", Cell[BoxData[ FormBox[ RowBox[{"n", " "}], TraditionalForm]]], "have? \nFor ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "1000"}], TraditionalForm]]], ", check your answer with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["DivisorSigma", BaseStyle->"Link", ButtonData->"paclet:ref/DivisorSigma"], Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{"k", ",", "n"}], "]"}], TraditionalForm]]], " which computes ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], TraditionalForm], SuperscriptBox["d", "k"]}], TraditionalForm]]], " (use ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "0"}], TraditionalForm]]], ")." }], "Problem"], Cell[TextData[{ StyleBox["Problem A.2", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\nCompute ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ ButtonBox["gcd", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], RowBox[{"(", RowBox[{"455", ",", "559"}], ")"}]}], " ", "=", " ", RowBox[{ RowBox[{"455", "u"}], " ", "+", " ", RowBox[{"599", "v"}]}]}], TraditionalForm]]], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nProve that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ ButtonBox["gcd", BaseStyle->"Hyperlink", ButtonData:>"DefAppA GCD"], RowBox[{"(", RowBox[{ RowBox[{ SuperscriptBox["a", "m"], "-", "1"}], ",", RowBox[{ SuperscriptBox["a", "n"], "-", "1"}]}], ")"}]}], "=", RowBox[{ SuperscriptBox["a", RowBox[{"gcd", "(", RowBox[{"m", ",", "n"}], ")"}]], "-", "1"}]}], TraditionalForm]]], " for every positive integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ". (Hint: reduce the pair ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"m", ",", "n"}], "}"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", " ", "\[GreaterEqual]", "n"}], ","}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"m", "-", "n"}], ",", "n"}], "}"}], TraditionalForm]]], " and then follow the simple version of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA Simple Euclid"], ")." }], "Problem", CellTags->"ProbAppA gcd a^m-1 a^n-1"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\na) Check that 563 is a prime number. \nb) Use ", ButtonBox["Euclid's algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], " to compute ", Cell[BoxData[ FormBox[ SuperscriptBox["11", RowBox[{"-", "1"}]], TraditionalForm]]], " (mod 563).\nc) Solve 11 ", Cell[BoxData[ FormBox[ RowBox[{"x", " "}], TraditionalForm]]], " \[Congruent] 85 (mod 563)." }], "Problem"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nFind the solutions of ", ButtonBox["33 x ", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA AX=B mod M"], ButtonBox["\[Congruent]", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA AX=B mod M"], ButtonBox[" 255 (mod 1689)", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA AX=B mod M"], ". Note that 1689 = 3\[Times]563 and use the results of Problem A.4." }], "Problem"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\na) Determine ", ButtonBox["\[Phi]", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler Phi Form"], "(100). Check the result with the ", StyleBox["EulerPhi", FontVariations->{"Underline"->True}], " function. \nb) Compute the two least significant digits of ", Cell[BoxData[ FormBox[ SuperscriptBox["2004", "2004"], TraditionalForm]]], " without using the computer." }], "Problem", CellChangeTimes->{{3.423455386280698*^9, 3.4234553919212866`*^9}}], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\nSolve the system of congruence relations (", ButtonBox["hint", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], ": use Theorem A.19):\n\t3 ", Cell[BoxData[ FormBox[ RowBox[{"x", " "}], TraditionalForm]]], " \[Congruent] 2 (mod 11), \t7 ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " \[Congruent] 9 (mod 13), \t4 ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " \[Congruent] 14 (mod 15)." }], "Problem"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\nDetermine the ", ButtonBox["Jacobi Symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], " (7531, 3465)." }], "Problem"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nUse the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " to solve ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]]], " \[Congruent] 56 (mod 143). (Hint: first reduce it to several systems of \ linear congruence relations).\nHow many different solutions are there modulo \ 143?" }], "Problem"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nDetermine the first five terms of the ", ButtonBox["continued fraction", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Cont Frac"], " of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], ", the largest zero of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", "2"], "=", RowBox[{"f", "+", "1"}]}], TraditionalForm]]], ". Determine also the first five ", ButtonBox["convergents", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Cont Frac Appr"], ".\nWhat do you conjecture about the other terms in the continued fraction \ of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], "? Prove this conjecture (hint: use ", ButtonBox["Algorithm A.29", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA CF"], " and the definition of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], ").\n" }], "Problem"], Cell[TextData[{ StyleBox["Problem A.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nProve ", ButtonBox["Theorem A.17", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler Phi Form"], " with the ", ButtonBox["Principle of Inclusion and Exclusion", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Incl-Excl"], " (Thm. A.40) and the definition of the Euler function ", ButtonBox["\[CurlyPhi]", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], Cell[BoxData[ FormBox[ RowBox[{"(", "n", ")"}], TraditionalForm]]], "." }], "Problem"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Appendix B\tFinite Fields", "Chapter", CellTags->"ChapGaloisTh"], Cell[TextData[StyleBox["Introductory Remarks", FontWeight->"Bold"]], "Text", PageWidth->PaperWidth, ShowSpecialCharacters->False, FontFamily->"Helvetica", FontSize->13, FontWeight->"Bold", FontColor->RGBColor[0.571389, 0.19675, 0.570504]], Cell[TextData[{ "Most readers will be familiar with the algebraic structure of the sets of \ rational, real, and complex numbers. These sets have all the properties with \ respect to addition and multiplication that one may want them to have. They \ are called ", StyleBox["fields.", FontSlant->"Italic"], " \nIn discrete mathematics, in particular in the context of cryptology and \ coding theory, fields of finite cardinality play a crucial role. In this \ chapter, an introduction will be given to the theory of finite fields.\nThe \ outline of this is as follows:\nIn ", ButtonBox["Section B.1", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Algebra"], ", we recapitulate the basic definitions and properties of abstract algebra \ and of linear algebra. In particular, we shall show that the set of integers \ modulo a prime number from a finite field. In ", ButtonBox["Section B.2", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Field Constr"], ", a general construction of finite fields will be given. In ", ButtonBox["Section B.3", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Numb Irr Pol"], " a formula is derived for the number of irreducible polynomials over a \ given finite field. This shows that finite fields exist whenever the size is \ a power of a prime. An analysis of the structure of finite fields will be \ given in ", ButtonBox["Section B.4", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Field Struct"], ". In particular, it will be shown that a finite field of size ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " exists if and only if ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is a prime power. Moreover, such a field is unique, its additive group has \ the structure of a vector space and its multiplicative group has a cyclic \ structure." }], "Text"], Cell[CellGroupData[{ Cell["B.1\tAlgebra", "Section", CellTags->"SecAppB Algebra"], Cell["\<\ Although we assume that the reader is already familiar with all notions \ discussed in this and the next subsection. we offer this summary as a service \ to the reader.\ \>", "Text"], Cell[CellGroupData[{ Cell[TextData[{ "B.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tAbstract Algebra" }], "Subsection", CellTags->"SubsAppB Abstract Algebra"], Cell[CellGroupData[{ Cell["Set operations", "Subsubsection", CellTags->"SubsubsAppB operation"], Cell[TextData[{ "Let S be a nonempty set. An ", StyleBox["operation", FontColor->RGBColor[0.996109, 0, 0]], " ", Cell[BoxData[ FormBox["*", TraditionalForm]]], " defined on ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " is a mapping from ", Cell[BoxData[ FormBox[ RowBox[{"S", "\[Times]", "S"}], TraditionalForm]]], " into ", StyleBox["S", FontSlant->"Italic"], ". The image of the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"s", ",", "t"}], ")"}], TraditionalForm]]], " under ", Cell[BoxData[ FormBox["*", TraditionalForm]]], " is denoted by ", Cell[BoxData[ FormBox[ RowBox[{"s", "*", "t"}], TraditionalForm]]], ". Examples of operations are the addition ", Cell[BoxData[ FormBox["+", TraditionalForm]]], " in ", StyleBox["\[DoubleStruckCapitalR]", FontSlant->"Italic"], " and the multiplication ", Cell[BoxData[ FormBox["\[Times]", TraditionalForm]]], " in ", StyleBox["\[DoubleStruckCapitalC]", FontSlant->"Italic"], ". The operation ", Cell[BoxData[ FormBox["*", TraditionalForm]]], " is called ", StyleBox["commutative", FontColor->RGBColor[0.996109, 0, 0]], " if for all ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " in ", StyleBox["S", FontSlant->"Italic"], ":" }], "Text", CellTags->"DefAppB operation"], Cell[TextData[{ "S.1\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"s", "*", "t"}], " ", "=", " ", RowBox[{"t", "*", "s"}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "DisplayFormula"], Cell["An element e in S that satisfies ", "Text"], Cell[TextData[{ "S.2\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"s", "*", "e"}], " ", "=", " ", RowBox[{"e", "*", "s"}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "will be called a ", StyleBox["unit-element", FontColor->RGBColor[0.996109, 0, 0]], " of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"S", ","}]}], "*)"}], TraditionalForm]]], ". \nIf ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"S", ","}]}], "*)"}], TraditionalForm]]], " has a unit-element, it will be unique. Indeed, suppose that ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"e", "'"}], TraditionalForm]]], " both satisfy S.1. Then, by using S.2 twice one gets" }], "Text", CellTags->"DefAppB unit element"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"e", " ", "=", " ", RowBox[{ RowBox[{"e", "*", RowBox[{"e", "'"}]}], " ", "=", " ", RowBox[{ RowBox[{"e", "'"}], "."}]}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ StyleBox["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nTake ", StyleBox["S", FontSlant->"Italic"], " as the set of integers \[DoubleStruckCapitalZ] and + (i.e. addition) as \ operation. This operation is commutative and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalZ]", ",", "+"}], ")"}], TraditionalForm]]], " has 0 as unit-element." }], "Example", CellTags->"ExamAppB Integers+"], Cell[TextData[{ StyleBox["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nLet ", StyleBox["S", FontSlant->"Italic"], " be the set of ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[Times]", "2"}], TraditionalForm]]], " real matrices with matrix multiplication as operation. This operation is \ not commutative, e.g." }], "Example", CellTags->"ExamAppB Matrices2x2"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"(", GridBox[{ {"1", "1"}, {"0", "1"} }], ")"}], ".", RowBox[{"(", GridBox[{ {"0", "1"}, {"1", "1"} }], ")"}]}], " ", "==", " ", RowBox[{ RowBox[{"(", GridBox[{ {"0", "1"}, {"1", "1"} }], ")"}], ".", RowBox[{"(", GridBox[{ {"1", "1"}, {"0", "1"} }], ")"}]}]}]], "Input"], Cell[BoxData["False"], "Output"] }, Open ]], Cell[TextData[{ "On the other hand, this set ", StyleBox["S", FontSlant->"Italic"], " does have a unit-element, namely ", Cell[BoxData[ FormBox[ RowBox[{"(", GridBox[{ {"1", "0"}, {"0", "1"} }], ")"}], TraditionalForm]]], ". Compute for instance:" }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"MatrixForm", "[", RowBox[{ RowBox[{"(", GridBox[{ {"a", "b"}, {"c", "d"} }], ")"}], ".", RowBox[{"(", GridBox[{ {"1", "0"}, {"0", "1"} }], ")"}]}], "]"}]], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"a", "b"}, {"c", "d"} }], ")"}], MatrixForm[#]& ]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Group", "Subsubsection", CellTags->"SubsubsAppB group"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nLet ", StyleBox["G ", FontSlant->"Italic"], "be a non-empty set and ", Cell[BoxData[ FormBox["*", TraditionalForm]]], " an operation defined on ", StyleBox["G", FontSlant->"Italic"], ". Then, the pair ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"G", ","}]}], "*)"}], TraditionalForm]]], " is called a ", StyleBox["group", FontColor->RGBColor[0.996109, 0, 0]], ", if\nG1:\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"g", "*", "h"}], ")"}], "*", "k"}], "=", RowBox[{"g", "*", RowBox[{"(", RowBox[{"h", "*", "k"}], ")"}]}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"g", ",", " ", "h", ",", " ", RowBox[{"k", " ", "\[Element]", "G"}]}], TraditionalForm]]], " \t", StyleBox["(associativity)", FontColor->RGBColor[0.996109, 0, 0]], ",\nG2:\t", StyleBox["G", FontSlant->"Italic"], " contains a unit element, say ", Cell[BoxData[ FormBox["e", TraditionalForm]]], ",\nG3:\tfor each ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " in ", StyleBox["G", FontSlant->"Italic"], " an element ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " in ", StyleBox["G", FontSlant->"Italic"], " exists such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"g", "*", "h"}], "=", RowBox[{ RowBox[{"h", "*", "g"}], "=", "e"}]}], TraditionalForm]]], ". \n\tThis element is called the ", StyleBox["inverse", FontColor->RGBColor[0.996109, 0, 0]], " of ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " and often denoted by ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", RowBox[{"-", "1"}]], "."}], TraditionalForm]]], " " }], "Definition", CellTags->"DefAppB Group"], Cell[TextData[{ "Property G1 tells us that there is no need to write brackets in strings \ like ", Cell[BoxData[ FormBox[ RowBox[{"g", "*", "h", "*", "k"}], TraditionalForm]]], ". The element ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " in Property G3 is unique. Indeed, if ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"h", "'"}], TraditionalForm]]], " both satisfy G3, then ", Cell[BoxData[ FormBox[ RowBox[{"h", "=", RowBox[{ RowBox[{"h", "*", "e"}], "=", RowBox[{ RowBox[{"h", "*", RowBox[{"(", RowBox[{"g", "*", RowBox[{"h", "'"}]}], ")"}]}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"h", "*", "g"}], ")"}], "*", RowBox[{"h", "'"}]}], "=", RowBox[{ RowBox[{"e", "*", RowBox[{"h", "'"}]}], "=", RowBox[{ RowBox[{"h", "'"}], "."}]}]}]}]}]}], TraditionalForm]]], " In the same way one can show that for each ", Cell[BoxData[ FormBox[ RowBox[{"a", ",", RowBox[{"b", "\[Element]", "G"}]}], TraditionalForm]]], " the equations " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", ".", "x"}], "=", "b"}], TraditionalForm]]], " \tand \t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", ".", "a"}], "=", "b"}], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "have a unique solution in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ", namely " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"x", "=", RowBox[{ SuperscriptBox["a", RowBox[{"-", "1"}]], "b"}]}], TraditionalForm]]], ",\tresp.\t", Cell[BoxData[ FormBox[ RowBox[{"x", "=", RowBox[{"b", ".", SuperscriptBox["a", RowBox[{"-", "1"}]]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "The reader easily checks that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalZ]", ",", "+"}], ")"}], TraditionalForm]]], " in ", ButtonBox["Example B.1", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB Integers+"], " shows a commutative group. Other well-known examples of commutative groups \ are: ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalQ]", ",", "+"}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"\[DoubleStruckCapitalQ]", "\\", RowBox[{"{", "0", "}"}]}], ",", "\[CenterDot]"}], ")"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalR]", ",", "+"}], ")"}], TraditionalForm]]], ".\n", ButtonBox["Example B.2", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB Matrices2x2"], " does not yield a group because not all matrices have an inverse (e.g. the \ all-zero matrix)." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"G", ","}]}], "*)"}], TraditionalForm]]], " be a group and ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " a subset of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " with the property that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"H", ","}]}], "*)"}], TraditionalForm]]], " is also a group, then ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " will be called a ", StyleBox["subgroup", FontColor->RGBColor[0.996109, 0, 0]], StyleBox[" ", FontColor->RGBColor[0, 0, 0.996109]], "of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ". It can be shown (see ", ButtonBox["Problem B.3", BaseStyle->"Hyperlink", ButtonData:>"ProbAppB 3"], ") that ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " is a subgroup of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " if and only if" }], "Text", CellTags->"DefAppB subgroup"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["h", "1"], SubsuperscriptBox["h", "2", RowBox[{"-", "1"}]]}], "\[Element]", "H"}], TraditionalForm]]], ", \tfor every ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["h", "1"], ",", RowBox[{ SubscriptBox["h", "2"], "\[Element]", "H"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Element]", RowBox[{"\[DoubleStruckCapitalZ]", "/", RowBox[{"{", "0", "}"}]}]}], TraditionalForm]]], " and define ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", " ", "\[DoubleStruckCapitalZ]"}], "=", RowBox[{"{", RowBox[{ RowBox[{"m", " ", "k"}], " ", "|", " ", RowBox[{"k", "\[Element]", "\[DoubleStruckCapitalZ]"}]}], "}"}]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"m", " ", "\[DoubleStruckCapitalZ]"}], ",", "+"}], ")"}], TraditionalForm]]], " is a commutative subgroup of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalZ]", ",", "+"}], ")"}], TraditionalForm]]], ", as one can easily check." }], "Text"], Cell[TextData[{ StyleBox["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Element]", RowBox[{"\[DoubleStruckCapitalZ]", "/", RowBox[{"{", "0", "}"}]}]}], TraditionalForm]]], " and define ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], " as the ", ButtonBox["reduced residue system", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Reduced RS"], " \n\t", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm], "=", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"0", "\[LessEqual]", "i", "<", "m"}], " ", "|", " ", RowBox[{"gcd", "(", RowBox[{"i", ",", "m"}], ")"}]}], "=", "1"}], "}"}]}], TraditionalForm]]], ". \nThe cardinality of set ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{"\[CurlyPhi]", "(", "m", ")"}], TraditionalForm]]], " by ", ButtonBox["Definition A.6", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], ".\nIt follows from ", ButtonBox["Lemma A.13", BaseStyle->"Hyperlink", ButtonData:>"LemAppA AR_i also Red"], " that the product of two elements in ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], " can again be represented by an element in ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], ". Clearly, 1 is en element of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], " which is the unit element under this multiplication. That each element in \ ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], " has a multiplicative inverse follows from ", ButtonBox["Theorem A.18", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA AX=B mod M"], " (note that with ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Element]", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"]}], TraditionalForm]]], " one has that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], " and thus the equivalence relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "x"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " has a unique solution).\nWe conclude that the ", StyleBox["multiplicative group", FontColor->RGBColor[0.996109, 0, 0]], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm], ",", "\[Times]"}], ")"}], TraditionalForm]]], " is a commutative group of cardinality ", Cell[BoxData[ FormBox[ RowBox[{"\[CurlyPhi]", "(", "m", ")"}], TraditionalForm]]], "." }], "Example", CellTags->"ExamAppB MultiGroup"], Cell[TextData[{ ButtonBox["Commutative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB operation"], " groups are also called ", StyleBox["Abelian", FontColor->RGBColor[1, 0, 0]], " groups. Quite often, Abelian groups are represented in an additive way: \ the operation is denoted by a plus sign and the unit-element is called the ", StyleBox["zero element", FontColor->RGBColor[1, 0, 0]], " (denoted with a zero). An abelian group in this notation is called an ", StyleBox["additive group", FontColor->RGBColor[1, 0, 0]], ". \nThe most commonly used additive group in this introduction will be ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "m"], ",", "0"}], ")"}], TraditionalForm]]], ", but in Chapter 10, we shall see another example (see ", ButtonBox["Theorem 10.2", BaseStyle->"Hyperlink", ButtonData:>"TheoEllip Additive Group"], ")." }], "Text", GeneratedCell->True, CellTags->"DefAppB additive group"], Cell[TextData[{ "We shall now consider the more interesting situation that two operations \ are defined on a set. The first will be denoted by ", Cell[BoxData[ FormBox[ RowBox[{"g", "+", "h"}], TraditionalForm]]], ", the second by ", Cell[BoxData[ FormBox[ RowBox[{"g", "\[CenterDot]", "h"}], TraditionalForm]]], "." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Ring", "Subsubsection", CellTags->"SubsubsAppB ring"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nThe triple ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is called a ", StyleBox["ring", FontColor->RGBColor[0.996109, 0, 0]], ", if\nR1:\t(", StyleBox["R", FontSlant->"Italic"], ", +) is a commutative ", ButtonBox["group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], ".\n\tIts unit-element will be denoted by 0.\nR2:\tThe operation \ \[CenterDot] is ", ButtonBox["associative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], ".\nR3:\t", StyleBox["Distributivity", FontColor->RGBColor[0.996109, 0, 0]], " holds, i.e. for all ", Cell[BoxData[ FormBox[ RowBox[{"r", ",", " ", "s", ",", " ", RowBox[{"t", "\[Element]", "R"}]}], TraditionalForm]]], "\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"r", "\[CenterDot]", RowBox[{"(", RowBox[{"s", "+", "t"}], ")"}]}], "=", RowBox[{ RowBox[{"r", "\[CenterDot]", "s"}], "+", RowBox[{"r", "\[CenterDot]", "t"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"r", "+", "s"}], ")"}], "\[CenterDot]", "t"}], "=", RowBox[{ RowBox[{"r", "\[CenterDot]", "t"}], "+", RowBox[{"s", "\[CenterDot]", "t"}]}]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppB Ring"], Cell[TextData[{ "From now on we shall often simply write ", Cell[BoxData[ FormBox[ RowBox[{"g", " ", "h"}], TraditionalForm]]], " instead of ", Cell[BoxData[ FormBox[ RowBox[{"g", "\[CenterDot]", "h"}], TraditionalForm]]], ". The (additive) inverse of an element ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " in the group ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", "+"}], ")"}], TraditionalForm]]], " will simply be denoted by ", Cell[BoxData[ FormBox[ RowBox[{"-", "g"}], TraditionalForm]]], ", just as we write ", Cell[BoxData[ FormBox[ RowBox[{"2", "g"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"g", "+", "g"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"3", "g"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"g", "+", "g", "+", "g"}], TraditionalForm]]], ", etc. Note that 0 really behaves like a zero-element, because for every \ ", Cell[BoxData[ FormBox[ RowBox[{"r", "\[Element]", "R"}], TraditionalForm]]], " one has that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"0", "r"}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"r", "-", "r"}], ")"}], "r"}], "=", RowBox[{ RowBox[{ SuperscriptBox["r", "2"], "-", SuperscriptBox["r", "2"]}], "=", "0"}]}]}], TraditionalForm]]], " and similarly that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"r", " ", "0"}], "=", "0"}], TraditionalForm]]], ".\nSuppose that the operation \[CenterDot] is commutative on ", Cell[BoxData[ FormBox[ RowBox[{"R", "\\", RowBox[{"{", "0", "}"}]}], TraditionalForm]]], ". Then the ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is called commutative. Examples of commutative rings are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalR]", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], ","}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalQ]", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalZ]", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", but also ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"m", " ", "\[DoubleStruckCapitalZ]"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", when ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[NotEqual]", "0"}], TraditionalForm]]], ".\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be a ring and ", StyleBox["S", FontSlant->"Italic"], " a subset of ", StyleBox["R", FontSlant->"Italic"], " with the property that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"S", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is itself a ring, then ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " will be called a ", StyleBox["subring", FontColor->RGBColor[0.996109, 0, 0]], StyleBox[" ", FontColor->RGBColor[0, 0, 0.996109]], "of ", Cell[BoxData[ FormBox["R", TraditionalForm]]], ". Note that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"6", "\[DoubleStruckCapitalZ]"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a subring of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"2", "\[DoubleStruckCapitalZ]"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", which in turn is a subring of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalZ]", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], "." }], "Text", CellTags->"DefAppB subring"] }, Closed]], Cell[CellGroupData[{ Cell["Ideal", "Subsubsection", CellTags->"SubsubsAppB ideal"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA subring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"S", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " of a ", ButtonBox["ring", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ring"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is called an ", StyleBox["ideal", FontColor->RGBColor[0.996109, 0, 0]], StyleBox[" ", FontColor->RGBColor[0, 0, 0.996109]], "if \nI:\tfor all ", Cell[BoxData[ FormBox[ RowBox[{"r", "\[Element]", "R"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"s", "\[Element]", "S"}], TraditionalForm]]], " [", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"r", " ", "s"}], "\[Element]", "S"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"s", " ", "r"}], "\[Element]", "S"}], TraditionalForm]]], "]." }], "Definition", CellTags->"DefAppB Ideal"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Element]", RowBox[{"\[DoubleStruckCapitalZ]", "\\", RowBox[{"{", "0", "}"}]}]}], TraditionalForm]]], ". It is easy to check that any integer multiple of an ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "-tuple, is also an ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "-tuple. It follows that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"m", " ", "\[DoubleStruckCapitalZ]"}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is an ideal in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalZ]", ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "Now suppose that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " has a unit-element, say ", Cell[BoxData[ FormBox["e", TraditionalForm]]], ", then some elements in ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " may have an inverse in ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " i.e. an element ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "b"}], "=", RowBox[{ RowBox[{"b", " ", "a"}], "=", "e"}]}], TraditionalForm]]], ". This inverse, which is again unique, is called the ", StyleBox["multiplicative inverse", FontColor->RGBColor[0.996109, 0, 0]], " of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and will be denoted by ", Cell[BoxData[ FormBox[ SuperscriptBox["a", RowBox[{"-", "1"}]], TraditionalForm]]], ". Clearly, the element 0 will not have a multiplicative inverse. Indeed, \ suppose that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"r", " ", "0"}], "=", "e"}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox[ RowBox[{"r", "\[Element]", RowBox[{"R", "."}]}], TraditionalForm]]], " Then for each ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Element]", "R"}], TraditionalForm]]], " one has that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "=", RowBox[{ RowBox[{"a", " ", "e"}], "=", RowBox[{ RowBox[{"a", "(", RowBox[{"r", " ", "0"}], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"a", " ", "r"}], ")"}], "0"}], "=", "0"}]}]}]}], ","}], TraditionalForm]]], " i.e. ", Cell[BoxData[ FormBox[ RowBox[{"R", "=", "0"}], TraditionalForm]]], ". \nIt follows from the above that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"R", ",", "\[CenterDot]"}], " ", ")"}], ","}], TraditionalForm]]], " when ", Cell[BoxData[ FormBox[ RowBox[{"R", "\[NotEqual]", RowBox[{"{", "0", "}"}]}], TraditionalForm]]], ", can not be a group. However, ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"R", "\\", RowBox[{"{", "0", "}"}]}], ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " may very well have the structure of a group." }], "Text", CellTags->"DefAppB mult inverse"] }, Closed]], Cell[CellGroupData[{ Cell["Field", "Subsubsection", CellTags->"SubsubsAppB field"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA triple ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"F", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is called a ", StyleBox["field", FontColor->RGBColor[0.996109, 0, 0]], ", if\nF1: \t", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"F", ",", "+"}], ")"}], TraditionalForm]]], " is a commutative group. Its unit-element is denoted by 0. \nF2: \t", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"F", ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " is a group. The multiplicative unit-element is denoted by ", Cell[BoxData[ FormBox[ RowBox[{"e", "."}], TraditionalForm]]], "\nF3:\t", ButtonBox["Distributivity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ring"], " holds." }], "Definition", CellTags->"DefAppB field"], Cell[TextData[{ "Unlike some rings, a field can not have so-called ", StyleBox["zero-divisors", FontColor->RGBColor[0.996109, 0, 0]], ", i.e. elements ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"g", ","}], TraditionalForm]]], " both unequal to 0, whose product ", Cell[BoxData[ FormBox[ RowBox[{"f", " ", "g"}], TraditionalForm]]], " is equal to 0. Indeed, suppose that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", " ", "g"}], "=", "0"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"f", "\[NotEqual]", "0."}], TraditionalForm]]], " Then, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"g", "=", RowBox[{ RowBox[{"e", " ", "g"}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["f", RowBox[{"-", "1"}]], "f"}], ")"}], "g"}], "=", RowBox[{ RowBox[{ SuperscriptBox["f", RowBox[{"-", "1"}]], "(", RowBox[{"f", " ", "g"}], ")"}], "=", RowBox[{ RowBox[{ SuperscriptBox["f", RowBox[{"-", "1"}]], "0"}], "=", "0"}]}]}]}]}], ","}], TraditionalForm]]], " so every element in ", Cell[BoxData[ FormBox["F", TraditionalForm]]], " is zero." }], "Text", CellTags->"DefAppB zero div"], Cell[TextData[{ "If a subring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"K", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " of a field ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"F", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " has the structure of a field, we shall call it a ", StyleBox["subfield", FontColor->RGBColor[0.996109, 0, 0]], StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], "of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"F", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], "."}], TraditionalForm]]] }], "Text", CellTags->"DefAppB subfield"], Cell[TextData[{ "Examples of fields are the rationals ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalQ]", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", the reals ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalR]", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", and the complex numbers ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalC]", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", each one being a subfield of the next one. " }], "Text"], Cell[TextData[{ "We speak of a ", StyleBox["finite", FontColor->RGBColor[0.996109, 0, 0]], " group ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"G", ",", "*"}], " ", ")"}], TraditionalForm]]], ", ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", or field ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"F", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " of ", StyleBox["order", FontColor->RGBColor[0.996109, 0, 0]], " ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", if ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ RowBox[{"R", ","}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["F", TraditionalForm]]], " are finite sets of cardinality ", Cell[BoxData[ FormBox[ RowBox[{"n", "."}], TraditionalForm]]], " For finite fields it is customary to denote the cardinality by ", Cell[BoxData[ FormBox[ RowBox[{"q", "."}], TraditionalForm]]], " " }], "Text", CellTags->"DefAppB finite"], Cell[TextData[{ "In this chapter, we shall study the structure of finite fields. It will \ turn out that finite fields of order ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " only exist when ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is a prime power. Moreover, these finite fields are essentially unique for \ a fixed prime power ", Cell[BoxData[ FormBox[ RowBox[{"q", "."}], TraditionalForm]]], " This justifies the widely accepted notation ", Cell[BoxData[ FormBox[ StyleBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.996109, 0, 0]], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{ StyleBox["G", FontSlant->"Plain"], StyleBox["F", FontSlant->"Italic"]}], StyleBox["(", FontSlant->"Italic"], StyleBox["q", FontSlant->"Italic"], StyleBox[")", FontSlant->"Italic"]}], FontFamily->"Times", FontSize->12, FontWeight->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.996109, 0, 0]], TraditionalForm]]], " (where GF stands for ", StyleBox["Galois Field", FontColor->RGBColor[0.996109, 0, 0]], " after the Frenchman ", ButtonBox["Galois", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Evariste Galois"], ") for a finite field of order ", Cell[BoxData[ FormBox[ RowBox[{"q", "."}], TraditionalForm]]], " Examples of finite fields will follow in ", ButtonBox["Section B.2", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Field Constr"], "." }], "Text", CellTags->"DefAppB GF"], Cell[TextData[{ "Analogously to commutative rings, we define a commutative field ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"F", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " to be a field, for which ", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{"(", RowBox[{"F", "\\", RowBox[{"{", RowBox[{ RowBox[{"0", "|"}], ",", RowBox[{"\[CenterDot]", " "}]}]}]}]}], TraditionalForm], ")"}]]], " is commutative. The following theorem will not be proved, but is very \ important [", ButtonBox["Cohn77", BaseStyle->"Hyperlink", ButtonData:>"RefCohn77"], ", p. 196]." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\t", ButtonBox["Wedderburn", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Joseph Henry Maclagen Wedderburn"], "\nEvery finite field is commutative." }], "Theorem", CellTags->"TheoAppB Wedderburn"] }, Closed]], Cell[CellGroupData[{ Cell["Equivalence Relations", "Subsubsection", CellTags->"SubsubsAppB equiv rel"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " be a set. Corresponding to any subset ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"UxU", ","}], TraditionalForm]]], " one can define a", StyleBox[" ", FontColor->RGBColor[0, 0, 0.996109]], StyleBox["relation \[Tilde]", FontColor->RGBColor[0.996109, 0, 0]], " on ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " by \n\t\tfor all ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", RowBox[{"v", "\[Element]", RowBox[{ RowBox[{"U", " ", "[", " ", RowBox[{ RowBox[{"u", "\[Tilde]", RowBox[{"v", " ", "\[DoubleLongLeftRightArrow]", " ", RowBox[{"(", RowBox[{"u", ",", "v"}], ")"}]}]}], "\[Element]", "P"}], " ", "]"}], "."}], " "}]}], TraditionalForm]]], " \nAn ", StyleBox["equivalence relation", FontColor->RGBColor[0.996109, 0, 0]], " is a relation with the additional properties:\nE1: \tfor all ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", RowBox[{"U", " ", "[", " ", RowBox[{"u", "\[Tilde]", "u"}], " ", "]"}], " "}], TraditionalForm]]], " ", StyleBox["(reflexivity),", FontColor->RGBColor[0.996109, 0, 0]], " \nE2:\tfor all ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", RowBox[{"v", "\[Element]", RowBox[{"U", " ", "[", " ", RowBox[{"u", "\[Tilde]", RowBox[{"v", " ", "\[DoubleLongRightArrow]", " ", "v"}], "\[Tilde]", "u"}], " ", "]"}], " "}]}], TraditionalForm]]], " ", StyleBox["(symmetry),", FontColor->RGBColor[0.996109, 0, 0]], "\nE3: \tfor all ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", "v", ",", RowBox[{"w", "\[Element]", RowBox[{"U", " ", "[", " ", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"u", "\[Tilde]", "v"}], " ", "\[And]", " ", RowBox[{"v", "\[Tilde]", "w"}]}], ")"}], " ", "\[DoubleLongRightArrow]", " ", "u"}], "\[Tilde]", "w"}], " ", "]"}], " "}]}], TraditionalForm]]], " ", StyleBox["(transitivity)", FontColor->RGBColor[0.996109, 0, 0]], StyleBox[".", FontColor->RGBColor[0, 0, 0.996109]] }], "Definition", CellTags->"DefAppB Equiv Rel"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " be the set of straight lines in the (Euclidean) plane. Then \"being \ parallel or equal\" defines an equivalence relation. " }], "Text"], Cell[TextData[{ "In Section A.3 we have seen another ", ButtonBox["example", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Congr Rel"], ". There ", Cell[BoxData[ FormBox[ RowBox[{"U", "=", "\[DoubleStruckCapitalZ]"}], TraditionalForm]]], " and for a fixed ", Cell[BoxData[ FormBox[ RowBox[{"m", ",", " ", RowBox[{"m", "\[NotEqual]", "0"}], ",", " "}], TraditionalForm]]], "the relation ", Cell[BoxData[ FormBox["\[Congruent]", TraditionalForm]]], " was defined by ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"a", "-", RowBox[{"b", "."}]}], TraditionalForm]]] }], "Text"], Cell[TextData[{ "Let \[Tilde] be an equivalence relation defined on a set ", Cell[BoxData[ FormBox[ RowBox[{"U", "."}], TraditionalForm]]], " A non-empty subset ", Cell[BoxData[ FormBox["W", TraditionalForm]]], "of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " is called an ", StyleBox["equivalence class", FontColor->RGBColor[0.996109, 0, 0]], ", if" }], "Text", CellTags->"DefAppB equiv class"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{ RowBox[{ RowBox[{"E1", ")"}], "\t", FormBox[ RowBox[{ RowBox[{ SubscriptBox[ StyleBox["\[ForAll]", FontSize->16], RowBox[{"v", ",", RowBox[{"w", "\[Element]", "W"}]}]], RowBox[{"[", " ", RowBox[{"v", "\[Tilde]", "w"}], " ", "]"}]}], ","}], TraditionalForm]}], "\n", "E2"}], ")"}], "\t", RowBox[{ SubscriptBox[ StyleBox["\[ForAll]", FontSize->16], RowBox[{"w", "\[Element]", "W"}]], RowBox[{ SubscriptBox["\[ForAll]", RowBox[{"u", "\[Element]", RowBox[{"U", "\\", "W"}]}]], RowBox[{ RowBox[{"[", " ", RowBox[{"\[Not]", RowBox[{"(", RowBox[{"u", "\[Tilde]", "w"}], ")"}]}], "]"}], "."}]}]}]}]], "DisplayFormula"], Cell[TextData[{ "It follows from the properties above, that an equivalence class consists of \ all elements in ", Cell[BoxData[ FormBox[ RowBox[{"U", ","}], TraditionalForm]]], " that are in relation \[Tilde] with a fixed element in ", Cell[BoxData[ FormBox[ RowBox[{"U", "."}], TraditionalForm]]], " Clearly, the various equivalence classes of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " form a partition of ", Cell[BoxData[ FormBox[ RowBox[{"U", "."}], TraditionalForm]]], " The equivalence class containing a particular element ", Cell[BoxData[ FormBox[ RowBox[{"w", ","}], TraditionalForm]]], " will be denoted by ", Cell[BoxData[ FormBox[ RowBox[{"<", "w", ">"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be a commutative ", ButtonBox["ring", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ring"], " with (multiplicative) unit-element ", Cell[BoxData[ FormBox["e", TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"S", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be an ideal in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ". We define a relation ", Cell[BoxData[ FormBox["\[Congruent]", TraditionalForm]]], " on ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " by" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"a", "\[Congruent]", RowBox[{"b", " ", RowBox[{"(", RowBox[{"mod", " ", "S"}], ")"}]}]}], TraditionalForm]]], "\t\[DoubleLongLeftRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"a", "-", "b"}], "\[Element]", "S"}], ")"}], TraditionalForm]]] }], "NumberedEquationAppendix", GeneratedCell->True], Cell[TextData[{ "The reader can easily verify that (B.1) defines an equivalence relation. \ Let ", Cell[BoxData[ FormBox[ RowBox[{"R", "/", "S"}], TraditionalForm]]], " (read: ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ") denote the set of equivalence classes. On ", Cell[BoxData[ FormBox[ RowBox[{"R", "/", "S"}], TraditionalForm]]], " we define two operations by:" }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"<", "a", ">", " ", RowBox[{"+", " ", RowBox[{"<", "b", ">"}]}]}], " ", ":=", " ", RowBox[{ RowBox[{"<", RowBox[{"a", " ", "+", " ", "b"}]}], ">"}]}], " ", ",", " ", "a", ",", RowBox[{"b", "\[Element]", "R"}], ","}]], "DisplayFormula"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"<", "a", ">", RowBox[{"\[CenterDot]", RowBox[{"<", "b", ">"}]}]}], ":=", " ", RowBox[{ RowBox[{"<", RowBox[{"a", " ", "b"}]}], ">"}]}], " ", ",", " ", "a", ",", RowBox[{"b", "\[Element]", RowBox[{"R", "."}]}]}]], "DisplayFormula"], Cell[TextData[{ "It is easy to verify that these definitions are independent of the \ particular choice of the elements ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " in the equivalence class ", Cell[BoxData[ FormBox[ RowBox[{"<", "a", ">"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"<", "b", ">", "."}], TraditionalForm]]], " We leave it as an exercise to the reader to prove the following theorem." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\t\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be a commutative ring and let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"S", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be an ideal in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ". With the above definitions ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"R", "/", "S"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a commutative ring with unit-element. " }], "Theorem", CellTags->"TheoAppB Res Class"], Cell[TextData[{ "The ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"R", "/", "S"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is called a ", StyleBox["residue class ring", FontColor->RGBColor[0.996109, 0, 0]], StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], "of ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox[ RowBox[{"S", "."}], TraditionalForm]]], " In the next section we will see applications of Theorem B.2." }], "Text", CellTags->"DefAppB Res Class Ring"] }, Closed]], Cell[CellGroupData[{ Cell["Cyclic Groups", "Subsubsection", CellTags->"SubsubsAppB cyclic group"], Cell[TextData[{ "Before we conclude this section, there is one more topic that needs to be \ discussed. Let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"G", ","}], " ", ")"}], TraditionalForm]]], " be a finite ", ButtonBox["group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], " and let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " be an element in ", Cell[BoxData[ FormBox[ RowBox[{"G", "\\", RowBox[{ RowBox[{"{", "e", "}"}], "."}]}], TraditionalForm]]], " Let ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "2"], ",", SuperscriptBox["a", "3"], ",", "\[Ellipsis]", ",", " "}], TraditionalForm]]], " denote ", Cell[BoxData[ FormBox[ RowBox[{"a", " ", "a"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"a", " ", "a", " ", "a"}], TraditionalForm]]], ", etc. Consider the sequence of elements ", Cell[BoxData[ FormBox[ RowBox[{"e", ",", "a", ",", SuperscriptBox["a", "2"], ",", "\[Ellipsis]", ","}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " is finite, there exists a unique integer ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " such that the elements ", Cell[BoxData[ FormBox[ RowBox[{"e", ",", "a", ",", SuperscriptBox["a", "2"], ",", "\[Ellipsis]", " ", ",", " ", SuperscriptBox["a", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], " are all different, while ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "n"], "=", " ", SuperscriptBox["a", "j"]}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox[ RowBox[{"j", ",", " ", RowBox[{"0", "\[LessEqual]", "j", "<", "n"}]}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["a", RowBox[{"n", "+", "1"}]], "=", SuperscriptBox["a", RowBox[{"j", "+", "1"}]]}], ","}], TraditionalForm]]], " etc.. We shall now show that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"j", "=", "0"}], ","}], TraditionalForm]]], " i.e. that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "n"], "=", RowBox[{"e", "."}]}], TraditionalForm]]], " Suppose that ", Cell[BoxData[ FormBox[ RowBox[{"j", ">", "0"}], TraditionalForm]]], ". Then it would follow from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "n"], "=", SuperscriptBox["a", "j"]}], TraditionalForm]]], " that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{"n", "-", "1"}]], "=", SuperscriptBox["a", RowBox[{"j", "-", "1"}]]}], TraditionalForm]]], ". However, this contradicts our definition of ", Cell[BoxData[ FormBox[ RowBox[{"n", "."}], TraditionalForm]]], " We conclude that the ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " elements ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "i"], ",", " ", RowBox[{"0", "\[LessEqual]", "i", "<", "n"}], ","}], TraditionalForm]]], " are all distinct and that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "n"], "=", RowBox[{"e", "."}]}], TraditionalForm]]] }], "Text"], Cell[TextData[{ "It is now clear that the elements ", Cell[BoxData[ FormBox[ RowBox[{"e", ",", "a", ",", SuperscriptBox["a", "2"], ",", "\[Ellipsis]", " ", ",", " ", SuperscriptBox["a", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], " form a subgroup ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"G", "."}], TraditionalForm]]], " Such a (sub)group ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " is called a ", StyleBox["cyclic", FontColor->RGBColor[0.996109, 0, 0]], " subgroup of order ", Cell[BoxData[ FormBox[ RowBox[{"n", "."}], TraditionalForm]]], " We say that the element ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " ", StyleBox["generates", FontColor->RGBColor[0.996109, 0, 0]], " ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " and that ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " has ", StyleBox["(multiplicative) order", FontColor->RGBColor[0.996109, 0, 0]], " ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". \nSince all elements in a cyclic group are a power of the same element, \ it follows that a cyclic group is ", ButtonBox["commutative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB operation"], ". " }], "Text", CellTags->"DefAppB Cyclic Group"], Cell[TextData[{ StyleBox["Lemma B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\t\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"G", ","}], " ", ")"}], TraditionalForm]]], " be a group and ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " an element in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of order ", Cell[BoxData[ FormBox[ RowBox[{"n", "."}], TraditionalForm]]], " Then, for all ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "\[Element]\[DoubleStruckCapitalZ]\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "m"], "=", "e"}], TraditionalForm]]], "\t\t\[DoubleLongLeftRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{"n", "|", "m"}], TraditionalForm]]], "." }], "Theorem", CellTags->"LemAppB Order Divides n"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ":\nWrite ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{"q", " ", "n"}], "+", "r"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "r", "<", RowBox[{"n", "."}]}], TraditionalForm]]], "Then, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["a", "m"], "=", "e"}], ","}], TraditionalForm]]], " iff ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["a", "r"], "=", "e"}], ","}], TraditionalForm]]], " i.e. iff ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"r", "=", "0"}], ","}], TraditionalForm]]], " i.e. iff ", Cell[BoxData[ FormBox[ RowBox[{"n", "|", RowBox[{"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[{ "It follows that an element ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " has order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "d"], "=", "e"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", RowBox[{"d", "/", "p"}]], "\[NotEqual]", "e"}], TraditionalForm]]], " for every prime divisor ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["d", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "To find the multiplicative order of an integer ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "m", "*"], TraditionalForm]]], " (so ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"a", ",", "m"}], ")"}], "=", "1"}], TraditionalForm]]], "), it follows from ", ButtonBox["Euler's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler"], " (Thm. A.14) and Lemma B.3 that one only has to check the divisors of ", Cell[BoxData[ FormBox[ RowBox[{"\[CurlyPhi]", "(", "m", ")"}], TraditionalForm]]], ". The ", StyleBox["Mathematica ", FontSlant->"Italic"], "formula ", StyleBox["MultiplicativeOrde", FontVariations->{"Underline"->True}], " does this directly" }], "Text", CellChangeTimes->{{3.4232064338830876`*^9, 3.4232064501024604`*^9}, 3.423396925610379*^9, {3.423455406671192*^9, 3.423455408733679*^9}, { 3.423460852035897*^9, 3.423460853035903*^9}, {3.4234632685806923`*^9, 3.42346326967445*^9}, {3.423474203993566*^9, 3.4234742059467034`*^9}, { 3.423475701065647*^9, 3.4234757286751986`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", "2"}], ";", RowBox[{"m", "=", "123456789"}], ";"}], "\n", RowBox[{"n", "=", RowBox[{"MultiplicativeOrder", "[", RowBox[{"a", ",", "m"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["6855006"], "Output"], Cell[TextData[{ StyleBox["Lemma B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t", FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"G", ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " be a group and ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " an element in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of order ", Cell[BoxData[ FormBox[ RowBox[{"n", "."}], TraditionalForm]]], " For ", Cell[BoxData[ FormBox[ RowBox[{"k", ">", "0"}], TraditionalForm]]], ", element ", Cell[BoxData[ FormBox[ SuperscriptBox["a", RowBox[{"k", " "}]], TraditionalForm]]], "has order\n\n\t\t\t\t", Cell[BoxData[ FormBox[ StyleBox[ FractionBox["n", RowBox[{"gcd", "(", RowBox[{"k", ",", " ", "n"}], ")"}]], FontFamily->"Times", FontSize->14], TraditionalForm]]], "." }], "Theorem", CellTags->"LemAppB Order a^k"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ":\nLet ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be the order of ", Cell[BoxData[ FormBox[ RowBox[{"a", "."}], TraditionalForm]]], " Since ", Cell[BoxData[ FormBox[ RowBox[{"k", "/", RowBox[{"gcd", "(", RowBox[{"k", ",", "n"}], ")"}]}], TraditionalForm]]], " is an integer, it follows that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["a", "k"], ")"}], RowBox[{"n", "/", RowBox[{"gcd", "(", RowBox[{"k", ",", " ", "n"}], ")"}]}]], " ", "=", " ", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["a", "n"], ")"}], RowBox[{"k", "/", RowBox[{"gcd", "(", RowBox[{"k", ",", " ", "n"}], ")"}]}]], " ", "=", " ", RowBox[{ SuperscriptBox["e", RowBox[{"k", "/", RowBox[{"gcd", "(", RowBox[{"k", ",", " ", "n"}], ")"}]}]], " ", "=", " ", RowBox[{"e", "."}]}]}]}], TraditionalForm]]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "From ", ButtonBox["Lemma B.3", BaseStyle->"Hyperlink", ButtonData:>"LemAppB Order Divides n"], ", we conclude that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"n", "/", RowBox[{ RowBox[{"gcd", "(", RowBox[{"k", ",", "n"}], ")"}], "."}]}], TraditionalForm]]], " To prove the converse, we observe that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["a", "k"], ")"}], "m"], "=", "e"}], TraditionalForm]]], ". Lemma B.3 implies that ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"k", " ", RowBox[{"m", "."}]}], TraditionalForm]]], " Hence, ", Cell[BoxData[ FormBox[ RowBox[{"n", "/", RowBox[{"gcd", "(", RowBox[{"k", ",", "n"}], ")"}]}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"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["\<\ Continuing with the same parameters as above, we have for instance:\ \>", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"k", "=", "3"}], ";"}], "\n", RowBox[{"MultiplicativeOrder", "[", RowBox[{ SuperscriptBox["a", "k"], ",", "m"}], "]"}], "\n", RowBox[{"n", "/", RowBox[{"GCD", "[", RowBox[{"k", ",", "n"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["2285002"], "Output"], Cell[BoxData["2285002"], "Output"], Cell[TextData[{ "Analogous to ", ButtonBox["(B.1)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Ring Equiv"], ", one can define for every subgroup ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"H", ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " of a finite group ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"G", ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " an equivalence relation \[Tilde] by " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"a", "\[Tilde]", "b"}], TraditionalForm]]], " iff ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["ab", RowBox[{"-", "1"}]], "\[Element]", RowBox[{"H", "."}]}], TraditionalForm]]] }], "DisplayFormula"], Cell["The equivalence classes are of the form ", "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"{", " ", RowBox[{ RowBox[{"h", " ", "a"}], " ", "|", " ", RowBox[{"h", "\[Element]", "H"}]}], " ", "}"}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "as one can easily check. They all have the same cardinality as ", Cell[BoxData[ FormBox[ RowBox[{"H", "."}], TraditionalForm]]], " It follows that the number of equivalence classes is ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"|", "G", "|"}], RowBox[{"|", "H", "|"}]], TraditionalForm]]], ". As a consequence ", Cell[BoxData[ FormBox[ RowBox[{"|", "H", "|"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"|", "G", "|"}], TraditionalForm]]], ". This proves the following theorem." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"G", ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " be a finite group of ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefAppB finite"], " ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". Then every subgroup ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"H", ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"G", ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " has an order dividing ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". Also every element ", Cell[BoxData[ FormBox[ RowBox[{"a", ",", " ", RowBox[{"a", "\[NotEqual]", "e"}]}], TraditionalForm]]], ", in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " has an order dividing ", Cell[BoxData[ FormBox[ RowBox[{"n", "."}], TraditionalForm]]] }], "Theorem", CellTags->"TheoAppB Order Subgroup"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "B.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tLinear Algebra" }], "Subsection", CellTags->"SubsAppB Linear Algebra"], Cell[CellGroupData[{ Cell["Vector Spaces and Subspaces", "Subsubsection", CellTags->"SubsubsAppB vector spaces"], Cell["\<\ Let \[DoubleStruckCapitalF] denote an arbitrary field.\ \>", "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA ", StyleBox["vector space", FontColor->RGBColor[0.996109, 0, 0]], " over \[DoubleStruckCapitalF] is a set ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " of objects which can be added and multiplied by elements of \ \[DoubleStruckCapitalF] such that the result is again in ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ". Besides, the following properties must be satisfied:\n1. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"u", "+", "v"}], ")"}], "+", "w"}], "=", RowBox[{"u", "+", RowBox[{"(", RowBox[{"v", "+", "w"}], ")"}]}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", "v", ",", RowBox[{"w", "\[Element]", "V"}]}], TraditionalForm]]], ",\n2. there is a ", StyleBox["zero-element", FontColor->RGBColor[1, 0, 0]], " in ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ", i.e. an element ", Cell[BoxData[ FormBox["o", TraditionalForm]]], " such that", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ RowBox[{"v", "+", "o"}], "=", RowBox[{ RowBox[{"o", "+", "v"}], "=", "v"}]}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"v", "\[Element]", "V"}], TraditionalForm]]], ",\n3. for every ", Cell[BoxData[ FormBox[ RowBox[{"v", " ", "\[Epsilon]", " ", "V"}], TraditionalForm]]], " there is an element ", Cell[BoxData[ FormBox[ RowBox[{"-", "v"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"v", "+", RowBox[{"(", RowBox[{"-", "v"}], ")"}]}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"-", "v"}], ")"}], "+", "v"}], "=", "o"}]}], TraditionalForm]]], ",\n4. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "+", "v"}], "=", RowBox[{"v", "+", "u"}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", RowBox[{"v", "\[Element]", "V"}]}], TraditionalForm]]], ",\n5. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Alpha]", "(", RowBox[{"u", "+", "v"}], ")"}], "=", RowBox[{ RowBox[{"\[Alpha]", " ", "u"}], "+", RowBox[{"\[Alpha]", " ", "v"}]}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", RowBox[{"v", "\[Element]", "V"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", "\[DoubleStruckCapitalF]"}], TraditionalForm]]], ",\n6. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"\[Alpha]", "+", "\[Beta]"}], ")"}], "v"}], "=", RowBox[{ RowBox[{"\[Alpha]", " ", "v"}], "+", RowBox[{"\[Beta]", " ", "v"}]}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", ",", RowBox[{"\[Beta]", "\[Element]", "\[DoubleStruckCapitalF]"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"v", "\[Element]", "V"}], TraditionalForm]]], ",\n7. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"\[Alpha]", " ", "\[Beta]"}], ")"}], "v"}], "=", RowBox[{"\[Alpha]", "(", RowBox[{"\[Beta]", " ", "v"}], ")"}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", ",", " ", RowBox[{"\[Beta]", "\[Element]", "F"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"v", "\[Element]", "V"}], TraditionalForm]]], ",\n8. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1.", "v"}], "=", "v"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"v", "\[Element]", "V"}], TraditionalForm]]], ", where 1 denotes the unit-element of the field \[DoubleStruckCapitalF]." }], "Definition", CellTags->"DefAppB Vector space"], Cell[TextData[{ "It is customary to call the elements of a vector space ", StyleBox["vectors", FontColor->RGBColor[0.996109, 0, 0]], " although they need not be vectors in the heuristic sense." }], "Text", CellTags->"DefAppB Vector"], Cell[TextData[{ "Examples of vector spaces over \[DoubleStruckCapitalF] are:\ni)\t", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalF]", "n"], TraditionalForm]]], ", the set of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-tuples over \[DoubleStruckCapitalF] \nii)\t", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"f", "(", "x", ")"}], "\[Element]", RowBox[{"\[DoubleStruckCapitalF]", "[", "x", "]"}]}], " ", "\[VerticalSeparator]", RowBox[{ RowBox[{"deg", "(", RowBox[{"f", "(", "x", ")"}], ")"}], "<", "n"}]}], "}"}], TraditionalForm]]], ", the set of polynomials over \[DoubleStruckCapitalF] of degree less than \ ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". " }], "Text"], Cell["\<\ Often, it is clear from the context over which field a vector space is \ defined. In that case, the field will no longer be mentioned. \ \>", "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA subset W of a given vector space V is called a ", StyleBox["linear subspace", FontColor->RGBColor[0.996109, 0, 0]], " of V if W itself is a vector space with the operations already defined in \ V." }], "Definition", CellTags->"DefAppB Linear S S"], Cell[TextData[{ "In order to determine whether a given subset of a vector space is a \ subspace, it is not necessary to check all eight vector space properties. For \ instance property 1 holds for all ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", "v", ",", RowBox[{"w", "\[Element]", "W"}]}], TraditionalForm]]], " because it is satisfied a fortiori by all elements in ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ". We have" }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nA subset ", Cell[BoxData[ FormBox["W", TraditionalForm]]], " of a vector space ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " is a linear subspace of ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " if and only if\n(i) ", Cell[BoxData[ FormBox[ RowBox[{"o", "\[Element]", "W"}], TraditionalForm]]], ",\n(ii) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "+", "v"}], "\[Element]", "W"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"u", ",", RowBox[{"v", "\[Element]", "W"}]}], TraditionalForm]]], ",\n(iii) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Alpha]", " ", "u"}], "\[Element]", "W"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", "W"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", "\[DoubleStruckCapitalF]"}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ "Every vector space ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " has two so-called ", StyleBox["trivial", FontColor->RGBColor[0.996109, 0, 0]], " subspaces: ", Cell[BoxData[ FormBox[ RowBox[{"{", "o", "}"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["V", TraditionalForm]]], "." }], "Text", CellTags->"DefAppB trivial vs"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " be a vector space and let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], ",", RowBox[{ SubscriptBox["v", RowBox[{"2", ","}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["v", "n"]}], TraditionalForm]]], " be elements of ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ". An expression of the type" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "1"], TraditionalForm], FormBox[ SubscriptBox["v", "1"], TraditionalForm]}], "+", RowBox[{ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Alpha]", "2"], SubscriptBox["v", "2"]}], "+"}], TraditionalForm], "\[Ellipsis]"}], "+", RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "n"], TraditionalForm], FormBox[ SubscriptBox["v", "n"], TraditionalForm]}]}], " "}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "i"], TraditionalForm], "\[Element]", "\[DoubleStruckCapitalF]"}], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "is called a ", StyleBox["linear combination", FontColor->RGBColor[0.996109, 0, 0]], " of ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], ",", RowBox[{ SubscriptBox["v", RowBox[{"2", ","}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["v", "n"]}], TraditionalForm]]], ".\nThe set of all linear combinations of ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], ",", RowBox[{ SubscriptBox["v", RowBox[{ RowBox[{"2", ","}], " "}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["v", "n"]}], TraditionalForm]]], " is a subspace of ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ", which is called the subspace ", StyleBox["spanned", FontColor->RGBColor[0.996109, 0, 0]], " by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], ",", RowBox[{ SubscriptBox["v", RowBox[{"2", ","}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["v", "n"]}], TraditionalForm]]], ", and will be denoted by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["<", FontColor->RGBColor[1, 0, 0]], StyleBox[ SubscriptBox["v", "1"], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.996109, 0, 0]]}], StyleBox[",", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[1, 0, 0]], StyleBox[ RowBox[{ SubscriptBox["v", RowBox[{ RowBox[{"2", ","}], " "}]], "\[Ellipsis]"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[1, 0, 0]], StyleBox[" ", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[1, 0, 0]], StyleBox[",", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[1, 0, 0]], StyleBox[" ", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[1, 0, 0]], StyleBox[ RowBox[{ SubscriptBox["v", "n"], ">"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[1, 0, 0]]}], TraditionalForm]]], "." }], "Text", CellTags->"DefAppB span"] }, Closed]], Cell[CellGroupData[{ Cell["Linear Independence, Basis and Dimension", "Subsubsection", CellTags->"SubsubsAppB linear indep"], Cell["\<\ Probably the most important concept when dealing with vector spaces is the \ concept of linear (in)dependency.\ \>", "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nA set of vectors ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], ",", RowBox[{ SubscriptBox["v", RowBox[{ RowBox[{"2", ","}], " "}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["v", "n"]}], TraditionalForm]]], " in a vector space ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " is ", StyleBox["linearly independent", FontColor->RGBColor[0.996109, 0, 0]], " if the equation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "1"], TraditionalForm], FormBox[ SubscriptBox["v", "1"], TraditionalForm]}], "+", FormBox[ RowBox[{ SubscriptBox["\[Alpha]", "2"], SubscriptBox["v", "2"]}], TraditionalForm], "+", "\[Ellipsis]", "+", RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "n"], TraditionalForm], FormBox[ SubscriptBox["v", RowBox[{"n", " "}]], TraditionalForm]}]}], "=", "o"}], TraditionalForm]]], " has only the trivial solution ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "1"], TraditionalForm], "=", "0"}], ",", RowBox[{ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Alpha]", "2"], "=", "0"}], ","}], TraditionalForm], "\[Ellipsis]"}], " ", ",", RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "n"], TraditionalForm], "=", "0"}]}], TraditionalForm]]], ". If the set of vectors is not linearly independent it is ", StyleBox["linearly dependent", FontColor->RGBColor[0.996109, 0, 0]], "." }], "Definition", CellTags->"DefAppB Linear Dep"], Cell[TextData[{ "Suppose that the set of vectors ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], ",", RowBox[{ SubscriptBox["v", RowBox[{ RowBox[{"2", ","}], " "}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["v", "n"]}], TraditionalForm]]], " is linearly dependent. Then, there is a linear combination ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "1"], TraditionalForm], FormBox[ SubscriptBox["v", "1"], TraditionalForm]}], "+", "\[Ellipsis]", "+", RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "n"], TraditionalForm], FormBox[ SubscriptBox["v", "n"], TraditionalForm]}]}], "=", "o"}], TraditionalForm]]], " where at least one ", Cell[BoxData[ FormBox[ SubscriptBox["\[Alpha]", "i"], TraditionalForm]]], " \[NotEqual] 0. This enables us to write\n", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["v", "i"], TraditionalForm], "=", RowBox[{ FormBox[ SuperscriptBox[ SubscriptBox["\[Alpha]", "i"], RowBox[{"-", "1"}]], TraditionalForm], "(", RowBox[{ RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "1"], TraditionalForm], FormBox[ SubscriptBox["v", "1"], TraditionalForm]}], "+", "\[Ellipsis]", " ", "+", RowBox[{ FormBox[ SubscriptBox["\[Alpha]", RowBox[{"i", "-", "1"}]], TraditionalForm], FormBox[ SubscriptBox["v", RowBox[{"i", "-", "1"}]], TraditionalForm]}], "+", RowBox[{ FormBox[ SubscriptBox["\[Alpha]", RowBox[{"i", "+", "1"}]], TraditionalForm], FormBox[ SubscriptBox["v", RowBox[{"i", "+", "1"}]], TraditionalForm]}], "+", "\[Ellipsis]", " ", "+", RowBox[{ FormBox[ SubscriptBox["\[Alpha]", "n"], TraditionalForm], FormBox[ SubscriptBox["v", "n"], TraditionalForm]}]}], ")"}]}], TraditionalForm]]], ". Thus, we get a different description of linear dependency." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nA set of vectors ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], ",", RowBox[{ SubscriptBox["v", RowBox[{ RowBox[{"2", ","}], " "}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["v", "n"]}], TraditionalForm]]], " in a vector space ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " is linearly dependent if and only if at least one of these vectors can be \ expressed as a linear combination of the other vectors." }], "Theorem"], Cell[TextData[{ "This implies in particular that any set of vectors that includes the \ zero-vector ", Cell[BoxData[ FormBox["o", TraditionalForm]]], " is linearly dependent." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nSuppose that the vectors ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["v", "1"], ",", RowBox[{ SubscriptBox["v", RowBox[{ RowBox[{"2", ","}], " "}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["v", "n"]}], TraditionalForm]]], " are linearly independent. If we replace one of these vectors by the sum of \ this vector and a linear combination of the other vectors, the resulting set \ of vectors is again linearly independent." }], "Theorem"], Cell[TextData[{ "Now let ", Cell[BoxData[ FormBox["W", TraditionalForm]]], " be a subspace of a vector space ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ", and let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["w", "1"], ",", RowBox[{ SubscriptBox["w", RowBox[{"2", ","}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["w", "n"]}], "}"}], "\[Subset]", "W"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nThe set ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["w", "1"], ",", RowBox[{ SubscriptBox["w", RowBox[{ RowBox[{"2", ","}], " "}]], "\[Ellipsis]"}], " ", ",", " ", SubscriptBox["w", "n"]}], "}"}], TraditionalForm]]], " is a ", StyleBox["basis", FontColor->RGBColor[0.996109, 0, 0]], " for ", Cell[BoxData[ FormBox["W", TraditionalForm]]], " if\n(i)\tthis set of vectors is linearly independent,\n(ii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"<", FormBox[ SubscriptBox["w", "1"], TraditionalForm]}], ",", RowBox[{"...", "..."}], ",", RowBox[{ RowBox[{ FormBox[ SubscriptBox["w", "n"], TraditionalForm], ">"}], " ", "=", "W"}]}], TraditionalForm]]], ", i.e. any ", Cell[BoxData[ FormBox[ RowBox[{"w", "\[Element]", "W"}], TraditionalForm]]], " is a linear combination of ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["w", "1"], ",", RowBox[{ SubscriptBox["w", RowBox[{ RowBox[{"2", ","}], " "}]], "\[Ellipsis]"}], " ", ",", SubscriptBox["w", "n"]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppB Basis"], Cell[TextData[{ "In particular, if ", Cell[BoxData[ FormBox[ RowBox[{"W", "=", "V"}], TraditionalForm]]], " we have a basis for the vector space ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " itself.\nFor instance, if ", Cell[BoxData[ FormBox[ RowBox[{"V", "=", FormBox[ SuperscriptBox["\[DoubleStruckCapitalF]", "n"], TraditionalForm]}], TraditionalForm]]], " the following set of vectors is a basis for ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ":" }], "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox["e", "1"], TraditionalForm], "=", RowBox[{"(", RowBox[{"1", ",", "0", ",", "\[Ellipsis]", " ", ",", "0"}], ")"}]}], ",", " ", RowBox[{ FormBox[ SubscriptBox["e", "2"], TraditionalForm], "=", RowBox[{"(", RowBox[{"0", ",", "1", ",", "0", ",", "\[Ellipsis]", " ", ",", "0"}], ")"}]}], ",", "\[Ellipsis]", " ", ",", " ", RowBox[{ FormBox[ SubscriptBox["e", "n"], TraditionalForm], "=", RowBox[{"(", RowBox[{"0", ",", "\[Ellipsis]", " ", ",", "0", ",", "1"}], ")"}]}]}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell[TextData[{ "This basis is usually called the ", StyleBox["standard basis", FontColor->RGBColor[0.996109, 0, 0]], "." }], "Text", CellTags->"DefAppB Standard basis"], Cell[TextData[{ "In the definition we considered only a finite basis. Not every vector space \ is spanned by a finite number of vectors. Take for example ", Cell[BoxData[ FormBox[ RowBox[{"\[DoubleStruckCapitalF]", "=", "\[DoubleStruckCapitalR]"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " is the vector space of all real-valued functions on \ \[DoubleStruckCapitalR]." }], "Text"], Cell["\<\ It can be proved that in every vector space a basis exists. Here we will be \ concerned only with vector spaces which are spanned by a finite number of \ vectors. The following theorem is very important.\ \>", "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nSuppose one basis of a subspace ", Cell[BoxData[ FormBox["W", TraditionalForm]]], " of a vector space ", Cell[BoxData[ FormBox["V", TraditionalForm]]], " has ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " vectors, and another basis has ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " vectors. Then ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "m"}], TraditionalForm]]], "." }], "Theorem"], Cell["\<\ A basis for a vector space is not uniquely determined; however, in the case \ of a finite basis the number of vectors in a basis is uniquely determined.\ \>", "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nIf a vector space has a basis with n vectors we call ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " the ", StyleBox["dimension", FontColor->RGBColor[0.996109, 0, 0]], " of this vector space. The dimension of the zero vector space ", Cell[BoxData[ FormBox[ RowBox[{"{", "o", "}"}], TraditionalForm]]], " is defined to be 0." }], "Definition", CellTags->"DefAppB dimension"] }, Closed]], Cell[CellGroupData[{ Cell["Inner Product, Orthogonality", "Subsubsection", CellTags->"SubsubsAppB inner product"], Cell[TextData[{ StyleBox["Let ", FontWeight->"Plain"], StyleBox["V ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["be a vector space over the field \[DoubleStruckCapitalF].", FontWeight->"Plain"] }], "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\n", StyleBox["An ", FontWeight->"Plain", Background->None], StyleBox["inner product", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0], Background->None], StyleBox[" on ", FontWeight->"Plain", Background->None], StyleBox["V", FontWeight->"Plain", FontSlant->"Italic", Background->None], StyleBox[" is a bilinear map ", FontWeight->"Plain", Background->None], StyleBox["V\[Times]V ", FontWeight->"Plain", FontSlant->"Italic", Background->None], StyleBox["\[Rule] \[DoubleStruckCapitalF]. It is denoted by ", FontWeight->"Plain", Background->None], StyleBox["(", FontWeight->"Plain"], StyleBox["u,v", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[")", FontWeight->"Plain"], StyleBox[", where ", FontWeight->"Plain", Background->None], Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " are vectors in ", Cell[BoxData[ FormBox["V", TraditionalForm]]], ". " }], "Definition", CellTags->"DefAppB inner product"], Cell[TextData[{ StyleBox["Bilinear means that the following properties should hold for all ", FontWeight->"Plain"], StyleBox["u,v,w ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["\[Element] ", FontWeight->"Plain"], StyleBox["V ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["and \[Alpha] \[Element] \[DoubleStruckCapitalF].", FontWeight->"Plain"] }], "Text"], Cell[TextData[{ StyleBox["(", FontWeight->"Plain"], StyleBox["u+v,w", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") = (", FontWeight->"Plain"], StyleBox["u,w", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[")+(", FontWeight->"Plain"], StyleBox["v,w", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") and (", FontWeight->"Plain"], StyleBox["u,v+w", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") = (", FontWeight->"Plain"], StyleBox["u,v", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[")+(", FontWeight->"Plain"], StyleBox["u,w", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[")", FontWeight->"Plain"] }], "DisplayFormula"], Cell[TextData[{ StyleBox["(\[Alpha]", FontWeight->"Plain"], StyleBox["u,v", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") = \[Alpha](", FontWeight->"Plain"], StyleBox["u,v", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") = (", FontWeight->"Plain"], StyleBox["u,", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["\[Alpha]", FontWeight->"Plain"], StyleBox["v", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[")", FontWeight->"Plain"] }], "DisplayFormula"], Cell[TextData[{ StyleBox["This is a very general definition of an inner product. If in \ particular \[DoubleStruckCapitalF] = \[DoubleStruckCapitalR] or \ \[DoubleStruckCapitalF] = \[DoubleStruckCapitalC] usually additional \ properties are required. For instance, in real vector spaces one wants", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{"(", RowBox[{"u", ",", "u"}], ")"}]}], TraditionalForm]]], StyleBox[" to be ", FontWeight->"Plain"], StyleBox["positive definite", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0]], StyleBox[", i.e. ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", ",", "u"}], ")"}], " ", ">", " ", "0"}], TraditionalForm]]], StyleBox[" for all vectors ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"u", " ", "\[NotEqual]", "o"}], TraditionalForm]]], StyleBox[". In this case, the ", FontWeight->"Plain"], StyleBox["length", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0]], StyleBox[" or ", FontWeight->"Plain"], StyleBox["norm", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0]], StyleBox[" of ", FontWeight->"Plain"], Cell[BoxData[ FormBox["u", TraditionalForm]]], " is defined by ", Cell[BoxData[ FormBox[ SqrtBox[ RowBox[{"(", RowBox[{"u", ",", "u"}], ")"}]], TraditionalForm]]], " and often denoted by ", Cell[BoxData[ FormBox[ RowBox[{"||", "u", "||"}], TraditionalForm]]], ".", StyleBox["\nIf ", FontWeight->"Plain"], StyleBox["V ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["= ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ SuperscriptBox[ StyleBox["\[DoubleStruckCapitalF]", FontWeight->"Plain", FontSlant->"Plain", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}], "n"], TraditionalForm]]], " ", StyleBox["then the ", FontWeight->"Plain"], StyleBox["standard inner product", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0]], StyleBox[" is defined by", FontWeight->"Plain"] }], "Text", CellTags->"DefAppB pos def"], Cell[TextData[{ StyleBox["(", FontWeight->"Plain"], StyleBox["u,v", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") = ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ SubscriptBox[ StyleBox["u", FontWeight->"Plain", FontSlant->"Plain", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}], StyleBox["1", FontWeight->"Plain", FontSlant->"Plain", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}]], TraditionalForm], FormBox[ SubscriptBox[ StyleBox["v", FontWeight->"Plain", FontSlant->"Plain", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}], StyleBox["1", FontWeight->"Plain", FontSlant->"Plain", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}]], TraditionalForm]}], "+", RowBox[{ SubscriptBox["u", "2"], SubscriptBox["v", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["u", "n"], SubscriptBox["v", "n"]}]}], TraditionalForm]]], StyleBox[".", FontWeight->"Plain"] }], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppB inner prod"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\n", StyleBox["(i) Two vectors ", FontWeight->"Plain"], StyleBox["u", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" and ", FontWeight->"Plain"], StyleBox["v", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" in ", FontWeight->"Plain"], StyleBox["V ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["are called ", FontWeight->"Plain"], StyleBox["orthogonal", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0]], StyleBox[" if (", FontWeight->"Plain"], StyleBox["u,v", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") = 0.\n(ii) Two subspaces ", FontWeight->"Plain"], StyleBox["U ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["and ", FontWeight->"Plain"], StyleBox["W", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" of ", FontWeight->"Plain"], StyleBox["V", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" are called ", FontWeight->"Plain"], StyleBox["orthogonal", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0]], StyleBox[" if (", FontWeight->"Plain"], StyleBox["u,w", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") = 0 for all ", FontWeight->"Plain"], StyleBox["u ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["\[Element] ", FontWeight->"Plain"], StyleBox["U", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" and ", FontWeight->"Plain"], StyleBox["w ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["\[Element] ", FontWeight->"Plain"], StyleBox["W.", FontWeight->"Plain", FontSlant->"Italic"] }], "Definition", CellTags->"DefAppB orthogonal"], Cell[TextData[{ StyleBox["If the field \[DoubleStruckCapitalF] is finite then there may \ exist nonzero vectors ", FontWeight->"Plain"], StyleBox["u", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" such that (", FontWeight->"Plain"], StyleBox["u,u", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[") = 0. For instance, in the vector space ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ SuperscriptBox[ StyleBox["\[DoubleStruckCapitalF]", FontWeight->"Plain", FontSlant->"Plain", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}], "n"], TraditionalForm]]], StyleBox[", where ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"\[DoubleStruckCapitalF]", "=", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], TraditionalForm]]], StyleBox[", with standard inner product, any vector ", FontWeight->"Plain"], StyleBox["u", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[" with an even number of nonzero coordinates is orthogonal to \ itself.", FontWeight->"Plain"] }], "Text"], Cell[TextData[{ StyleBox["Let ", FontWeight->"Plain"], StyleBox["U ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["be a subspace of ", FontWeight->"Plain"], StyleBox["V", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[". In many applications it is useful to consider the set of all \ vectors orthogonal to ", FontWeight->"Plain"], StyleBox["U", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[".", FontWeight->"Plain"] }], "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\n", StyleBox["The ", FontWeight->"Plain"], StyleBox["orthogonal complement", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0]], StyleBox[" of a subspace ", FontWeight->"Plain"], StyleBox["U ", FontWeight->"Plain", FontSlant->"Italic"], StyleBox["of", FontWeight->"Plain"], StyleBox[" V", FontWeight->"Plain", FontSlant->"Italic"], StyleBox[", denoted by ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ SuperscriptBox[ StyleBox["U", FontWeight->"Plain", FontSlant->"Italic", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}], "\[UpTee]"], TraditionalForm]]], StyleBox[", is the set of all vectors which are orthogonal to all vectors of \ ", FontWeight->"Plain"], StyleBox["U.", FontWeight->"Plain", FontSlant->"Italic"] }], "Definition", CellTags->"DefAppB orth compl"], Cell["In formula:", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ StyleBox["U", FontWeight->"Plain", FontSlant->"Italic", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}], "\[UpTee]"], "=", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"v", "\[Element]", "U"}], "|", RowBox[{"(", RowBox[{"u", ",", "v"}], ")"}]}], "=", RowBox[{ RowBox[{"0", " ", "for", " ", "all", " ", "u"}], "\[Element]", "U"}]}], "}"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "The following properties hold for subspaces ", StyleBox["U", FontSlant->"Italic"], " and ", StyleBox["W", FontSlant->"Italic"], " of a finite dimensional vector space ", StyleBox["V", FontSlant->"Italic"], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\ni)\tThe orthogonal complement of a subspace is a subspace itself, i.e. ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox[ StyleBox["U", FontWeight->"Plain", FontSlant->"Italic", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}], "\[UpTee]"], ")"}], "\[UpTee]"], "=", "U"}], TraditionalForm]]], "\nii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"dim", "(", FormBox[ SuperscriptBox["U", "\[UpTee]"], TraditionalForm], ")"}], " ", "=", " ", RowBox[{ RowBox[{"dim", "(", "V", ")"}], " ", "-", " ", RowBox[{"dim", "(", "U", ")"}]}]}], TraditionalForm]]], ".\niii)\tIf ", StyleBox["U", FontSlant->"Italic"], " \[Subset] ", StyleBox["W", FontSlant->"Italic"], ", then ", Cell[BoxData[ FormBox[ SuperscriptBox["W", "\[UpTee]"], TraditionalForm]]], " \[Subset] ", Cell[BoxData[ FormBox[ SuperscriptBox["U", "\[UpTee]"], TraditionalForm]]], "\niv)\t", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"U", "\[Intersection]", "V"}], ")"}], "\[UpTee]"], TraditionalForm]]], " = ", Cell[BoxData[ FormBox[ SuperscriptBox["U", "\[UpTee]"], TraditionalForm]]], " + ", Cell[BoxData[ FormBox[ SuperscriptBox["V", "\[UpTee]"], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ "In the case where ", StyleBox["V", FontSlant->"Italic"], " = ", Cell[BoxData[ FormBox[ SuperscriptBox["\[DoubleStruckCapitalF]", "n"], TraditionalForm]]], ", with standard inner product, we have a simple representation of ", Cell[BoxData[ FormBox[ SuperscriptBox["U", "\[UpTee]"], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ FormBox[ SubscriptBox["u", "1"], TraditionalForm], ",", SubscriptBox["u", "2"], ",", "\[Ellipsis]", ",", FormBox[ SubscriptBox["u", "m"], TraditionalForm]}], "}"}], TraditionalForm]]], " be a basis for ", StyleBox["U", FontSlant->"Italic"], ", and let", StyleBox[" A ", FontSlant->"Italic"], "be the ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Times]", "n"}], TraditionalForm]]], "-matrix with rows ", Cell[BoxData[ FormBox[ SubscriptBox["u", "1"], TraditionalForm]]], " ,......, ", Cell[BoxData[ FormBox[ SubscriptBox["u", "m"], TraditionalForm]]], ". Then we have:\n \ ", StyleBox["v", FontSlant->"Italic"], " \[Element] ", Cell[BoxData[ FormBox[ SuperscriptBox["U", "\[UpTee]"], TraditionalForm]]], " \[DoubleLongLeftRightArrow] ", StyleBox["A", FontSlant->"Italic"], Cell[BoxData[ FormBox[ SuperscriptBox["v", "T"], TraditionalForm]]], " = ", Cell[BoxData[ FormBox[ SuperscriptBox["o", "T"], TraditionalForm]]], ",\nwhere the superscript ", StyleBox["T", FontSlant->"Italic"], " denotes the transpose of a vector, i.e. the column vector with the same \ coordinates as ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " has." }], "Text", TextAlignment->Left], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\n", StyleBox["A basis ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["v", "1"], ",", SubscriptBox["v", "2"], ",", "...", ",", SubscriptBox["v", "m"]}], "}"}], TraditionalForm]]], StyleBox[" of a vector space ", FontWeight->"Plain"], Cell[BoxData[ FormBox["V", TraditionalForm]]], StyleBox[" is called ", FontWeight->"Plain"], StyleBox["self-orthogonal", FontWeight->"Plain", FontColor->RGBColor[1, 0, 0]], StyleBox[" if all the inner products ", FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["v", "i"], ",", SubscriptBox["v", "j"]}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[NotEqual]", "j"}], TraditionalForm]]], ", are zero.\nIt is called ", StyleBox["self-orthonormal", FontColor->RGBColor[1, 0, 0]], ", if in addition ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox[ RowBox[{"(", RowBox[{"||", "v"}], ")"}], "i"], "||"}], "=", "0"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppB self orth"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["B.2\tConstructions", "Section", CellTags->"SecAppB Field Constr"], Cell[TextData[{ "The set of integers modulo ", Cell[BoxData[ FormBox[ RowBox[{"m", ",", RowBox[{"m", "\[Element]", RowBox[{"\[DoubleStruckCapitalN]", "\\", RowBox[{"{", "0", "}"}]}]}], ","}], TraditionalForm]]], " that was introduced in ", ButtonBox["Section A.3", BaseStyle->"Hyperlink", ButtonData:>"SecAppA Congruences"], ", can also be described as the residue class ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"\[DoubleStruckCapitalZ]", "/", "m"}], " ", "\[DoubleStruckCapitalZ]"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.2", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Res Class"], "), since ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"m", " ", "\[DoubleStruckCapitalZ]"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is an ideal in the commutative ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"\[DoubleStruckCapitalZ]", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ". This residue class ring is commutative and has ", Cell[BoxData[ FormBox[ RowBox[{"<", "1", ">"}], TraditionalForm]]], " as multiplicative unit-element. The ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"\[DoubleStruckCapitalZ]", "/", "m"}], " ", "\[DoubleStruckCapitalZ]"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is often denoted by ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "m"], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], "." }], "Text", CellTags->"DefAppB Zm"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be a positive integer. The ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "m"], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a finite field with ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " elements if and only if ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime." }], "Theorem", CellTags->"TheoAppB Field iff Prime"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": \n\[DoubleRightArrow] Suppose that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is composite, say ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "=", RowBox[{"a", " ", "b"}]}], ","}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", ">", "1"}], ","}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"b", ">", "1"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"<", "0", ">"}], " ", "=", RowBox[{ RowBox[{ RowBox[{"<", RowBox[{"a", " ", "b"}]}], ">"}], " ", "=", RowBox[{"<", "a", ">", "<", "b", ">"}]}]}], TraditionalForm]]], ", while ", Cell[BoxData[ FormBox[ RowBox[{"<", "a", ">", "\[NotEqual]", "<", "0", ">"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"<", "b", ">", "\[NotEqual]", "<", "0", ">"}], TraditionalForm]]], ". So the ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "m"], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " has zero-divisors and thus it can not be a field." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\[DoubleLeftArrow] Now suppose that ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is prime (See also the ", ButtonBox["Example B.3", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], "). We have to prove that for every equivalence class ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"<", "a", ">"}], ","}], " "}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"<", "a", ">", "\[NotEqual]", "<", "0", ">"}], ","}], TraditionalForm]]], " there exists an equivalence class ", Cell[BoxData[ FormBox[ RowBox[{"<", "b", ">"}], TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"<", "a", ">", "<", "b", ">"}], " ", "=", RowBox[{"<", "1", ">"}]}], TraditionalForm]]], ". For this it is sufficient to show that for any ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[NotVerticalBar]", "a"}], TraditionalForm]]], ", there exists an element ", Cell[BoxData[ FormBox["b", TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", " ", "b"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "m"}], ")"}]}]}], TraditionalForm]]], ".This however follows from ", ButtonBox["Lemma A.13", BaseStyle->"Hyperlink", ButtonData:>"LemAppA AR_i also Red"], " or ", ButtonBox["Theorem A.18", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA AX=B mod M"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "For convenience, one often leaves out the brackets around the \ representatives of equivalence classes, therefore with ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " one really means ", Cell[BoxData[ FormBox[ RowBox[{"<", "a", ">"}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "Later we shall see that for ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime, ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is essentially the only finite field with ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " elements. We shall denote it by ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ". In information and communication theory one often works with ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "2"], TraditionalForm]]], ", which just consists of the elements 0 and 1. " }], "Text"], Cell[TextData[{ "We are now going to construct finite fields ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"F", ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be a commutative field (not necessarily finite) and let ", Cell[BoxData[ FormBox[ RowBox[{"F", "[", "x", "]"}], TraditionalForm]]], " be the set of ", StyleBox["polynomials", FontColor->RGBColor[0.996109, 0, 0]], " over ", Cell[BoxData[ FormBox["F", TraditionalForm]]], ", i.e. the set of expressions" }], "Text", CellTags->"DefAppB polyn"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ SubscriptBox["f", "0"], "+", RowBox[{ SubscriptBox["f", "1"], " ", "x"}], "+", RowBox[{ SubscriptBox["f", "2"], " ", SuperscriptBox["x", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["f", "n"], " ", SuperscriptBox["x", "n"]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "i"], "\[Element]", "F"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"0", "\[LessEqual]", "0", "\[LessEqual]", "n"}], ","}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], ". The largest value of ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " for which", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "i"], " ", "\[NotEqual]", "0"}], TraditionalForm]]], " is called the ", StyleBox["degree", FontColor->RGBColor[0.996109, 0, 0]], " of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], "." }], "Text", CellTags->"DefAppB degree"], Cell["\<\ Addition and multiplication of polynomials is defined in the natural way.\ \>", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", "i"], RowBox[{ SubscriptBox["f", "i"], " ", SuperscriptBox["x", "i"]}]}], " ", "+", " ", RowBox[{ SubscriptBox["\[Sum]", "i"], RowBox[{ SubscriptBox["g", "i"], " ", SuperscriptBox["x", "i"]}]}]}], " ", "=", " ", RowBox[{ SubscriptBox["\[Sum]", "i"], RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["f", "i"], "+", SubscriptBox["g", "i"]}], ")"}], " ", SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppB Pol add mult"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["\[Sum]", "i"], RowBox[{ SubscriptBox["f", "i"], " ", SuperscriptBox["x", "i"]}]}], " ", ")"}], " ", RowBox[{"(", " ", RowBox[{ SubscriptBox["\[Sum]", "j"], RowBox[{ SubscriptBox["g", "j"], " ", SuperscriptBox["x", "j"]}]}], ")"}]}], " ", "=", " ", RowBox[{ SubscriptBox["\[Sum]", "k"], RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["\[Sum]", RowBox[{ RowBox[{"i", "+", "j"}], "=", "k"}]], RowBox[{ SubscriptBox["f", "i"], " ", SubscriptBox["g", "j"]}]}], ")"}], " ", SuperscriptBox["x", "k"]}]}]}], TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppB Pol add mult two"], Cell[TextData[{ StyleBox["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"F", "=", SubscriptBox["\[DoubleStruckCapitalF]", "2"]}], TraditionalForm]]], " and consider ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], " ", "=", " ", RowBox[{"1", " ", "+", " ", SuperscriptBox["x", "2"], " ", "+", " ", SuperscriptBox["x", "3"]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"g", "(", "x", ")"}], " ", "=", " ", RowBox[{"1", " ", "+", " ", "x", " ", "+", " ", SuperscriptBox["x", "3"]}]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"f", "(", "x", ")"}], "+", RowBox[{"g", "(", "x", ")"}]}], " ", "=", " ", RowBox[{"x", " ", "+", " ", SuperscriptBox["x", "2"]}]}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"f", "(", "x", ")"}], RowBox[{"g", "(", "x", ")"}]}], " ", "=", " ", RowBox[{"1", " ", "+", "x", " ", "+", " ", SuperscriptBox["x", "2"], " ", "+", " ", SuperscriptBox["x", "3"], " ", "+", " ", SuperscriptBox["x", "4"], " ", "+", " ", SuperscriptBox["x", "5"], " ", "+", " ", SuperscriptBox["x", "6"]}]}], TraditionalForm]]], "." }], "Example"], Cell[TextData[{ "In ", StyleBox["Mathematica", FontSlant->"Italic"], " we can perform these calculations the function ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], " as follows" }], "Text", CellChangeTimes->{3.4233946510801973`*^9}], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "2"}], ";", " ", RowBox[{"f", "=", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}]}], ";", " ", RowBox[{"g", "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}]}], ";", RowBox[{ StyleBox["PolynomialMod", "MR"], StyleBox["[", "MR"], RowBox[{ StyleBox[ RowBox[{"f", "+", "g"}], "MR"], StyleBox[",", "MR"], " ", "p"}], StyleBox["]", "MR"]}]}], "\n", RowBox[{ StyleBox["PolynomialMod", "MR"], StyleBox["[", "MR"], RowBox[{ StyleBox[ RowBox[{"f", "*", "g"}], "MR"], StyleBox[",", "MR"], " ", "p"}], StyleBox["]", "MR"]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"x", "+", SuperscriptBox["x", "2"]}]], "Output"], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]], "Output"], Cell["It is now straightforward to verify the next theorem.", "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"F", ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be a commutative field. Then ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"F", "[", "x", "]"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a commutative ring with unit-element." }], "Theorem", CellTags->"TheoAppB F[x]Ring"], Cell[TextData[{ "Analogously to the concepts defined in ", ButtonBox["Appendix A", BaseStyle->"Hyperlink", ButtonData:>"ChapNumberTh"], " for the set of integers, one can define the following notions in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"F", "[", "x", "]"}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ": ", StyleBox["divisibility", FontColor->RGBColor[0.996109, 0, 0]], ", ", StyleBox["reducibility", FontColor->RGBColor[0.996109, 0, 0]], " (if a polynomial can be written as the product of two polynomials of lower \ degree), ", StyleBox["irreducibility", FontColor->RGBColor[0.996109, 0, 0]], " (which is the analog of primality), ", StyleBox["gcd", FontColor->RGBColor[0.996109, 0, 0]], ", ", StyleBox["lcm", FontColor->RGBColor[0.996109, 0, 0]], ", the ", StyleBox["unique factorization theorem", FontColor->RGBColor[0.996109, 0, 0]], " (the analog of the fundamental theorem in number theory), ", StyleBox["Euclid's Algorithm", FontColor->RGBColor[0.996109, 0, 0]], ",", StyleBox[" ", FontColor->RGBColor[0, 0, 0.500008]], StyleBox["congruence relations", FontColor->RGBColor[0.996109, 0, 0]], ", etc. We leave the details to the reader. " }], "Text", CellTags->"DefAppB Pol Equiv Def"], Cell[TextData[{ "The following ", StyleBox["Mathematica", FontSlant->"Italic"], " functions can be helpful here: ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], " (which also reduces one polynomial modulo another), ", StyleBox["Factor", FontVariations->{"Underline"->True}], ", ", StyleBox["PolynomialGCD", FontVariations->{"Underline"->True}], ", ", StyleBox["PolynomialLCM", FontVariations->{"Underline"->True}], ". Their usage is demonstrated in the following examples: " }], "Text", CellChangeTimes->{ 3.4233946599708796`*^9, {3.423454708660034*^9, 3.423454711019394*^9}, { 3.423455682575676*^9, 3.4234556844975386`*^9}, {3.4234758082538333`*^9, 3.4234758175351424`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "2"}], ";", RowBox[{"f", "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "7"]}]}], ";", " ", RowBox[{"g", "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}]}], ";"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{"f", ",", "g", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"x", "+", SuperscriptBox["x", "2"]}]], "Output"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Factor", "[", RowBox[{ RowBox[{ SuperscriptBox["x", "11"], "-", "1"}], ",", RowBox[{"Modulus", "->", "3"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"2", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"2", "+", RowBox[{"2", " ", "x"}], "+", SuperscriptBox["x", "2"], "+", RowBox[{"2", " ", SuperscriptBox["x", "3"]}], "+", SuperscriptBox["x", "5"]}], ")"}], " ", RowBox[{"(", RowBox[{"2", "+", SuperscriptBox["x", "2"], "+", RowBox[{"2", " ", SuperscriptBox["x", "3"]}], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}], ")"}]}]], "Output", CellChangeTimes->{3.4214706849974847`*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialGCD", "[", RowBox[{ RowBox[{"1", "+", SuperscriptBox["x", "3"]}], ",", RowBox[{"1", "+", SuperscriptBox["x", "2"]}], ",", " ", RowBox[{"Modulus", "->", "2"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"1", "+", "x"}]], "Output", CellChangeTimes->{3.4214706817474847`*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialLCM", "[", RowBox[{ RowBox[{"1", "+", SuperscriptBox["x", "3"]}], ",", RowBox[{"1", "+", SuperscriptBox["x", "2"]}], ",", " ", RowBox[{"Modulus", "->", "2"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}]}]], "Output", CellChangeTimes->{3.4214706771537347`*^9}] }, Open ]], Cell[TextData[{ "One can use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PolynomialExtendedGCD", FontVariations->{"Underline"->True}], ":" }], "Text", CellChangeTimes->{ 3.4214706544662347`*^9, {3.423471368824931*^9, 3.423471369574936*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialExtendedGCD", "[", RowBox[{ RowBox[{"1", "+", SuperscriptBox["x", "3"]}], ",", RowBox[{"1", "+", SuperscriptBox["x", "2"]}], ",", " ", RowBox[{"Modulus", "->", "2"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"1", "+", "x"}], ",", RowBox[{"{", RowBox[{"1", ",", "x"}], "}"}]}], "}"}]], "Output", CellChangeTimes->{3.4214706650443597`*^9}] }, Open ]], Cell[TextData[{ "One particular consequence of ", ButtonBox["Theorem B.12", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB F[x]Ring"], " is stated in the following theorem and its corollary." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"a", "(", "x", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"b", "(", "x", ")"}], TraditionalForm]]], " be two polynomials in ", Cell[BoxData[ FormBox[ RowBox[{"F", "[", "x", "]"}], TraditionalForm]]], " . Then there exists polynomials ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"v", "(", "x", ")"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"F", "(", "x", ")"}], TraditionalForm]]], " such that\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"u", "(", "x", ")"}], RowBox[{"a", "(", "x", ")"}]}], "+", RowBox[{ RowBox[{"v", "(", "x", ")"}], RowBox[{"b", "(", "x", ")"}]}]}], " ", "=", " ", RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"a", "(", "x", ")"}], ",", RowBox[{"b", "(", "x", ")"}]}], ")"}], "."}]}], TraditionalForm]]] }], "Theorem", CellTags->"TheoAppB Pol ExtGCD"], Cell[TextData[{ StyleBox["Corollary B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"a", "(", "x", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be two polynomials in ", Cell[BoxData[ FormBox[ RowBox[{"F", "[", "x", "]"}], TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{"a", "(", "x", ")"}], ",", RowBox[{"f", "(", "x", ")"}]}], ")"}], " ", "=", "1"}], TraditionalForm]]], ". Then, the congruence relation \n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "(", "x", ")"}], " ", RowBox[{"u", "(", "x", ")"}], " "}], TraditionalForm]]], "\[Congruent] 1 (mod ", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm], ")"}]]], "\nhas a unique solution modulo ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppB A(x)U(x)=1 mod F(x)"], Cell[TextData[{ "The solution of the above congruence relation can again be found with ", StyleBox["PolynomialExtendedGCD", FontVariations->{"Underline"->True}], ". Indeed, from" }], "Text", CellChangeTimes->{{3.423471377106234*^9, 3.423471378481243*^9}}, CellTags->"FunctAppB PolExtGCD"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialExtendedGCD", "[", RowBox[{ RowBox[{"1", "+", SuperscriptBox["x", "2"]}], ",", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}], ",", " ", RowBox[{"Modulus", "->", "2"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"{", RowBox[{ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ",", "x"}], "}"}]}], "}"}]], "Output"] }, Open ]], Cell[TextData[{ "we can conclude that the congruence relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"]}], ")"}], " ", RowBox[{"u", "(", "x", ")"}]}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "1"}], "+", "x", "+", SuperscriptBox["x", "4"]}], ")"}]}]}], TraditionalForm]]], " has the solution ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], TraditionalForm]]], ", as one can easily check with:" }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"]}], ")"}], RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}]}], ",", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]], "Input"], Cell[BoxData["1"], "Output"] }, Open ]], Cell[TextData[{ "Another important property of ", Cell[BoxData[ FormBox[ RowBox[{"F", "[", "x", "]"}], TraditionalForm]]], " is given in the following theorem." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nAny polynomial of degree ", Cell[BoxData[ FormBox[ RowBox[{"n", ",", " ", RowBox[{"n", ">", "0"}], ","}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"F", "[", "x", "]"}], TraditionalForm]]], " has at most ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " zeros in ", Cell[BoxData[ FormBox[ RowBox[{"F", "."}], TraditionalForm]]] }], "Theorem", CellTags->"TheoAppB n Zeros"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": For ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "1"}], TraditionalForm]]], " the statement is trivial. We proceed by induction on ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Element]", "F"}], TraditionalForm]]], " be a zero of a polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " over ", Cell[BoxData[ FormBox["F", TraditionalForm]]], " (if no such ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " exists, there is nothing to prove). Write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], RowBox[{"q", "(", "x", ")"}]}], "+", RowBox[{"r", "(", "x", ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"degree", "(", RowBox[{"r", "(", "x", ")"}], ")"}], "<", RowBox[{"degree", "(", RowBox[{"x", "-", "u"}], ")"}]}], "=", "1"}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{"r", "(", "x", ")"}], TraditionalForm]]], " is a constant, say ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ". Substitution of ", Cell[BoxData[ FormBox[ RowBox[{"x", "=", "u"}], TraditionalForm]]], " in the relation above shows that ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "0"}], TraditionalForm]]], ". We conclude that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{"(", RowBox[{"x", "-", "u"}], ")"}], RowBox[{"q", "(", "x", ")"}]}]}], TraditionalForm]]], ". \nNow ", Cell[BoxData[ FormBox[ RowBox[{"q", "(", "x", ")"}], TraditionalForm]]], " has degree ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], ", thus, by the induction hypothesis, ", Cell[BoxData[ FormBox[ RowBox[{"q", "(", "x", ")"}], TraditionalForm]]], " has at most ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], " zeros in ", Cell[BoxData[ FormBox["F", TraditionalForm]]], ". Since a field can not have zero-divisors, we know that each zero of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is either a divisor of ", Cell[BoxData[ FormBox[ RowBox[{"x", "-", "u"}], TraditionalForm]]], " or a zero of ", Cell[BoxData[ FormBox[ RowBox[{"q", "(", "x", ")"}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " has at most ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " zeros in ", Cell[BoxData[ FormBox["F", 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[ RowBox[{"s", "(", "x", ")"}], TraditionalForm]]], " be a non-zero polynomial in ", Cell[BoxData[ FormBox[ RowBox[{"F", "[", "x", "]"}], TraditionalForm]]], ". It is easy to check that the set" }], "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", " ", RowBox[{ RowBox[{ RowBox[{"a", "(", "x", ")"}], RowBox[{"s", "(", "x", ")"}]}], " ", "\[VerticalSeparator]", " ", RowBox[{ RowBox[{"a", "(", "x", ")"}], "\[Element]", "F"}]}], " ", "}"}], "."}], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "forms an ideal in the ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"F", "[", "x", "]"}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ". We denote this ideal by ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"(", RowBox[{"s", "(", "x", ")"}], ")"}], FontFamily->"Times", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.996109, 0, 0]], TraditionalForm]]], " and say that ", Cell[BoxData[ FormBox[ RowBox[{"s", "(", "x", ")"}], TraditionalForm]]], " ", StyleBox["generates", FontColor->RGBColor[1, 0, 0]], " the ideal ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"s", "(", "x", ")"}], ")"}], TraditionalForm]]], "." }], "Text", CellTags->"DefAppB gen ideal"], Cell[TextData[{ "Conversely, let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"S", ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be any ideal in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"F", "[", "x", "]"}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"S", "\[NotEqual]", RowBox[{"F", "[", "x", "]"}]}], TraditionalForm]]], ". Further, let ", Cell[BoxData[ FormBox[ RowBox[{"s", "(", "x", ")"}], TraditionalForm]]], " be a polynomial of lowest degree in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". Take any other polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " and write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{ RowBox[{"q", "(", "x", ")"}], RowBox[{"s", "(", "x", ")"}]}], "+", RowBox[{"r", "(", "x", ")"}]}]}], TraditionalForm]]], ", degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"r", "(", "x", ")"}], ")"}], " ", "<"}], TraditionalForm]]], " degree", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"s", "(", "x", ")"}], ")"}], TraditionalForm]]], ". With properties ", ButtonBox["I", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ideal"], " and ", ButtonBox["R1", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ring"], ", we then have that also ", Cell[BoxData[ FormBox[ RowBox[{"r", "(", "x", ")"}], TraditionalForm]]], " is also an element of ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ". From our assumption on ", Cell[BoxData[ FormBox[ RowBox[{"s", "(", "x", ")"}], TraditionalForm]]], " we conclude that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"r", "(", "x", ")"}], "=", "0"}], TraditionalForm]]], " and thus that ", Cell[BoxData[ FormBox[ RowBox[{"s", "(", "x", ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "It follows from the above discussion that any ideal in the ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"F", "[", "x", "]"}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is generated by a single element! A ring with this property is called a ", StyleBox["principal ideal ring", FontColor->RGBColor[0.996109, 0, 0]], "." }], "Text", CellTags->"DefAppB princ ideal"], Cell[TextData[{ "From now on we shall restrict ourselves to finite fields. Up to now we have \ only seen examples of finite fields ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "\[Element]", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}]}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". We shall say that ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is a ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomial. Let ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be the ideal generated by ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ". From ", ButtonBox["Theorem B.2", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Res Class"], " we know that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a commutative ring with unit-element ", Cell[BoxData[ FormBox[ RowBox[{"<", "1", ">"}], TraditionalForm]]], ". It contains ", Cell[BoxData[ FormBox[ SuperscriptBox["p", "n"], TraditionalForm]]], " elements, represented by the ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomials of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be a finite field with ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " elements. Let ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be a polynomial of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ". Then, the commutative ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a finite field with ", Cell[BoxData[ FormBox[ SuperscriptBox["p", "n"], TraditionalForm]]], "elements if and only if ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is irreducible in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppB Field Iff Irred"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": (Compare with ", ButtonBox["Theorem B.11", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field iff Prime"], " and its proof.) \n\[DoubleLongRightArrow] Suppose that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{"a", "(", "x", ")"}], RowBox[{"b", "(", "x", ")"}]}]}], TraditionalForm]]], ", with degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"a", "(", "x", ")"}], ")"}], ">", "0"}], TraditionalForm]]], " and degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"b", "(", "x", ")"}], ")"}], ">", "0"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"<", RowBox[{"a", "(", "x", ")"}], ">", "<", RowBox[{"b", "(", "x", ")"}], ">"}], " ", "=", RowBox[{ RowBox[{ RowBox[{"<", RowBox[{ RowBox[{"a", "(", "x", ")"}], RowBox[{"b", "(", "x", ")"}]}]}], ">"}], " ", "=", RowBox[{ RowBox[{"<", RowBox[{"f", "(", "x", ")"}], ">"}], " ", "=", RowBox[{"<", "0", ">"}]}]}]}], TraditionalForm]]], ", while ", Cell[BoxData[ FormBox[ RowBox[{"<", RowBox[{"a", "(", "x", ")"}], ">", "\[NotEqual]", "<", "0", ">"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"<", RowBox[{"b", "(", "x", ")"}], ">", "\[NotEqual]", "<", "0", ">"}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a ring with zero-divisors. Hence it can not be a field." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\[DoubleLongLeftArrow] On the other hand, if ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is irreducible, any non-zero polynomial ", Cell[BoxData[ FormBox[ RowBox[{"a", "(", "x", ")"}], TraditionalForm]]], " of degree", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], " will have a multiplicative inverse ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " by ", ButtonBox["Corollary B.14", BaseStyle->"Hyperlink", ButtonData:>"CorAppB A(x)U(x)=1 mod F(x)"], ". For this ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " one has ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"<", RowBox[{"a", "(", "x", ")"}], ">", "<", RowBox[{"u", "(", "x", ")"}], ">"}], " ", "=", RowBox[{"<", "1", ">"}]}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a field. We know already that it contains ", Cell[BoxData[ FormBox[ SuperscriptBox["p", "n"], TraditionalForm]]], "elements." }], "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 B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "2"}], TraditionalForm]]], ". The field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "2"], TraditionalForm]]], " consists of the two elements 0 and 1. Let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}]}], TraditionalForm]]], ". Then \n", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "2"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}]}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " is a finite field with ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "3"], "=", "8"}], TraditionalForm]]], " elements. These eight elements can be represented by the eight binary \ polynomials of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "3"}], TraditionalForm]]], ". ", ButtonBox["Addition and multiplication", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Pol add mult"], " have to be performed modulo ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], TraditionalForm]]], ". For instance" }], "Example", CellTags->"ExamAppB Add Mult"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{"1", " ", "+", " ", "x", " ", "+", " ", FormBox[ RowBox[{ RowBox[{ FormBox[ SuperscriptBox["x", "2"], TraditionalForm], ")"}], SuperscriptBox["x", "2"]}], TraditionalForm]}], "\[Congruent]", " ", FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], " ", "+", " ", SuperscriptBox["x", "4"]}], "\[Congruent]", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], RowBox[{"(", " ", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}]}], "+", "1"}]}], TraditionalForm], " ", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", FormBox[ RowBox[{ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}], TraditionalForm]}]}]}]}]}], TraditionalForm]]], ". " }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "Thus, ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]]], " is the multiplicative inverse of ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], TraditionalForm]]], " in the field ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "2"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}]}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ StyleBox["In", "MR", FontFamily->"Times New Roman"], StyleBox[" Mathematica one can find an irreducible polynomial over", "MR", FontFamily->"Times New Roman", FontSlant->"Italic"], StyleBox[" ", "MR", FontSlant->"Italic"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]], FontSlant->"Italic"], StyleBox[", ", FontSlant->"Italic"], Cell[BoxData[ FormBox["p", TraditionalForm]], FontSlant->"Italic"], StyleBox[" prime, with the function ", FontSlant->"Italic"], StyleBox["IrreduciblePolynomial", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], StyleBox[" ", "MR", FontSlant->"Italic"], StyleBox["for which the package ", "MR", FontFamily->"Times New Roman", FontSlant->"Italic"], StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontSlant->"Italic", FontVariations->{"Underline"->True}], StyleBox[" ", "MR", FontSlant->"Italic"], StyleBox["needs to be loaded first", "MR", FontFamily->"Times New Roman", FontSlant->"Italic"], StyleBox[".", "MR"] }], "Text", CellChangeTimes->{{3.4214707141224847`*^9, 3.4214707157006097`*^9}, { 3.4214708152631097`*^9, 3.4214708209037347`*^9}, 3.423374153482561*^9, { 3.423454936002329*^9, 3.423454939892929*^9}, {3.4234550533765783`*^9, 3.4234550555171895`*^9}}], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "3"}], ";", " ", RowBox[{"deg", "=", "11"}], ";", StyleBox[ RowBox[{"IrreduciblePolynomial", "[", RowBox[{"x", ",", "p", ",", "deg"}], "]"}], "MR"]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["x", "9"], "+", RowBox[{"2", " ", SuperscriptBox["x", "10"]}], "+", SuperscriptBox["x", "11"]}]], "Output"], Cell[TextData[{ "In ", StyleBox["Mathematica", FontSlant->"Italic"], " the field defined by the ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " of degree can be described by ", Cell[BoxData[ FormBox[ RowBox[{"GF", "[", RowBox[{"p", ",", " ", RowBox[{"{", RowBox[{ SubscriptBox["f", "0"], ",", " ", SubscriptBox["f", "1"], ",", " ", "\[Ellipsis]", " ", ",", " ", SubscriptBox["f", "m"]}], "}"}]}], "]"}], TraditionalForm]]], ". Addition, subtraction, multiplication, and division can be performed as \ follows:" }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"f32", "=", RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"f32", "[", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], "]"}], "+", RowBox[{"f32", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "1"}], "}"}], "]"}]}], "\n", RowBox[{ RowBox[{"f32", "[", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], "]"}], "-", RowBox[{"f32", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "1"}], "}"}], "]"}]}], "\n", RowBox[{ RowBox[{"f32", "[", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], "]"}], "*", RowBox[{"f32", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "1"}], "}"}], "]"}]}], "\n", RowBox[{ RowBox[{"f32", "[", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], "]"}], "/", RowBox[{"f32", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "1"}], "}"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0, 1}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 0, 0, 1}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {0, 0, 1, 0, 0}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 1, 0}[2]], Editable->False]], "Output"], Cell["or as follows:", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"f32", "=", RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"x", "=", RowBox[{"f32", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}], "]"}]}], ";"}], "\n", SuperscriptBox["x", "5"], "\n", RowBox[{ SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "10"]}], "\n", RowBox[{ SuperscriptBox["x", "16"], "*", SuperscriptBox["x", "16"]}], "\n", RowBox[{ SuperscriptBox["x", "25"], "/", SuperscriptBox["x", "22"]}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {1, 0, 1, 0, 0}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "1"}], "}"}], "2"], Subscripted[ {1, 1, 0, 1, 1}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 0, 0, 0}[2]], Editable->False]], "Output"], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 0, 0, 1, 0}[2]], Editable->False]], "Output"], Cell[TextData[{ "Two questions that arise naturally at this moment are:\n1) Does an \ irreducible, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " exist for every prime number ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and every integer ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "? If so, then we have proved the existence of finite fields ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " for all prime powers ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "\n2) Do other finite fields exist?" }], "Text"], Cell[TextData[{ "The first question gets an affirmative answer in the next section. The \ second question gets a negative answer in ", ButtonBox["Section B.4", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Field Struct"], "." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["B.3 \tThe Number of Irreducible Polynomials over GF(q)", "Section", CellTags->"SecAppB Numb Irr Pol"], Cell[TextData[{ "In this section we want to count the number of irreducible polynomials over \ a finite field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ". Clearly, if ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is irreducible, then so is ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", " ", RowBox[{"f", "(", "x", ")"}]}], TraditionalForm]]], ", for ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "\\", RowBox[{"{", "0", "}"}]}]}], TraditionalForm]]], ". Also the ideals (f(x)) and (\[Alpha] f(x)) are the same, when ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "\\", RowBox[{"{", "0", "}"}]}]}], TraditionalForm]]], ", therefore, we shall only count so-called ", StyleBox["monic", FontColor->RGBColor[0.996109, 0, 0]], " polynomials of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", i.e. polynomials, whose leading coefficient (the coefficient of ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "n"], TraditionalForm]]], ") is equal to 1." }], "Text", CellTags->"DefAppB monic"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\n\t", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.996109, 0, 0]], TraditionalForm]]], " = # ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "-ary, irreducible, monic polynomials of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ",\n\n\t", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"I", "(", "n", ")"}], FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.996109, 0, 0]], TraditionalForm]]], " =", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["I", "2"], "(", "n", ")"}], TraditionalForm]]], " = # binary, irreducible polynomials of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Definition", CellTags->"DefAppB Iq(n)"], Cell[TextData[{ "To develop some intuition for our counting problem, we start with a brute \ force attack for the special case that ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "2"}], TraditionalForm]]], ". We shall try therefore to determine ", Cell[BoxData[ FormBox[ RowBox[{"I", "(", "n", ")"}], TraditionalForm]]], "." }], "Text"], Cell["There are only two binary polynomials of degree 1, namely", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox["x", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"x", "+", "1"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "By definition, both are irreducible. Thus, ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{"I", "(", "1", ")"}], "=", "2"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0, 0.500008]], TraditionalForm]], FontColor->RGBColor[0.500008, 0.500008, 0]], ". " }], "Text"], Cell[TextData[{ "By taking all possible products of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"x", "+", "1"}], TraditionalForm]]], ", one finds three reducible polynomials of degree 2: " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "\[CenterDot]", "x"}], " ", "=", " ", SuperscriptBox["x", "2"]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"x", "\[CenterDot]", RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}]}], " ", "=", " ", RowBox[{ SuperscriptBox["x", "2"], "+", "x"}]}], ","}], " "}], TraditionalForm]]], "\tand\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "2"], " ", "=", " ", RowBox[{ SuperscriptBox["x", "2"], " ", "+", " ", "x"}]}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell[TextData[{ "Since there are ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "2"], "=", "4"}], TraditionalForm]]], " binary polynomials of degree 2, it follows that there exists only one \ irreducible\npolynomial of degree 2, namely " }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1."}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{"I", "(", "2", ")"}], "=", "1"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0, 0.500008]], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Each 3-rd degree, reducible, binary polynomial can be written as a product \ of the lower degree irreducible polynomials ", Cell[BoxData[ FormBox[ RowBox[{"x", ",", " ", RowBox[{"x", "+", "1"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1"}], TraditionalForm]]], ". In this way, one gets ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{ SuperscriptBox["x", "i"], "(", RowBox[{"x", "+", "1"}], ")"}], RowBox[{"3", "-", "i"}]], ","}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", "3"}], ","}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1"}], ")"}], "x"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1"}], ")"}], RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}]}], TraditionalForm]]], ".Since there are ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "3"], "=", "8"}], TraditionalForm]]], " binary polynomials of degree 3, we conclude that there are\n", Cell[BoxData[ FormBox[ RowBox[{"8", "-", "4", "-", "2"}], TraditionalForm]]], "=2 irreducible, binary polynomials of degree 3. So, ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{"I", "(", "3", ")"}], "=", "2"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0, 0.500008]], TraditionalForm]]], ". " }], "Text"], Cell["The two binary, irreducible polynomials of degree 3 are:", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "3"], "+", "x", "+", "1"}], TraditionalForm]]], " \tand \t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "2"], "+", "1"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["\<\ At this moment it is important to note that for the counting arguments above, \ we do not have to know the actual form of the lower degree, irreducible \ polynomials. We only have to know how many there are of a certain degree.\ \>", "Text"], Cell[TextData[{ "Indeed, to find ", Cell[BoxData[ FormBox[ RowBox[{"I", "(", "4", ")"}], TraditionalForm]]], " we can count the number of reducible, 4-th degree polynomials as follows:" }], "Text"], Cell[TextData[{ Cell[BoxData[ RowBox[{" ", GridBox[{ {" ", " ", " ", " ", "number"}, {"-", RowBox[{ RowBox[{"product", " ", "of", " ", "four", " ", "1"}], "-", RowBox[{"st", " ", "degree", " ", "polynomials", " "}]}], " ", " ", "5"}, {"-", RowBox[{ RowBox[{ RowBox[{"product", " ", "of", " ", "one", " ", "2"}], "-", RowBox[{"nd", " ", "degree", " ", "polynomial", " ", "and"}]}], "\n", "\t", RowBox[{ RowBox[{"two", " ", "1"}], "-", RowBox[{"st", " ", "degree", " ", "polynomials"}]}]}], RowBox[{"1", "x3"}], "=", "3"}, {"-", RowBox[{ RowBox[{"product", " ", "of", " ", "two", " ", "2"}], "-", RowBox[{"nd", " ", "degree", " ", "polynomials", " "}]}], " ", " ", "1"}, {"-", RowBox[{ RowBox[{ RowBox[{"product", " ", "of", " ", "one", " ", "3"}], "-", RowBox[{"rd", " ", "degree", " ", "polynomial", " ", "and"}]}], "\n", "\t ", RowBox[{ RowBox[{"one", " ", "1"}], "-", RowBox[{"st", " ", "degree", " ", "polynomial"}]}]}], RowBox[{"2", "x2"}], "=", "4"}, {" ", " ", "total", RowBox[{"=", " "}], "13"} }]}]]], "\n" }], "Text"], Cell[TextData[{ "It follows that there are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["2", "4"], "-", "13"}], "=", "3"}], TraditionalForm]]], " irreducible, binary polynomials of degree 4. So, ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{"I", "(", "4", ")"}], "=", "3"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0, 0.500008]], TraditionalForm]]], "." }], "Text"], Cell["\<\ With some additional work one can find these three irreducible, 4-th degree \ polynomials:\ \>", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "4"], "+", "x", "+", "1"}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", "1"}], ","}], " "}], TraditionalForm]]], "\tand\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "4"], " ", "+", " ", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "2"], "+", "x", "+", "1"}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell[TextData[{ "Continuing in this way one finds with the necessary perseverance and \ precision that ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{"I", "(", "5", ")"}], "=", "6"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0, 0.500008]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ RowBox[{"I", "(", "6", ")"}], "=", "9"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0, 0.500008]], TraditionalForm]]], ", etc.\nThe above method does not lead to a proof that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"I", "(", "n", ")"}], ">", "0"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], ", let alone to an approximation of the actual value of ", Cell[BoxData[ FormBox[ RowBox[{"I", "(", "n", ")"}], TraditionalForm]]], "." }], "Text"], Cell["We start all over again.", "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "i"], "(", "x", ")"}], ",", " ", RowBox[{"i", "=", "1"}], ",", "2", ",", "\[Ellipsis]", ","}], TraditionalForm]]], " be an enumeration of all ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "-ary, irreducible, monic polynomials, such that the degrees form a \ non-decreasing sequence. So, the first ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["I", "q"], "(", "1", ")"}], TraditionalForm]]], " polynomials have degree 1, the next ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["I", "q"], "(", "2", ")"}], TraditionalForm]]], " polynomials have degree 2, etc.." }], "Text"], Cell[TextData[{ "Any ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "-ary, monic polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " has a unique factorization of the form" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "\[Infinity]"], SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["p", "i"], "(", "x", ")"}], ")"}], SubscriptBox["e", "i"]]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["e", "i"], " ", "\[Element]", " ", "\[DoubleStruckCapitalN]"}], ",", " ", RowBox[{"i", "\[GreaterEqual]", "1"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "where only finitely many ", Cell[BoxData[ FormBox[ SubscriptBox["e", "i"], TraditionalForm]]], "'s are unequal to zero. It follows that ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " can uniquely be represented by the sequence ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["e", "1"], ",", " ", SubscriptBox["e", "2"], ",", " ", "\[Ellipsis]"}], " ", ")"}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], " be the degree of ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], "(x) and let ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be the degree of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ". Then" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["e", "1"], SubscriptBox["a", "1"]}], "+", RowBox[{ SubscriptBox["e", "2"], SubscriptBox["a", "2"]}], "+", "\[Ellipsis]"}], "=", RowBox[{"n", "."}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "So, the polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is in a unique correspondence with the term" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["z", SubscriptBox["a", "1"]], ")"}], SubscriptBox["e", "1"]], " ", SuperscriptBox[ RowBox[{"(", SuperscriptBox["z", SubscriptBox["a", "2"]], ")"}], SubscriptBox["e", "2"]], " ", "\[Ellipsis]"}], TraditionalForm]]]], "DisplayFormula"], Cell["in the expression", "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["z", SubscriptBox["a", "1"]], "+", SuperscriptBox["z", RowBox[{"2", SubscriptBox["a", "1"]}]], "+", "\[Ellipsis]"}], " ", ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["z", SubscriptBox["a", "2"]], "+", SuperscriptBox["z", RowBox[{"2", SubscriptBox["a", "2"]}]], "+", "\[Ellipsis]"}], " ", ")"}], "\[Ellipsis]"}], TraditionalForm]]]], "DisplayFormula"], Cell["i.e. in", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "\[Infinity]"], SuperscriptBox[ RowBox[{"(", RowBox[{"1", "-", SuperscriptBox["z", SubscriptBox["a", "i"]]}], ")"}], RowBox[{"-", "1"}]]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Since there are exactly ", Cell[BoxData[ FormBox[ SuperscriptBox["q", "n"], TraditionalForm]]], " ", Cell[BoxData[ FormBox["q", TraditionalForm]]], "-ary, monic polynomials of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", the above proves that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "\[Infinity]"], SuperscriptBox[ RowBox[{"(", RowBox[{"1", "-", SuperscriptBox["z", SubscriptBox["a", "i"]]}], ")"}], RowBox[{"-", "1"}]]}], " ", "=", " ", RowBox[{ RowBox[{"1", "+", RowBox[{"q", " ", "z"}], " ", "+", " ", RowBox[{ SuperscriptBox["q", "2"], SuperscriptBox["z", "2"]}], " ", "+", " ", "\[Ellipsis]"}], " ", "=", " ", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "-", RowBox[{"q", " ", "z"}]}], ")"}], RowBox[{"-", "1"}]]}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell["or equivalently", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "\[Infinity]"], RowBox[{"(", RowBox[{"1", "-", SuperscriptBox["z", SubscriptBox["a", "i"]]}], ")"}]}], " ", "=", " ", RowBox[{"(", RowBox[{"1", "-", RowBox[{"q", " ", "z"}]}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "From our particular ordering we know that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "=", "k"}], TraditionalForm]]], " for exactly ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["I", "q"], "(", "k", ")"}], TraditionalForm]]], "values of ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", thus, the above relation can be rewritten as:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "\[Infinity]"], SuperscriptBox[ RowBox[{"(", RowBox[{"1", "-", SuperscriptBox["z", "k"]}], ")"}], RowBox[{ SubscriptBox["I", "q"], "(", "k", ")"}]]}], " ", "=", " ", RowBox[{"(", RowBox[{"1", "-", RowBox[{"q", " ", "z"}]}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["\<\ Now take the logarithm of both sides and differentiate the outcome. One \ obtains:\ \>", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"q", "(", RowBox[{"1", "-", RowBox[{"q", " ", "z"}]}], ")"}], RowBox[{"-", "1"}]], " ", "=", " ", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"k", "=", "1"}], "\[Infinity]"], RowBox[{"k", " ", RowBox[{ SubscriptBox["I", "q"], "(", "k", ")"}], " ", SuperscriptBox[ RowBox[{ SuperscriptBox["z", RowBox[{"k", "-", "1"}]], "(", RowBox[{"1", "-", SuperscriptBox["z", "k"]}], ")"}], RowBox[{"-", "1"}]]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Multiplying both sides with ", Cell[BoxData[ FormBox["z", TraditionalForm]]], " yields" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"n", "=", "1"}], "\[Infinity]"], RowBox[{ SuperscriptBox["q", "n"], SuperscriptBox["z", RowBox[{"n", " "}]]}]}], "=", " ", RowBox[{ RowBox[{"q", " ", SuperscriptBox[ RowBox[{"z", "(", RowBox[{"1", "-", RowBox[{"q", " ", "z"}]}], ")"}], RowBox[{"-", "1"}]]}], " ", "=", " ", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"k", "=", "1"}], "\[Infinity]"], RowBox[{"k", " ", RowBox[{ SubscriptBox["I", "q"], "(", "z", ")"}], " ", SuperscriptBox[ RowBox[{ SuperscriptBox["z", "k"], "(", RowBox[{"1", "-", SuperscriptBox["z", "k"]}], ")"}], RowBox[{ RowBox[{"-", "1"}], " "}]]}]}], "=", " "}]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"=", " ", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"k", "=", "1"}], "\[Infinity]"], RowBox[{"k", " ", RowBox[{ SubscriptBox["I", "q"], "(", "k", ")"}], " ", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "1"}], "\[Infinity]"], SuperscriptBox["z", "kl"]}]}]}], " ", "=", " ", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"n", "=", "1"}], "\[Infinity]"], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"k", "|", "n"}]], " ", RowBox[{"k", " ", RowBox[{ SubscriptBox["I", "q"], "(", "k", ")"}], " ", SuperscriptBox["z", "n"]}]}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Comparing the coefficients of ", Cell[BoxData[ FormBox["z", TraditionalForm]]], " on both sides gives the relation" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"k", "|", "n"}]], " ", RowBox[{"k", " ", RowBox[{ SubscriptBox["I", "q"], "(", "k", ")"}]}]}], " ", "=", " ", SuperscriptBox["q", "n"]}], TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppB Sum Irred"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], " ", "=", " ", RowBox[{ FractionBox["1", "n"], " ", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], " ", RowBox[{"\[Mu]", "(", "d", ")"}]}]}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ SuperscriptBox["q", RowBox[{"n", "/", "d"}]], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppB Ip(m)="], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Apply the ", ButtonBox["M\[ODoubleDot]bius Inversion Formula", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Moebius Inv"], " (Thm. A.38) to ", ButtonBox["(B.5)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Sum Irred"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "We can evaluate ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], TraditionalForm]]], " quite easily in ", StyleBox["Mathematica ", FontSlant->"Italic"], "(see ", StyleBox["MoebiusMu", FontVariations->{"Underline"->True}], ") we need a new function" }], "Text", CellChangeTimes->{{3.423475144624586*^9, 3.4234751459058437`*^9}, { 3.4234758686604695`*^9, 3.423475889191851*^9}, {3.423475926176463*^9, 3.423475955348524*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"DivisorSum", "[", RowBox[{"f_", ",", "n_"}], "]"}], ":=", " ", RowBox[{"Plus", " ", "@@", " ", RowBox[{"(", RowBox[{"f", " ", "/@", " ", RowBox[{"Divisors", "[", "n", "]"}]}], ")"}]}]}]], "Input"], Cell[TextData[{ "which evaluates the sum of function values ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " over all divisors of an integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Text", CellChangeTimes->{{3.423475975192402*^9, 3.4234760045363393`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"q", "=", "2"}], ";", RowBox[{"m", "=", "4"}], ";", RowBox[{ RowBox[{"DSM", "[", "d_", "]"}], "=", RowBox[{ RowBox[{"MoebiusMu", "[", "d", "]"}], "*", " ", SuperscriptBox["q", RowBox[{"m", "/", "d"}]]}]}], ";"}], "\n", RowBox[{ RowBox[{"(", RowBox[{"DivisorSum", "[", RowBox[{"DSM", ",", " ", "m"}], "]"}], ")"}], "/", "m"}]}], "Input", GeneratedCell->True], Cell[BoxData["3"], "Output"], Cell[TextData[{ "It is now quite easy to determine the asymptotic behavior of ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], TraditionalForm]]], " and to prove that its value is always positive." }], "Text"], Cell[TextData[{ "First of all, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", "q"], "(", "1", ")"}], "=", "q"}], TraditionalForm]]], ", since all monic, polynomials of degree one are irreducible by \ definition. It follows from ", ButtonBox["(B.5)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Sum Irred"], " that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"q", "+", RowBox[{"n", " ", RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}]}]}], " ", "\[LessEqual]", " ", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"k", "|", "n"}]], RowBox[{"k", " ", RowBox[{ SubscriptBox["I", "q"], "(", "k", ")"}]}]}]}], " ", "=", " ", SuperscriptBox["q", "n"]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["Hence", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], " ", "\[LessEqual]", " ", FractionBox[ RowBox[{ SuperscriptBox["q", "n"], "-", "q"}], "n"]}], TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppB Iq(n)<="], Cell[TextData[{ "On the other hand ", ButtonBox["(B.5)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Sum Irred"], " and ", ButtonBox["(B.6)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Iq(n)<="], " imply that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "n"], " ", "=", " ", RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"k", "|", "n"}]], RowBox[{"k", " ", RowBox[{ SubscriptBox["I", "q"], "(", "k", ")"}]}]}], " ", "\[LessEqual]", " ", RowBox[{ RowBox[{"n", " ", RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}]}], " ", "+", " ", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"k", "=", "0"}], RowBox[{"\[LeftFloor]", RowBox[{"n", "/", "2"}], "\[RightFloor]"}]], SuperscriptBox["q", "k"]}]}], " ", "<", " ", RowBox[{ RowBox[{"n", " ", RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}]}], " ", "+", " ", SuperscriptBox["q", RowBox[{"1", "+", RowBox[{"n", "/", "2"}]}]]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Together with ", ButtonBox["(B.6)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Iq(n)<="], " this proves the first statement in the following theorem." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nFor all ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " the number ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], TraditionalForm]]], " of monic, irreducible, ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-th degree polynomials in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "[", "x", "]"}], TraditionalForm]]], " satisfies\n\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FractionBox[ SuperscriptBox["q", "n"], "n"], RowBox[{"(", RowBox[{"1", "-", FractionBox["1", SuperscriptBox["q", RowBox[{ RowBox[{"n", "/", "2"}], "-", "1"}]]]}], ")"}]}], " ", "\[LessEqual]", " ", RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], " ", "\[LessEqual]", " ", RowBox[{ FractionBox[ SuperscriptBox["q", "n"], "n"], RowBox[{"(", RowBox[{"1", "-", FractionBox["1", SuperscriptBox["q", RowBox[{"n", "-", "1"}]]]}], ")"}]}]}], TraditionalForm]]], ",\nand\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], ">", "0."}], TraditionalForm]]] }], "Theorem", CellTags->"TheoAppB Iq(n)>0"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": That ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], " ", ">", " ", "0"}], TraditionalForm]]], " follows directly for ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[GreaterEqual]", "3"}], TraditionalForm]]], ". For ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "1"}], TraditionalForm]]], " and 2, this follows from ", ButtonBox["Theorem B.17", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Ip(m)="], ", but also directly from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", "q"], "(", "1", ")"}], "=", RowBox[{"q", ">", "0"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", "q"], "(", "2", ")"}], " ", "=", RowBox[{ RowBox[{ SuperscriptBox["q", RowBox[{"2", " \[NegativeThinSpace]"}]], "-", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ { RowBox[{"q", "+", "1"}]}, {"2"} }], "\[NegativeThinSpace]", ")"}]}], "=", " ", RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"q"}, {"2"} }], "\[NegativeThinSpace]", ")"}], " ", ">", "0."}]}]}], TraditionalForm]]], " as one can easily prove directly." }], "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["Corollary B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], " ", "\[TildeTilde]", " ", FractionBox[ SuperscriptBox["q", "n"], "n"]}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppB Iq(n)~~"], Cell[TextData[{ "The reader may want to verify this approximation for some particular cases \ with the following ", StyleBox["Mathematica", FontSlant->"Italic"], " input:" }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"q", "=", "2"}], ";", RowBox[{"m", "=", "100"}], ";", RowBox[{ RowBox[{"DSM", "[", "d_", "]"}], "=", RowBox[{ RowBox[{"MoebiusMu", "[", "d", "]"}], "*", " ", SuperscriptBox["q", RowBox[{"m", "/", "d"}]]}]}], ";"}], "\n", RowBox[{"N", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"DivisorSum", "[", RowBox[{"DSM", ",", " ", "m"}], "]"}], ")"}], "/", SuperscriptBox["q", "m"]}], ",", "40"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["0.999999999999999111821579473501948675013306744676668`40"], \ "Output"], Cell[TextData[{ "It follows from this corollary that a randomly selected, monic polynomial \ of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is irreducible with a probability of about ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "n"}], TraditionalForm]]], ". With the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Factor", FontVariations->{"Underline"->True}], " one can easily check if a particular polynomial is irreducible or not." }], "Text", CellChangeTimes->{{3.423454716988106*^9, 3.4234547185818458`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Factor", "[", RowBox[{ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["B.4\tThe Structure of Finite Fields", "Section", CellTags->"SecAppB Field Struct"], Cell[CellGroupData[{ Cell[TextData[{ "B.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Cyclic Structure of a Finite Field" }], "Subsection", CellTags->"SubsAppB cyclic structure"], Cell[TextData[{ "It follows from ", ButtonBox["Theorem B.11", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field iff Prime"], ", ", ButtonBox["Theorem B.16", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field Iff Irred"], " and ", ButtonBox["Theorem B.18", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Iq(n)>0"], ", that finite fields ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " exist for all prime powers ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". If ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is a prime number ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " can be represented by the integers modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". If ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is a power of a prime, say ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], "can be represented by ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomials modulo an irreducible polynomial of degree ", Cell[BoxData[ FormBox[ RowBox[{"m", "."}], TraditionalForm]]], " We state the above as a theorem." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be a prime and ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[GreaterEqual]", "1."}], TraditionalForm]]], "Then a finite field of order ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " exists." }], "Theorem", CellTags->"TheoAppB Field For p^m"], Cell[TextData[{ "Later in this section we shall see that every finite field can be described \ by the construction of ", ButtonBox["Theorem B.16", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field Iff Irred"], ". But first we shall prove an extremely nice property of finite fields, \ namely that their multiplicative group is cyclic! By ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ", we know that every non-zero element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " has a multiplicative order dividing ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nAn element ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], " in a finite field of order ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is called an ", Cell[BoxData[ FormBox["n", TraditionalForm]], FontColor->RGBColor[0.996109, 0, 0]], StyleBox["-th root of unity", FontColor->RGBColor[0.996109, 0, 0]], " if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "n"], "=", "e"}], TraditionalForm]]], ". \nAn element ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], " is called a ", StyleBox["primitive ", FontColor->RGBColor[0.996109, 0, 0]], Cell[BoxData[ FormBox["n", TraditionalForm]], FontColor->RGBColor[0.996109, 0, 0]], StyleBox["-th root of unity", FontColor->RGBColor[0.996109, 0, 0]], " if it has order ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". \nIf ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], " is a primitive ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], TraditionalForm]]], "-st root of unity, then ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], " is called a ", StyleBox["primitive element", FontColor->RGBColor[0.996109, 0, 0]], " or ", StyleBox["generator", FontColor->RGBColor[0.996109, 0, 0]], " of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppB Prim El"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], "be a finite field and let ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " be an integer dividing ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1."}], TraditionalForm]]], " Then ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " contains exactly ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "d", ")"}], TraditionalForm]]], " elements of order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ". \nIn particular, ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "\\", RowBox[{"{", "0", "}"}]}], ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " is a cyclic group of order ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], ", which contains ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", RowBox[{"q", "-", "1"}], ")"}], TraditionalForm]]], " primitive elements." }], "Theorem", CellTags->"TheoAppB Cyclic Struc"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": By ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ", every non-zero element in ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " has a multiplicative order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ", which divides ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1."}], TraditionalForm]]], " On the other hand, suppose that ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " contains an element of order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], ", say ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], ". Then all ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " distinct powers of \[Omega] are a zero of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "d"], "-", "e"}], TraditionalForm]]], ". It follows from ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], " that every ", Cell[BoxData[ FormBox["d", TraditionalForm]]], "-th root of unity in ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " is a power of ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], ". It follows from ", ButtonBox["Lemma B.4", BaseStyle->"Hyperlink", ButtonData:>"LemAppB Order a^k"], " that under the assumption that ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " contains an element of order d, ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], "will contain exactly ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "d", ")"}], TraditionalForm]]], " elements of order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ", namely ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Omega]", "i"], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["GCD", FontVariations->{"Underline"->True}], "[", RowBox[{"i", ",", "d"}], "]"}], "=", "1"}], TraditionalForm]]], "." }], "Text", CellChangeTimes->{{3.423396936438574*^9, 3.423396936438574*^9}}, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"a", "(", "d", ")"}], TraditionalForm]]], " be the number of elements of order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], ". Then the above implies that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "i)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "(", "d", ")"}], "=", "0"}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "(", "d", ")"}], "=", RowBox[{"\[Phi]", "(", "d", ")"}]}], TraditionalForm]]] }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["and also that ", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "ii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]], " ", RowBox[{"a", "(", "d", ")"}]}], " ", "=", " ", RowBox[{"q", "-", "1."}]}], TraditionalForm]]], " " }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "On the other hand, ", ButtonBox["Theorem A.12", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Sum Phi=n"], " states that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]], " ", RowBox[{"\[Phi]", "(", "d", ")"}]}], " ", "=", " ", RowBox[{"q", "-", "1."}]}], TraditionalForm]]], " So, we conclude that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "(", "d", ")"}], "=", RowBox[{"\[Phi]", "(", "d", ")"}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], ".\nIn particular, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "(", RowBox[{"q", "-", "1"}], ")"}], "=", RowBox[{"\[Phi]", "(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], "which means that ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], "contains ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", RowBox[{"q", "-", "1"}], ")"}], TraditionalForm]]], " primitive elements and that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "\\", RowBox[{"{", "0", "}"}]}], TraditionalForm]]], " is a cyclic group." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "To check if a particular element \[Omega] in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " has order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], ", it suffices to check that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "d"], "=", "1"}], TraditionalForm]]], " and that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", RowBox[{"d", "/", "p"}]], "\[NotEqual]", "1"}], TraditionalForm]]], "for every prime divisor of ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ". See also the discussion below ", ButtonBox["Lemma B.3", BaseStyle->"Hyperlink", ButtonData:>"LemAppB Order Divides n"], "." }], "Text"], Cell[TextData[{ "To find a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime, the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PowerList", FontVariations->{"Underline"->True}], " can be used. It finds a primitive element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], " and generates all its powers (starting with the 0-th). The second element \ in this list is the primitive element itself. First, the package ", StyleBox["FiniteFields", "MR", FontFamily->"Times New Roman", FontVariations->{"Underline"->True}], " needs to be loaded." }], "Text", CellChangeTimes->{{3.423454967736501*^9, 3.4234549706427326`*^9}, { 3.4234814530862045`*^9, 3.423481456929905*^9}}], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "17"}], ";", " ", RowBox[{"PrimeQ", "[", "p", "]"}]}], "\n", RowBox[{ RowBox[{"PowerList", "[", RowBox[{"GF", "[", RowBox[{"p", ",", "1"}], "]"}], "]"}], "[", RowBox[{"[", "2", "]"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output", CellChangeTimes->{3.423374456409503*^9}], Cell[BoxData[ RowBox[{"{", "3", "}"}]], "Output", CellChangeTimes->{3.423374456503324*^9}] }, Open ]], Cell[TextData[{ ButtonBox["Problems B.6", BaseStyle->"Hyperlink", ButtonData:>"ProbAppB order axb"], " and ", ButtonBox["B.10", BaseStyle->"Hyperlink", ButtonData:>"ProbAppB Gauss"], " indicate an efficient way (due to Gauss) to find a primitive element in a \ finite field." }], "Text"], Cell[TextData[{ StyleBox["Corollary B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nEvery element ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " satisfies\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", SuperscriptBox["q", "n"]], "=", "\[Omega]"}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"n", "\[GreaterEqual]", "1"}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppB a^q^n=a"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": For ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", "0"}], TraditionalForm]]], " the statement is trivially true. By ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], " or ", ButtonBox["Theorem B.21", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Cyclic Struc"], ", any ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "\[NotEqual]", "0"}], TraditionalForm]]], ", has an order dividing ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], ". So, it satisfies ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", RowBox[{"q", "-", "1"}]], "=", "e"}], TraditionalForm]]], " and thus also ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "q"], "=", "\[Omega]"}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", SuperscriptBox["q", "n"]], "=", SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Omega]", "q"], ")"}], SuperscriptBox["q", RowBox[{"n", "-", "1"}]]]}], TraditionalForm]]], ", the proof now follows with an easy induction 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[{ StyleBox["Corollary B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " be a finite field. Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "q"], "-", "x"}], "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{"\[Omega]", "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "q"]}]], RowBox[{"(", RowBox[{"x", "-", "\[Omega]"}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppB a in F iff a^q=a"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Every element ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm], TraditionalForm]]], " is a zero of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "q"], "-", "x"}], TraditionalForm]]], " by ", ButtonBox["Corollary B.22", BaseStyle->"Hyperlink", ButtonData:>"CorAppB a^q^n=a"], ", therefore, the right hand side above divides the left hand side. Equality \ now follows because the expressions on both sides are monic and of the same \ degree." }], "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["Corollary B.23", BaseStyle->"Hyperlink", ButtonData:>"CorAppB a in F iff a^q=a"], " will be used later as a tool to check if a certain element in fields \ containing ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " is actually in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " itself." }], "Text"], Cell[TextData[{ StyleBox["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider the finite field ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{ FormBox[ RowBox[{"(", SubscriptBox["\[DoubleStruckCapitalF]", "2"]}], TraditionalForm], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "2"], "+", "x", "+", "1"}]}], TraditionalForm]]], ". It contains ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "4"], "=", "16"}], TraditionalForm]]], " elements, which can be represented by binary polynomials of degree <4. The \ element ", Cell[BoxData[ FormBox["x", TraditionalForm]]], ", representing the class ", Cell[BoxData[ FormBox[ RowBox[{"<", "x", ">"}], TraditionalForm]]], ", is not a primitive element, since ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "5"], "\[Congruent]", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], RowBox[{"f", "(", "x", ")"}]}], "+", "1"}], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}], TraditionalForm]]], ". So ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " has order 5 instead of 15. With ", StyleBox["Mathematica", FontSlant->"Italic"], " this can be checked as follows:" }], "Example", CellTags->"ExamAppB 16 min pol"], Cell[BoxData[{ RowBox[{ RowBox[{"f", "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]}], ";"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "2"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "3"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "4"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", "5"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ SuperscriptBox["x", "2"]], "Output"], Cell[BoxData[ SuperscriptBox["x", "3"]], "Output"], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}]], "Output"], Cell[BoxData["1"], "Output"], Cell[TextData[{ "The element ", Cell[BoxData[ FormBox[ RowBox[{"x", "+", "1"}], TraditionalForm]]], " is primitive element (its order is 15), as one can see in ", ButtonBox["Table B.1", BaseStyle->"Hyperlink", ButtonData:>"TableAppB F16-1"], ". It is also easy to verify. Indeed, ", Cell[BoxData[ FormBox[ RowBox[{"x", "+", "1"}], TraditionalForm]]], " has an order dividing 15. So, one only has to check that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], TraditionalForm]]], " raised to the power 3 or 5 does not reduce to 1 modulo ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[{ RowBox[{ RowBox[{"f", ":=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]}], ";"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "3"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "5"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "15"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}]], "Output"], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}]], "Output"], Cell[BoxData["1"], "Output"], Cell[TextData[{ " Multiplication is easy to perform with ", ButtonBox["Table B.1", BaseStyle->"Hyperlink", ButtonData:>"TableAppB F16-1"], ". For instance" }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}], ")"}], RowBox[{"(", RowBox[{"x", "+", SuperscriptBox["x", "3"]}], ")"}]}], " ", "\[Congruent]", " ", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "3"], SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "14"]}], " ", "\[Congruent]"}], TraditionalForm]]], "\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "17"], "\[Congruent]", SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "2"], "\[Congruent]", RowBox[{ SuperscriptBox["x", "2"], "+", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "The element ", Cell[BoxData[ FormBox[ RowBox[{"x", "+", "1"}], TraditionalForm]]], " is a zero of the irreducible polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "4"], "+", SuperscriptBox["y", "3"], "+", "1"}], TraditionalForm]]], " since" }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "4"], "+", SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "3"], "+", "1"}], " ", "\[Congruent]", " ", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"f", ":=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]}], ";"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "4"], "+", SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "1"}], ")"}], "3"], "+", "1"}], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["0"], "Output"], Cell[TextData[{ "Therefore, in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "2"], TraditionalForm], TraditionalForm], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ RowBox[{"g", "(", "x", ")"}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}]}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"g", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", "1"}]}], TraditionalForm]]], ", the element ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is a primitive element. See ", ButtonBox["Table B.2", BaseStyle->"Hyperlink", ButtonData:>"TableAppB F16-2"], "." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[GridBox[{ {" ", RowBox[{" ", "1", " "}], RowBox[{" ", "x", " "}], RowBox[{" ", SuperscriptBox["x", "2"]}], RowBox[{" ", SuperscriptBox["x", "3"]}]}, {"0", "0", "0", "0", "0"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "0"], "1", "0", "0", "0"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "1"], "1", "1", "0", "0"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "2"], "1", "0", "1", "0"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "3"], "1", "1", "1", "1"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "4"], "0", "1", "1", "1"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "5"], "1", "0", "1", "1"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "6"], "0", "0", "0", "1"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "7"], "1", "1", "1", "0"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "8"], "1", "0", "0", "1"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "9"], "0", "0", "1", "0"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "10"], "0", "0", "1", "1"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "11"], "1", "1", "0", "1"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "12"], "0", "1", "0", "0"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "13"], "0", "1", "1", "0"}, { SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], "14"], "0", "1", "0", "1"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "Text", PageBreakBelow->False, TextAlignment->Center, TextJustification->0, CellTags->"TableAppB F16-1"], Cell[TextData[{ "Table B.1\t", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "2"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}]}], ",", RowBox[{"+", " ", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " with primitive element ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "x"}], TraditionalForm]]], "." }], "Text", PageBreakAbove->False, TextAlignment->Center, TextJustification->0], Cell[BoxData[GridBox[{ {" ", RowBox[{" ", "1", " "}], RowBox[{" ", "x", " "}], RowBox[{" ", SuperscriptBox["x", "2"]}], RowBox[{" ", SuperscriptBox["x", "3"]}]}, {"0", "0", "0", "0", "0"}, {"1", "1", "0", "0", "0"}, {"x", "0", "1", "0", "0"}, { SuperscriptBox["x", "2"], "0", "0", "1", "0"}, { SuperscriptBox["x", "3"], "0", "0", "0", "1"}, { SuperscriptBox["x", "4"], "1", "0", "0", "1"}, { SuperscriptBox["x", "5"], "1", "1", "0", "1"}, { SuperscriptBox["x", "6"], "1", "1", "1", "1"}, { SuperscriptBox["x", "7"], "1", "1", "1", "0"}, { SuperscriptBox["x", "8"], "0", "1", "1", "1"}, { SuperscriptBox["x", "9"], "1", "0", "1", "0"}, { SuperscriptBox["x", "10"], "0", "1", "0", "1"}, { SuperscriptBox["x", "11"], "1", "0", "1", "1"}, { SuperscriptBox["x", "12"], "1", "1", "0", "0"}, { SuperscriptBox["x", "13"], "0", "1", "1", "0"}, { SuperscriptBox["x", "14"], "0", "0", "1", "1"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "Text", PageBreakBelow->False, TextAlignment->Center, TextJustification->0, CellTags->"TableAppB F16-2"], Cell[BoxData[ FormBox[ RowBox[{"Table", " ", "B", ".2", "\t", FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "2"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}]}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], ")"}], TraditionalForm], " ", "with", " ", "primitive", " ", "element", " ", FormBox["x", TraditionalForm]}], TraditionalForm]], "Text", PageBreakAbove->False, TextAlignment->Center, TextJustification->0] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "B.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Cardinality of a Finite Field" }], "Subsection", CellTags->"SubsAppB cardinality"], Cell[TextData[{ "Consider the elements ", Cell[BoxData[ FormBox[ RowBox[{"e", ",", " ", RowBox[{"2", "e"}], ",", " ", RowBox[{"3", "e"}], ","}], TraditionalForm]]], " etc. in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " is finite, not all these elements can be different. Also, if ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", " ", "e"}], "=", " ", RowBox[{"j", " ", "e"}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"i", "<", "j"}], TraditionalForm]]], ", also ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"j", "-", "i"}], ")"}], "e"}], "=", "0"}], TraditionalForm]]], ".These observations justify the following definition." }], "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nThe ", StyleBox["characteristic", FontColor->RGBColor[0.996109, 0, 0]], " of a finite field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " with unit-element ", Cell[BoxData[ FormBox["e", TraditionalForm]]], ", is the smallest positive integer ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", " ", "e"}], " ", "=", "0"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppB characteristic"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe characteristic of a finite field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " is a prime." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Suppose that the characteristic ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " can be written as ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "'"}], " ", RowBox[{ RowBox[{"c", "'"}], "'"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "'"}], ">", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"c", "'"}], "'"}], ">", "1"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{"0", "=", RowBox[{ RowBox[{"c", " ", "e"}], "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"c", "'"}], "e"}], ")"}], RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"c", "'"}], "'"}], "e"}], ")"}]}]}]}], TraditionalForm]]], ", while ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "'"}], "\[NotEqual]", "0"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"c", "'"}], "'"}], "e"}], "\[NotEqual]", "0"}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", "'"}], "e"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"c", "'"}], "'"}], "e"}], TraditionalForm]]], " are zero-divisors. This contradicts the assumption that ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " is a field." }], "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["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nTwo finite fields ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], ",", RowBox[{"+", RowBox[{",", "\[Times]"}]}]}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", RowBox[{"q", "'"}]], ",", RowBox[{"\[CirclePlus]", RowBox[{",", "\[CircleTimes]"}]}]}], ")"}], TraditionalForm]]], " are said to be ", StyleBox["isomorphic", FontColor->RGBColor[0.996109, 0, 0]], ", if there exists a one-to-one mapping \[Psi] from ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " onto ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", RowBox[{"q", "'"}]], TraditionalForm]]], " (so ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", RowBox[{"q", "'"}]}], TraditionalForm]]], "), such that for all ", Cell[BoxData[ FormBox[ SubscriptBox["\[Omega]", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["\[Omega]", "2"], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ":\ni)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Psi]", "(", RowBox[{ SubscriptBox["\[Omega]", "1"], "+", SubscriptBox["\[Omega]", "2"]}], ")"}], " ", "=", " ", RowBox[{ RowBox[{"\[Psi]", "(", SubscriptBox["\[Omega]", "1"], ")"}], "\[CirclePlus]", RowBox[{"\[Psi]", "(", SubscriptBox["\[Omega]", "2"], ")"}]}]}], TraditionalForm]]], ",\nii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Psi]", "(", RowBox[{ SubscriptBox["\[Omega]", "1"], "\[Times]", SubscriptBox["\[Omega]", "2"]}], ")"}], " ", "=", " ", RowBox[{ RowBox[{"\[Psi]", "(", SubscriptBox["\[Omega]", "1"], ")"}], "\[CircleTimes]", RowBox[{"\[Psi]", "(", SubscriptBox["\[Omega]", "2"], ")"}]}]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppB isomorphic"], Cell["\<\ In words, two fields are isomorphic if after renaming the elements in them \ they behave exactly the same with respect to the operations addition and \ multiplication.\ \>", "Text"], Cell[TextData[{ StyleBox["Lemma B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " be a finite field with characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "+"}], ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " contains a subfield which is isomorphic to ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], ",", RowBox[{"+", ","}]}], " ", ")"}], TraditionalForm]]], ", i.e. to the integers modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The subset ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ RowBox[{"i", " ", "e"}], "|", " ", "i"}], "=", "0"}], ",", "1", ",", "\[Ellipsis]", ",", RowBox[{"p", "-", "1"}]}], "}"}], TraditionalForm]]], " forms a subfield of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " which is isomorphic to ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " under the isomorphism ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Psi]", "(", RowBox[{"i", " ", "e"}], ")"}], "=", "i"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "<", "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[{ "In view of the lemma above, we can and shall from now on identify the \ subfield in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " of order ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " with the field ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ". The subfield ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " is often called the ", StyleBox["ground field", FontColor->RGBColor[0.996109, 0, 0]], " of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ". Conversely, the field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " is called an ", StyleBox["extension field", FontColor->RGBColor[0.996109, 0, 0]], " of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], "." }], "Text", CellTags->"DefAppB ext field"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " be a finite field of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " can be viewed as a vectorspace over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], " for some integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[GreaterEqual]", "1"}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["u", RowBox[{"1", ","}]], SubscriptBox["u", "2"]}], ",", " ", "\[Ellipsis]", ",", " ", SubscriptBox["u", "m"]}], TraditionalForm]]], "be a ", ButtonBox["basis", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Basis"], " of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], "over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ", i.e. every element \[Omega] in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " can be written as" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\[Omega] = ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["a", "1"], SubscriptBox["u", "1"]}], "+", " ", RowBox[{ SubscriptBox["a", "2"], SubscriptBox["u", "2"]}], "+", " ", "\[Ellipsis]", " ", "+", RowBox[{ SubscriptBox["a", "m"], SubscriptBox["u", "m"]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "i"], "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "p"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], ", and there is no ", ButtonBox["dependency", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear Dep"], " of the field elements ", Cell[BoxData[ FormBox[ SubscriptBox["u", "i"], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ". It follows that this representation is unique and thus ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", RowBox[{ RowBox[{ SubscriptBox[ RowBox[{"(", RowBox[{"|", "\[DoubleStruckCapitalF]"}], ")"}], "q"], "|"}], "=", SuperscriptBox["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[{ "At this moment we know that finite fields ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " can only exist for prime powers ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". ", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"Theorem", " ", "B", ".20"}], BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field For p^m"], TraditionalForm]]], " states that ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " indeed does exist for prime powers ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ". That all finite fields with the same value of ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " are isomorphic to each other will be proved later." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "B.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tSome Calculus Rules over Finite Fields; Conjugates" }], "Subsection", CellTags->"SubsAppB calculus rules"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet \[Omega] be an element in a finite field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Then in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "[", "x", "]"}], TraditionalForm]]], "\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "\[Omega]"}], ")"}], "p"], "=", RowBox[{ SuperscriptBox["x", "p"], "-", SuperscriptBox["\[Omega]", "p"]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppB (x-a)^p="], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ RowBox[{"0", "<", "i", "<", "p"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"p", ",", RowBox[{"i", "!"}]}], ")"}], "=", "1"}], TraditionalForm]]], ", so" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"p"}, {"i"} }], "\[NegativeThinSpace]", ")"}], " ", "\[Congruent]", " ", FractionBox[ RowBox[{ RowBox[{"p", "(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"\[Ellipsis]", "(", RowBox[{"p", "-", "i", "+", "1"}], ")"}]}], RowBox[{"i", "!"}]], " ", "\[Congruent]", " ", RowBox[{"0", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["and with the binomial theorem, we have that ", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "\[Omega]"}], ")"}], "p"], " ", "=", " ", RowBox[{ RowBox[{ SuperscriptBox["x", "p"], "+", SuperscriptBox[ RowBox[{"(", RowBox[{"-", "\[Omega]"}], ")"}], "p"]}], " ", "=", " ", RowBox[{ SuperscriptBox["x", "p"], "-", RowBox[{ SuperscriptBox["\[Omega]", "p"], "."}]}]}]}], TraditionalForm]]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "where the last equality is obvious for odd ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", while for ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]]], " this equality follows from ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"+", "1"}], "=", RowBox[{"-", "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[{ "To demonstrate this we use again the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], "." }], "Text", CellChangeTimes->{3.423394669892818*^9}], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", RowBox[{"a", ",", "x"}], "]"}], ";"}], "\n", RowBox[{ RowBox[{"p", "=", "2"}], ";", RowBox[{"m", "=", "3"}], ";"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", "a"}], ")"}], SuperscriptBox["p", "m"]], ",", "p"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{ SuperscriptBox["a", "8"], "+", SuperscriptBox["x", "8"]}]], "Output"], Cell[TextData[{ StyleBox["Corollary B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], ", be elements in a finite field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Then for every ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["a", "i"]}], ")"}], SuperscriptBox["p", "n"]], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "k"], SubsuperscriptBox["a", "i", SuperscriptBox["p", "n"]]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppB Sum a_i^p="], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=."}], ";", RowBox[{"b", "=."}], ";", RowBox[{"c", "=."}]}], "\n", RowBox[{ RowBox[{"p", "=", "3"}], ";", RowBox[{"m", "=", "3"}], ";", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"a", "+", "b", "+", "c"}], ")"}], SuperscriptBox["p", "m"]], ",", "p"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{ SuperscriptBox["a", "27"], "+", SuperscriptBox["b", "27"], "+", SuperscriptBox["c", "27"]}]], "Output"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Use an induction argument on ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " and on ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". Start with", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["a", "1"], "+", SubscriptBox["a", "2"]}], ")"}], "p"], "=", " ", RowBox[{ SubsuperscriptBox["a", "1", "p"], "+", SubsuperscriptBox["a", "2", "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 following theorem often gives a powerful criterion to determine, \ whether an element in a field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", actually lies in the ground field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " be a finite field of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"m", ">", "0"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " contains ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " as a subfield. Let \[Omega] be an element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ". Then \n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "p"]}], TraditionalForm]]], "\t\[DoubleLongLeftRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "p"], "=", "\[Omega]"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppB Is In F?"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " elements in the subfield ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " satisfy ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "p"], "=", "x"}], TraditionalForm]]], " by ", ButtonBox["Corollary B.23", BaseStyle->"Hyperlink", ButtonData:>"CorAppB a in F iff a^q=a"], ". On the other hand, the polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "p"], "-", "x"}], TraditionalForm]]], " has at most ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " zeros in ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " by ", ButtonBox["Theorem B.15.", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"] }], "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 \[Omega] be an element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ", a field of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", but ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], " not in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", "p"], "\[NotEqual]", "\[Omega]"}], TraditionalForm]]], " by the previous theorem. Still there is relation between ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Omega]", "p"], TraditionalForm]]], " and \[Omega]." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet \[Omega] be an element in a finite field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be a polynomial over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "\[Omega]", ")"}], "=", "0"}], TraditionalForm]]], ". Then for all ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], "\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", SuperscriptBox["\[Omega]", SuperscriptBox["p", "n"]], ")"}], "=", "0"}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppB F(conj)=0"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], RowBox[{ SubscriptBox["f", "i"], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], ", Since ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "i"], "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "p"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"o", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], ", one has by ", ButtonBox["Corollary B.22", BaseStyle->"Hyperlink", ButtonData:>"CorAppB a^q^n=a"], " and ", ButtonBox["Theorem B.29", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Is In F?"], " that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"0", " ", "=", " ", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"f", "(", "\[Omega]", ")"}], ")"}], SuperscriptBox["p", "n"]], " ", "=", " ", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], RowBox[{ SubscriptBox["f", "i"], SuperscriptBox["\[Omega]", "i"]}]}], ")"}], SuperscriptBox["p", "n"]], " ", "=", " ", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["f", "i"], SuperscriptBox["\[Omega]", "i"]}], ")"}], RowBox[{ SuperscriptBox["p", "n"], " "}]]}], "="}]}]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"=", " ", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], RowBox[{ SubsuperscriptBox["f", "i", SuperscriptBox["p", "n"]], SuperscriptBox["\[Omega]", RowBox[{"i", " ", SuperscriptBox["p", "n"]}]]}]}], " ", "=", " ", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], RowBox[{ SubscriptBox["f", "i"], " ", SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Omega]", SuperscriptBox["p", "n"]], ")"}], "i"]}]}], " ", "=", " ", RowBox[{ RowBox[{"f", "(", SuperscriptBox["\[Omega]", SuperscriptBox["p", "n"]], ")"}], "."}]}]}]}], 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[{ "In \[DoubleStruckCapitalR] and \[DoubleStruckCapitalC] a similar thing \ happens. If ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is a polynomial over the reals and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "\[Omega]", ")"}], "=", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "\[Element]", "\[DoubleStruckCapitalC]"}], TraditionalForm]]], ", then also ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", OverscriptBox["\[Omega]", "_"], ")"}], "=", "0"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ OverscriptBox["\[Omega]", "_"], TraditionalForm]]], " is the complex conjugate of \[Omega]." }], "Text"], Cell[TextData[{ "The following theorem states that the number of different elements ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Omega]", SuperscriptBox["p", "i"]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"i", "=", "0"}], ",", "1", ",", " ", "\[Ellipsis]"}], TraditionalForm]]], ", only depends on ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and the (multiplicative) order of ", Cell[BoxData[ FormBox["\[Omega]", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet \[Omega] be an element of order ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " in a finite field of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be the multiplicative order of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["p", "m"], " ", "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"m", ">", "0"}], TraditionalForm]]], ". Then, the ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " elements\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", ",", SuperscriptBox["\[Omega]", "p"], ",", SuperscriptBox["\[Omega]", SuperscriptBox["p", "2"]], ",", "\[Ellipsis]", " ", ",", SuperscriptBox["\[Omega]", SuperscriptBox["p", RowBox[{"m", "-", "1"}]]]}], TraditionalForm]]], "\n\t\t\t\nare all different and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", SuperscriptBox["p", "m"]], "=", "\[Omega]"}], TraditionalForm]]], ".\nThe ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " elements ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Omega]", SuperscriptBox["p", "i"]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"m", "-", "1"}]}], TraditionalForm]]], ", are called the ", StyleBox["conjugates", FontColor->RGBColor[0.996109, 0, 0]], " of \[Omega]." }], "Theorem", CellTags->"TheoAppB Numb Conj"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": By ", ButtonBox["Lemma B.3", BaseStyle->"Hyperlink", ButtonData:>"LemAppB Order Divides n"], " (twice), one has that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Omega]", SuperscriptBox["p", "i"]], "=", SuperscriptBox["\[Omega]", SuperscriptBox["p", "j"]]}], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["p", "i"], "\[Congruent]", RowBox[{ SuperscriptBox["p", "j"], " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ", and thus if and only if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["p", RowBox[{"i", "-", "j"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], ", i.e. if and only if ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[Congruent]", RowBox[{"j", " ", RowBox[{"(", RowBox[{"mod", " ", "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 B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "2"], "+", "x", "+", "1"}]}], TraditionalForm]]], " (see ", ButtonBox["Example B.6", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB 16 min pol"], "). The field element ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " has order 5. The multiplicative order of 2 modulo 5 is 4. So, ", Cell[BoxData[ FormBox[ RowBox[{"x", ",", " ", SuperscriptBox["x", "2"], ",", " ", SuperscriptBox["x", SuperscriptBox["2", "2"]]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SuperscriptBox["x", SuperscriptBox["2", "3"]], TraditionalForm]]], "are all different, while ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", SuperscriptBox["2", "4"]], "=", "x"}], TraditionalForm]]], ". Indeed, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "4"], "\[Congruent]", RowBox[{ SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "2"], "+", "x", "+", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "8"], "\[Congruent]", RowBox[{ SuperscriptBox["x", "3"], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}], TraditionalForm]]], ", while ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "16"], "\[Congruent]", RowBox[{"x", " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}], TraditionalForm]]], ", as can be checked with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["Table", FontVariations->{"Underline"->True}], " and ", StyleBox["PolynomialMod", FontVariations->{"Underline"->True}], ": " }], "Example", CellChangeTimes->{3.4233939407631516`*^9, 3.4233946754084783`*^9}], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "2"}], ";", RowBox[{"m", "=", "4"}], ";", RowBox[{"f", "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]}], ";"}], "\n", RowBox[{ RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "i"]], ",", " ", "f", ",", " ", RowBox[{"Modulus", "->", "p"}]}], "]"}], ",", " ", RowBox[{"{", RowBox[{"i", ",", " ", "0", ",", " ", "m"}], "}"}]}], " ", "]"}], " ", "//", " ", "TableForm"}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[GridBox[{ {"x"}, { SuperscriptBox["x", "2"]}, { RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"]}]}, { SuperscriptBox["x", "3"]}, {"x"} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[2.0999999999999996`]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], TableForm[{ Global`x, Global`x^2, 1 + Global`x + Global`x^2 + Global`x^3, Global`x^3, Global`x}]]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "B.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tMinimal Polynomials, Primitive Polynomials" }], "Subsection", CellTags->"SubsAppB min pols"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " be a finite field of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Take ", Cell[BoxData[ FormBox[ RowBox[{"n", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], " and let \[Omega] be an element of order ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ". Further, let ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be the multiplicative order of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ".\nThen the polynomial" }], "Theorem", CellTags->"DefAppB Min Pol"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "(", "x", ")"}], " ", "=", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "0"}], RowBox[{"m", "-", "1"}]], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Omega]", SuperscriptBox["p", "i"]]}], ")"}]}]}], TraditionalForm]]]], "NumberedEquationAppendix", GeneratedCell->True, Background->RGBColor[0.839994, 1, 0.2]], Cell[TextData[{ "has its coefficients in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " and it is irreducible over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ". It is called the ", StyleBox["minimal polynomial", FontColor->RGBColor[0.996109, 0, 0]], " of \[Omega] over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]] }], "Theorem", CounterIncrements->"None"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Clearly, ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is a polynomial over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ". Write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "(", "x", ")"}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], RowBox[{ SubscriptBox["m", "i"], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], ". We have to show that the coefficients ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], " are in the ground field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ". To this end we shall use the powerful criterion of ", ButtonBox["Theorem B.29.", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Is In F?"], "\nIt follows from ", ButtonBox["Theorem B.27", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB (x-a)^p="], " and ", ButtonBox["Corollary B.22", BaseStyle->"Hyperlink", ButtonData:>"CorAppB a^q^n=a"], " (with ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "1"}], TraditionalForm]]], ") that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"m", "(", "x", ")"}], ")"}], "p"], " ", "=", " ", RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "0"}], RowBox[{"m", "-", "1"}]], SuperscriptBox[ RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Omega]", SuperscriptBox["p", "i"]]}], ")"}], "p"]}], " ", "=", " ", RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "0"}], RowBox[{"m", "-", "1"}]], RowBox[{"(", RowBox[{ SuperscriptBox["x", "p"], "-", SuperscriptBox["\[Omega]", SuperscriptBox["p", RowBox[{"i", "+", "1"}]]]}], ")"}]}], " ", "="}]}]}], TraditionalForm]]], "\n\n\t=", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "m"], RowBox[{"(", RowBox[{ SuperscriptBox["x", "p"], "-", SuperscriptBox["\[Omega]", SuperscriptBox["p", "i"]]}], ")"}]}], " ", "=", " ", RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "0"}], RowBox[{"m", "-", "1"}]], RowBox[{"(", RowBox[{ SuperscriptBox["x", "p"], "-", SuperscriptBox["\[Omega]", SuperscriptBox["p", "i"]]}], ")"}]}], " ", "=", " ", RowBox[{"m", "(", 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[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], RowBox[{ SubscriptBox["m", "i"], SuperscriptBox["x", RowBox[{"p", " ", "i"}]]}]}], " ", "=", " ", RowBox[{ RowBox[{"m", "(", SuperscriptBox["x", "p"], ")"}], " ", "=", " ", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"m", "(", "x", ")"}], ")"}], "p"], " ", "=", " ", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], RowBox[{ SubscriptBox["m", "i"], SuperscriptBox["x", "i"]}]}], ")"}], "p"], " ", "=", " ", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "m"], RowBox[{ SubsuperscriptBox["m", "i", "p"], SuperscriptBox["x", RowBox[{"p", " ", "i"}]]}]}]}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Comparing the coefficients of ", Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{"p", " ", "i"}]], TraditionalForm]]], " on both hands yields ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "i"], "=", SubsuperscriptBox["m", "i", "p"]}], TraditionalForm]]], ". It follows from ", ButtonBox["Theorem B.29", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Is In F?"], " that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "i"], "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "p"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is a polynomial in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], TraditionalForm]]], ".\nFrom ", ButtonBox["Theorem B.30", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB F(conj)=0"], " and ", ButtonBox["Theorem B.31", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Numb Conj"], " it follows that no polynomial in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], TraditionalForm]]], " of degree less than ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " can have \[Omega] as a zero. So, ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is irreducible over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "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[{ StyleBox["Corollary B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet \[Omega] be an element of order ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " in a finite field of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " be defined as in ", ButtonBox["Theorem B.32", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], " and let ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be any ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomial that has \[Omega] as zero.\nThen ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is divisible by ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppB Prop Min Pol"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Combine ", ButtonBox["Theorem B.30", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB F(conj)=0"], ", ", ButtonBox["Theorem B.31", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Numb Conj"], ", and ", ButtonBox["Theorem B.32", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], ", as defined in ", ButtonBox["Theorem B.32", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], ", is the monic polynomial of lowest degree over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ", having \[Omega] as a zero. That is the reason why ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is called the minimal polynomial of \[Omega] over ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". It has \[Omega] and all the conjugates of \[Omega] as zeros. The degree \ of the minimal polynomial ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " of an element \[Omega] is often simply called the ", StyleBox["degree", FontColor->RGBColor[0.996109, 0, 0]], " of \[Omega] over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], "." }], "Text", CellTags->"DefAppB degree of element"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is the minimal polynomial of a primitive element, then ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is called a ", StyleBox["primitive polynomial", FontColor->RGBColor[0.996109, 0, 0]], ". ", 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["z", TraditionalForm]]], " by means of the ", StyleBox["FieldIrreducible", FontVariations->{"Underline"->True}], " function." }], "Text", CellChangeTimes->{{3.423455152938441*^9, 3.42345515465718*^9}}, CellTags->"DefAppB Prim Pol"], Cell[BoxData[ RowBox[{"<<", "\"\\""}]], "Input"], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", "6"}], ";", " ", RowBox[{"p", "=", "2"}], ";"}], "\n", RowBox[{"FieldIrreducible", "[", RowBox[{ RowBox[{"GF", "[", RowBox[{"p", ",", "m"}], "]"}], ",", "z"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["z", "5"], "+", SuperscriptBox["z", "6"]}]], "Output", CellChangeTimes->{3.4233700905214524`*^9, 3.4233701692260885`*^9, 3.4233752217304325`*^9}], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be a primitive polynomial over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". A table (like ", ButtonBox["Table B.2", BaseStyle->"Hyperlink", ButtonData:>"TableAppB F16-2"], ") in which each non-zero element in the finite field ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ RowBox[{"f", "(", "x", ")"}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], " "}]}], TraditionalForm]]], "is represented as a polynomial in ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "m"}], TraditionalForm]]], " and as a power of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is called a ", StyleBox["log table", FontColor->RGBColor[0.996109, 0, 0]], " of that field. These tables are very practical to have when extensive \ calculations need to be done in the field. " }], "Text", CellTags->"DefAppB Log Table"], Cell[TextData[{ "These logarithm tables can be made quite easily by ", StyleBox["Mathematica", FontSlant->"Italic"], ". Depending on whether one wants ", StyleBox["Mathematica", FontSlant->"Italic"], " to select a suitable primitive polynomial or enter one's own, one can type \ : " }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "2"}], ";"}], "\n", RowBox[{"TableForm", "[", RowBox[{"PowerList", "[", RowBox[{"GF", "[", RowBox[{"p", ",", "4"}], "]"}], "]"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[GridBox[{ {"1", "0", "0", "0"}, {"0", "1", "0", "0"}, {"0", "0", "1", "0"}, {"0", "0", "0", "1"}, {"1", "0", "0", "1"}, {"1", "1", "0", "1"}, {"1", "1", "1", "1"}, {"1", "1", "1", "0"}, {"0", "1", "1", "1"}, {"1", "0", "1", "0"}, {"0", "1", "0", "1"}, {"1", "0", "1", "1"}, {"1", "1", "0", "0"}, {"0", "1", "1", "0"}, {"0", "0", "1", "1"} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.7]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], Function[BoxForm`e$, TableForm[BoxForm`e$]]]], "Output", CellChangeTimes->{3.4233744652287145`*^9, 3.4233752238863373`*^9}], Cell["or", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "2"}], ";"}], "\n", RowBox[{"TableForm", "[", RowBox[{"PowerList", "[", RowBox[{"GF", "[", RowBox[{"p", ",", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], "]"}], "]"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[GridBox[{ {"1", "0", "0", "0"}, {"0", "1", "0", "0"}, {"0", "0", "1", "0"}, {"0", "0", "0", "1"}, {"1", "1", "0", "0"}, {"0", "1", "1", "0"}, {"0", "0", "1", "1"}, {"1", "1", "0", "1"}, {"1", "0", "1", "0"}, {"0", "1", "0", "1"}, {"1", "1", "1", "0"}, {"0", "1", "1", "1"}, {"1", "1", "1", "1"}, {"1", "0", "1", "1"}, {"1", "0", "0", "1"} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.7]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], Function[BoxForm`e$, TableForm[BoxForm`e$]]]], "Output", CellChangeTimes->{3.4233752276513605`*^9}], Cell[TextData[{ "To determine ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "i"], TraditionalForm]]], " in a field ", Cell[BoxData[ FormBox[ RowBox[{"GF", "[", RowBox[{"p", ",", "m"}], "]"}], TraditionalForm]]], " or, conversely, to find ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "i"], TraditionalForm]]], " is equal to a particular element in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "[", RowBox[{"p", ",", "m"}], "]"}], TraditionalForm]]], ", one can use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["FieldExp", FontVariations->{"Underline"->True}], Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ RowBox[{"GF", "[", RowBox[{"p", ",", "m"}], "]"}], ",", "i"}], "]"}], TraditionalForm]]], ", resp. ", StyleBox["FieldInd", FontVariations->{"Underline"->True}], "[", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "[", RowBox[{"p", ",", "m"}], "]"}], " ", "[", RowBox[{"{", "list", "}"}], "]"}], TraditionalForm]]], "] (essential for this calculation is the assignment True to ", StyleBox["PowerListQ", FontVariations->{"Underline"->True}], ")." }], "Text", CellChangeTimes->{{3.423460177158498*^9, 3.42346018298666*^9}, { 3.4234817393959894`*^9, 3.423481758070613*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"PowerListQ", "[", RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], "]"}], "]"}], "=", "True"}], ";"}], "\n", RowBox[{ RowBox[{"f16", "=", RowBox[{"GF", "[", RowBox[{"2", ",", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{"FieldExp", "[", RowBox[{"f16", ",", "5"}], "]"}], "\n", RowBox[{"FieldInd", "[", RowBox[{"f16", "[", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "]"}], "]"}]}], "Input", CellChangeTimes->{{3.4233752376497602`*^9, 3.423375242477113*^9}}], Cell[BoxData[ InterpretationBox[ SubscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], "2"], Subscripted[ {0, 1, 1, 0}[2]], Editable->False]], "Output", CellChangeTimes->{{3.423375230369675*^9, 3.4233752615209403`*^9}, 3.4233753003116074`*^9}], Cell[BoxData["5"], "Output", CellChangeTimes->{{3.423375230369675*^9, 3.4233752615209403`*^9}, 3.423375300405343*^9}] }, Open ]], Cell["\<\ There are several ways to find the minimal polynomial of a field element. We \ shall demonstrate two methods.\ \>", "Text"], Cell[TextData[{ "Method 1:\nLet \[Alpha] be a zero of the binary primitive polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "2"], "+", "1"}], TraditionalForm]]], ". So, \[Alpha] has order 31 and the conjugates of ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "3"], TraditionalForm]]], " are ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "6"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "12"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "24"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "17"], TraditionalForm]]], ". Then the minimal polynomial of ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "3"], TraditionalForm]]], " can be found by:" }], "Text", FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"f", ":=", RowBox[{"1", "+", SuperscriptBox["a", "2"], "+", SuperscriptBox["a", "5"]}]}], ";"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["a", "3"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["a", "6"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["a", "12"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["a", "24"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["a", "17"]}], ")"}]}], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}]], "Output"], Cell[TextData[{ "Method 2: \nLet \[Alpha] be a zero of the binary primitive polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "2"], "+", "1"}], TraditionalForm]]], ". To find the minimal polynomial of ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "=", SuperscriptBox["\[Alpha]", "3"]}], TraditionalForm]]], ", we first compute 1,", Cell[BoxData[ FormBox["\[Beta]", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", "2"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", "3"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", "4"], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", "5"], TraditionalForm]]], ", using ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "5"], "+", SuperscriptBox["\[Alpha]", "2"], "+", "1"}], "=", "0"}], TraditionalForm]]], ". " }], "Text", FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"f", ":=", RowBox[{"1", "+", SuperscriptBox["a", "2"], "+", SuperscriptBox["a", "5"]}]}], ";", RowBox[{"b", "=", SuperscriptBox["a", "3"]}], ";"}], "\n", RowBox[{"u0", "=", RowBox[{"PolynomialMod", "[", RowBox[{"1", ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "\n", RowBox[{"u1", "=", RowBox[{"PolynomialMod", "[", RowBox[{"b", ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "\n", RowBox[{"u2", "=", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["b", "2"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "\n", RowBox[{"u3", "=", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["b", "3"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "\n", RowBox[{"u4", "=", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["b", "4"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "\n", RowBox[{"u5", "=", RowBox[{"PolynomialMod", "[", RowBox[{ SuperscriptBox["b", "5"], ",", "f", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["1"], "Output"], Cell[BoxData[ SuperscriptBox["a", "3"]], "Output"], Cell[BoxData[ RowBox[{"a", "+", SuperscriptBox["a", "3"]}]], "Output"], Cell[BoxData[ RowBox[{"a", "+", SuperscriptBox["a", "3"], "+", SuperscriptBox["a", "4"]}]], "Output"], Cell[BoxData[ RowBox[{"a", "+", SuperscriptBox["a", "2"], "+", SuperscriptBox["a", "3"]}]], "Output"], Cell[BoxData[ RowBox[{"1", "+", "a", "+", SuperscriptBox["a", "2"], "+", SuperscriptBox["a", "3"], "+", SuperscriptBox["a", "4"]}]], "Output"], Cell[TextData[{ "We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["CoefficientList", FontVariations->{"Underline"->True}], " to convert the coefficients into vectors. Note that we use the ", StyleBox["Join", FontVariations->{"Underline"->True}], " function to pad the output with zeros to make all vectors of length 5. " }], "Text", CellChangeTimes->{{3.4234557825125365`*^9, 3.4234557836375294`*^9}, { 3.4234721650800266`*^9, 3.4234721717363195`*^9}}, FontWeight->"Bold"], Cell[BoxData[{ RowBox[{ RowBox[{"M", "=", RowBox[{"{", RowBox[{ RowBox[{"Join", "[", RowBox[{ RowBox[{"CoefficientList", "[", RowBox[{"u0", ",", "a"}], "]"}], ",", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0"}], "}"}]}], "]"}], ",", RowBox[{"Join", "[", RowBox[{ RowBox[{"CoefficientList", "[", RowBox[{"u1", ",", "a"}], "]"}], ",", RowBox[{"{", "0", "}"}]}], "]"}], ",", RowBox[{"Join", "[", RowBox[{ RowBox[{"CoefficientList", "[", RowBox[{"u2", ",", "a"}], "]"}], ",", RowBox[{"{", "0", "}"}]}], "]"}], ",", RowBox[{"CoefficientList", "[", RowBox[{"u3", ",", "a"}], "]"}], ",", RowBox[{"Join", "[", RowBox[{ RowBox[{"CoefficientList", "[", RowBox[{"u4", ",", "a"}], "]"}], ",", RowBox[{"{", "0", "}"}]}], "]"}], ",", RowBox[{"CoefficientList", "[", RowBox[{"u5", ",", "a"}], "]"}]}], "}"}]}], ";"}], "\n", RowBox[{"MatrixForm", "[", "M", "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"1", "0", "0", "0", "0"}, {"0", "0", "0", "1", "0"}, {"0", "1", "0", "1", "0"}, {"0", "1", "0", "1", "1"}, {"0", "1", "1", "1", "0"}, {"1", "1", "1", "1", "1"} }], ")"}], MatrixForm[#]& ]], "Output"], Cell[TextData[{ "We need to find a linear dependency between ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Beta]", ",", SuperscriptBox["\[Beta]", "2"], ",", SuperscriptBox["\[Beta]", "3"], ",", SuperscriptBox["\[Beta]", "4"]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", "5"], TraditionalForm]]], ", say ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "5"], RowBox[{ SubscriptBox["g", "i"], SuperscriptBox["\[Beta]", "i"]}]}], TraditionalForm]]], "=0 with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["g", "i"], "\[Element]", RowBox[{"GF", "(", "2", ")"}]}], TraditionalForm]]], ". To this end we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", StyleBox["NullSpace", FontVariations->{"Underline"->True}], " and ", StyleBox["Transpose", FontVariations->{"Underline"->True}], ". This leads to the minimal polynomial ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", "x", ")"}], TraditionalForm]]], " of \[Beta]." }], "Text", CellChangeTimes->{3.4233950557859125`*^9, 3.423395251115288*^9}, FontWeight->"Bold"], Cell[BoxData[ RowBox[{"NullSpace", "[", RowBox[{ RowBox[{"Transpose", "[", "M", "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}], "}"}]], "Output"], Cell[TextData[{ "We conclude that \[Beta] has minimal polynomial ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}], TraditionalForm]]], "." }], "Text", FontWeight->"Bold"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "B.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tFurther Properties" }], "Subsection", CellTags->"SubsAppB further props"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " be the minimal polynomial of an element \[Omega] of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". It follows from ", ButtonBox["Corollary B.33", BaseStyle->"Hyperlink", ButtonData:>"CorAppB Prop Min Pol"], " that the ", Cell[BoxData[ FormBox[ SuperscriptBox["p", "m"], TraditionalForm]]], " expressions ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"m", "-", "1"}]], RowBox[{ SubscriptBox["f", "i"], SuperscriptBox["\[Omega]", "i"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ SubscriptBox["f", "i"], "\[Element]"}], TraditionalForm], SubscriptBox["\[DoubleStruckCapitalF]", "p"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", "m"}], TraditionalForm]]], ", take on ", Cell[BoxData[ FormBox[ SuperscriptBox["p", "m"], TraditionalForm]]], " different values. For these expressions addition and multiplication can be \ performed just as in ", ButtonBox["(B.3)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Pol add mult"], " and ", ButtonBox["(B.4)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Pol add mult two"], ", where the relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "(", "\[Omega]", ")"}], "=", "0"}], TraditionalForm]]], " has to be used to reduce the degree of the outcome to a value less than ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " .It is quite easy to check that one obtains a field, that is isomorphic to \ (", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"m", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], TraditionalForm], " ", ")"}]]], ". \nIf ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is primitive, one has that the elements ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "x", ",", "\[Ellipsis]", " ", ",", SuperscriptBox["x", RowBox[{"(", RowBox[{ SuperscriptBox["p", "m"], "-", "2"}], ")"}]]}], TraditionalForm]]], " are all different modulo ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], ", just as the elements ", Cell[BoxData[ FormBox[ RowBox[{ "1", ",", " ", "\[Omega]", ",", " ", "\[Ellipsis]", " ", ",", " ", SuperscriptBox["\[Omega]", RowBox[{"(", RowBox[{ SuperscriptBox["p", "m"], "-", "2"}], ")"}]]}], TraditionalForm]]], " are all different. See for instance, ", ButtonBox["Example B.6", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB 16 min pol"], ", where the primitive element ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", " ", "=", " ", RowBox[{"1", " ", "+", " ", "x"}]}], TraditionalForm]]], " has minimal polynomial ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "(", "y", ")"}], "=", RowBox[{"1", "+", SuperscriptBox["y", "3"], "+", SuperscriptBox["y", "4"]}]}], TraditionalForm]]], ". ", ButtonBox["Table B.2", BaseStyle->"Hyperlink", ButtonData:>"TableAppB F16-2"], " shows the field (", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"m", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", ","}]}], TraditionalForm], " ", ")"}]]], "." }], "Text"], Cell[TextData[{ StyleBox["Lemma B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " be an irreducible polynomial of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " over a field with ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " elements and let ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be a multiple of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". \nThen ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "n"]], "-", "x"}], TraditionalForm]]], "." }], "Theorem", CellTags->"LemAppB M(x)Divx^p^n-x"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Consider the residue class ring ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"m", "(", "x", ")"}], ")"}]}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], ". This ring is a field with ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], " elements by ", ButtonBox["Theorem B.16", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field Iff Irred"], ". The field element ", Cell[BoxData[ FormBox[ RowBox[{"<", "x", ">"}], TraditionalForm]]], " is a zero of ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], ", since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "(", RowBox[{"<", "x", ">"}], ")"}], " ", "=", RowBox[{ RowBox[{"<", RowBox[{"m", "(", "x", ")"}], ">"}], " ", "=", RowBox[{"<", "0", ">"}]}]}], TraditionalForm]]], ". It follows from ", ButtonBox["Corollary B.22", BaseStyle->"Hyperlink", ButtonData:>"CorAppB a^q^n=a"], " (", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{"n", "=", "1"}], TraditionalForm], ")"}]]], " that ", Cell[BoxData[ FormBox[ RowBox[{"<", "x", ">"}], TraditionalForm]]], " is a zero of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "n"]], "-", "x"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[GreaterEqual]", "1"}], TraditionalForm]]], ". By ", ButtonBox["Corollary B.33", BaseStyle->"Hyperlink", ButtonData:>"CorAppB Prop Min Pol"], " we conclude that ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "n"]], "-", "x"}], 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[{ "Also the converse of ", ButtonBox["Lemma B.34", BaseStyle->"Hyperlink", ButtonData:>"LemAppB M(x)Divx^p^n-x"], " is true." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "n"]], "-", "x"}], TraditionalForm]]], " is the product of all irreducible, monic, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomials of a degree dividing ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppB Factor x^p^m-x"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ RowBox[{"m", "|", "n"}], TraditionalForm]]], ". There are ", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{ SubscriptBox["I", "p"], "(", "m", ")"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppB Iq(n)"], TraditionalForm]]], " irreducible polynomials of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ", all of which divide ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "n"]], "-", "x"}], TraditionalForm]]], " by ", ButtonBox["Lemma B.34", BaseStyle->"Hyperlink", ButtonData:>"LemAppB M(x)Divx^p^n-x"], ". The sum of their degrees is ", Cell[BoxData[ FormBox[ RowBox[{"m", " ", RowBox[{ SubscriptBox["I", "p"], "(", "m", ")"}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"m", "|", "n"}]], RowBox[{"m", " ", RowBox[{ SubscriptBox["I", "p"], "(", "m", ")"}]}]}], " ", "=", " ", RowBox[{ SuperscriptBox["p", "n"], " ", "=", " ", RowBox[{"degree", "(", RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "n"]], "-", "x"}], ")"}]}]}], TraditionalForm]]], " by ", ButtonBox["(B.5)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Sum Irred"], ", it follows that the irreducible, monic, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomials of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"m", "|", "n"}], TraditionalForm]]], ", form the complete factorization of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "n"]], "-", "x"}], 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 B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\n", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "4"}], TraditionalForm]]], ", \n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["I", "2"], "(", "1", ")"}], "=", "2"}], ",", " ", RowBox[{ RowBox[{ SubscriptBox["I", "2"], "(", "2", ")"}], "=", "1"}], ",", " ", RowBox[{ RowBox[{ SubscriptBox["I", "2"], "(", "4", ")"}], "=", "3"}]}], TraditionalForm]]], " (see ", ButtonBox["Section B.3", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Numb Irr Pol"], ").\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "16"], "-", "x"}], " ", "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "(", RowBox[{"x", "+", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "2"], "+", "x", "+", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "4"], "+", "x", "+", "1"}], ")"}]}], TraditionalForm]]] }], "Example"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "2"}], ";", RowBox[{"m", "=", "4"}], ";"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "m"]], "-", "x"}], ",", RowBox[{"Modulus", "->", "p"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"x", " ", RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}]}]], "Output"], Cell[TextData[{ StyleBox["Corollary B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be an irreducible polynomial in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"m", "|", "n"}], TraditionalForm]]], ".Then, a finite field with ", Cell[BoxData[ FormBox[ SuperscriptBox["p", "n"], TraditionalForm]]], " elements contains ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " roots of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppB Zeros Irr F"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": By ", ButtonBox["Theorem B.35", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Factor x^p^m-x"], ", ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "q"], "-", "x"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "n"]}], TraditionalForm]]], ". On the other hand, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "q"], "-", "x"}], " ", "=", " ", RowBox[{ SubscriptBox["\[Product]", RowBox[{"\[Omega]", "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "q"]}]], RowBox[{"(", RowBox[{"x", "-", "\[Omega]"}], ")"}]}]}], TraditionalForm]]], " by ", ButtonBox["Corollary B.23", BaseStyle->"Hyperlink", ButtonData:>"CorAppB a in F iff a^q=a"], "." }], "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 B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be a prime and ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Element]", "\[DoubleStruckCapitalN]"}], TraditionalForm]]], ". Then, the finite field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["p", "n"]], TraditionalForm]]], " is unique, up to isomorphism." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Write ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], " and let ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " be any finite field of order ", Cell[BoxData[ FormBox["q", TraditionalForm]]], ".Let ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " be any irreducible, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomial of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". We shall show that ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " is isomorphic to ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], TraditionalForm]]], ". By ", ButtonBox["Corollary B.36", BaseStyle->"Hyperlink", ButtonData:>"CorAppB Zeros Irr F"], ", ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " contains ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " zeros of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ". Let \[Omega] be one of these ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " zeros. Since ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is irreducible in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], TraditionalForm]]], ", there is no lower degree polynomial over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " with \[Omega] as zero. This implies that the ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " elements ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Omega]", ",", "\[Ellipsis]", " ", ",", SuperscriptBox["\[Omega]", RowBox[{"m", "-", "1"}]]}], TraditionalForm]]], "are independent over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ", thus, any element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " can be written as ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "o"}], RowBox[{"m", "-", "1"}]], RowBox[{ SubscriptBox["f", "i"], SuperscriptBox["\[Omega]", "i"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "i"], "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "p"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"m", "-", "1"}]}], TraditionalForm]]], ". \nThe isomorphism between ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "p"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], TraditionalForm]]], " is now obvious." }], "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["Corollary B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\n", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["p", "m"]], TraditionalForm]]], " is (isomorphic to) a subfield of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["p", "n"]], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Theorem", CellTags->"CorAppB When Subfield"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": The following assertions are all equivalent;" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "i)\t", Cell[BoxData[ FormBox[ RowBox[{"m", "|", "n"}], TraditionalForm]]], ",\nii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["p", "m"], "-", "1"}], ")"}], "divides", " ", RowBox[{"(", RowBox[{ SuperscriptBox["p", "n"], "-", "1"}], ")"}]}], TraditionalForm]]], ", \niii)\t", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "m"]], "-", "x"}], ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["x", SuperscriptBox["p", "n"]], "-", "x"}], ")"}], TraditionalForm]]], ", \niv)\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Product]", RowBox[{"\[Omega]", "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["p", "m"]]}]], RowBox[{"(", RowBox[{"x", "-", "\[Omega]"}], ")"}]}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Product]", RowBox[{"\[Omega]", "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["p", "n"]]}]], RowBox[{"(", RowBox[{"x", "-", "\[Omega]"}], ")"}]}], TraditionalForm]]], ", \nv)\t", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["p", "m"]], TraditionalForm]]], " is a subfield of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["p", "n"]], 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 B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nIt follows from ", ButtonBox["Corollary B.38", BaseStyle->"Hyperlink", ButtonData:>"CorAppB When Subfield"], " that ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["2", "4"]], TraditionalForm]]], " contains ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["2", "2"]], TraditionalForm]]], " as a subfield, while it does not contain ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["2", "3"]], TraditionalForm]]], " as a subfield. From ", ButtonBox["Table B.2", BaseStyle->"Hyperlink", ButtonData:>"TableAppB F16-2"], " one can easily verify that the elements ", Cell[BoxData[ FormBox[ RowBox[{"0", ",", " ", "1", ",", " ", SuperscriptBox["x", RowBox[{"5", " "}]]}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "10"], TraditionalForm]]], " form a subfield of cardinality ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "2"], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "2"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", "1"}], ")"}]}], ",", RowBox[{"+", RowBox[{",", "\[CenterDot]"}]}]}], " ", ")"}], TraditionalForm]]], "." }], "Example"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ "B.", CounterBox["Section"], ".", CounterBox["Subsection"], "\tCyclotomic Polynomials" }], "Subsection", CellTags->"SubsAppB cycl pols"], Cell[TextData[{ "Consider a finite field ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " of characteristic ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox[ RowBox[{"m", ">", "0"}], TraditionalForm]]], ". By ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ", every element in ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], " has an order dividing ", Cell[BoxData[ FormBox[ RowBox[{"q", " ", "-", " ", "1"}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"n", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], " and let \[Omega] be a primitive ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-th root of unity in ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], TraditionalForm]]], ". For instance, ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "n"}]]}], TraditionalForm]]], ", where \[Alpha] is a primitive element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", "n"}], TraditionalForm]]], " and put ", Cell[BoxData[ FormBox[ RowBox[{"\[Eta]", "=", SuperscriptBox["\[Omega]", RowBox[{"n", "/", "d"}]]}], TraditionalForm]]], ". Then \[Eta] is a primitive ", Cell[BoxData[ FormBox["d", TraditionalForm]]], "-root of unity. Clearly, the ", Cell[BoxData[ FormBox["d", TraditionalForm]]], " elements ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Eta]", ",", " ", "\[Ellipsis]", " ", ",", SuperscriptBox["\[Eta]", RowBox[{"d", "-", "1"}]]}], TraditionalForm]]], "are a zero of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "d"], "-", "1"}], TraditionalForm]]], ". By ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], ", no other element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " is a zero of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "d"], "-", "1"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Definition B.", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime. For any ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], " the ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary ", StyleBox["cyclotomic polynomial ", FontColor->RGBColor[0.996109, 0, 0]], Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.996109, 0, 0]], TraditionalForm]]], " is defined by \n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{"\[Xi]", "\[Element]", RowBox[{ RowBox[{"GF", "(", "q", ")"}], " ", "of", " ", "order", " ", "q"}]}]], RowBox[{"(", RowBox[{"x", "-", "\[Xi]"}], ")"}]}]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefAppB Cycl Pol"], Cell[TextData[{ "If \[Xi] had order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"d", "|", RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}], TraditionalForm]]], ", then by ", ButtonBox["Lemma B.4", BaseStyle->"Hyperlink", ButtonData:>"LemAppB Order a^k"], " also ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Xi]", "p"], TraditionalForm]]], " has order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ". So, with \[Xi] a zero of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], TraditionalForm]]], " also its conjugates are zeros of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], TraditionalForm]]], ". It follows from ", ButtonBox["Theorem B.32", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], " that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], TraditionalForm]]], " is the product of some minimal polynomials over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " and thus that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], TraditionalForm]]], " is a polynomial over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "By ", ButtonBox["Theorem B.21", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Cyclic Struc"], ",", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], TraditionalForm]]], " has degree ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", "d", ")"}], TraditionalForm]]], ". Since \[Omega] is a primitive ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-th root of unity, it follows that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "n"], "-", "1"}], " ", "=", RowBox[{ RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{"n", "-", "1"}]], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Omega]", "i"]}], ")"}]}], " ", "=", RowBox[{ RowBox[{ SubscriptBox["\[Product]", RowBox[{ RowBox[{"\[Xi]", "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "q"]}], ",", " ", RowBox[{"\[Xi]", " ", "has", " ", "order", " ", "n"}]}]], RowBox[{"(", RowBox[{"x", "-", "\[Xi]"}], ")"}]}], " ", "="}]}]}], TraditionalForm]]], "\n\t= ", Cell[BoxData[ FormBox[ SubscriptBox["\[Product]", RowBox[{"d", "|", "n"}]], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Product]", RowBox[{ RowBox[{"\[Xi]", "\[Element]", SubscriptBox["\[DoubleStruckCapitalF]", "q"]}], ",", " ", RowBox[{"\[Xi]", " ", "has", " ", "order", " ", "d"}]}]], RowBox[{"(", RowBox[{"x", "-", "\[Xi]"}], ")"}]}], " ", "=", " ", RowBox[{ SubscriptBox["\[Product]", RowBox[{"d", "|", "n"}]], RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}]}]}], TraditionalForm]]], "." }], "NumberedEquationAppendix", GeneratedCell->True, CellTags->"FormAppB Factor x^n-1"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n\n\t\t", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "n", ")"}]], "(", "x", ")"}], "=", RowBox[{ SubscriptBox["\[Product]", RowBox[{"d", "|", "n"}]], SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["x", "d"], "-", "1"}], ")"}], RowBox[{"\[Mu]", "(", RowBox[{"n", "/", "d"}], ")"}]]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppB Form Cyclot"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Apply the ", ButtonBox["Multiplicative M\[ODoubleDot]bius Inversion Formula", BaseStyle->"Hyperlink", ButtonData:>"CorAppA Mult Moebius"], " (Corollary A.39) to ", ButtonBox["(B.8)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Factor x^n-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["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "36", ")"}]], "(", "x", ")"}], " ", "=", " ", RowBox[{ RowBox[{ SubscriptBox["\[Product]", RowBox[{"d", "|", "36"}]], SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["x", "d"], "-", "1"}], ")"}], RowBox[{"\[Mu]", "(", RowBox[{"36", "/", "d"}], ")"}]]}], " ", "=", " ", RowBox[{ FractionBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["x", "36"], "-", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "6"], "-", "1"}], ")"}]}], RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["x", "18"], "-", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "12"], "-", "1"}], ")"}]}]], " ", "=", " ", RowBox[{ FractionBox[ RowBox[{ SuperscriptBox["x", "18"], "+", "1"}], RowBox[{ SuperscriptBox["x", "6"], "+", "1"}]], " ", "=", " ", RowBox[{ SuperscriptBox["x", "12"], "-", SuperscriptBox["x", "6"], "+", "1."}]}]}]}]}], TraditionalForm]]], "\nThis can also be evaluated with ", StyleBox["Mathematica", FontSlant->"Italic"], ":" }], "Example"], Cell[BoxData[ RowBox[{ RowBox[{"DivisorProduct", "[", RowBox[{"f_", ",", "n_"}], "]"}], ":=", " ", RowBox[{"Times", " ", "@@", " ", RowBox[{"(", RowBox[{"f", " ", "/@", " ", RowBox[{"Divisors", "[", "n", "]"}]}], ")"}]}]}]], "Input", GeneratedCell->True, CellTags->"FunctAppA Divisor sum"], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "36"}], ";", RowBox[{"Clear", "[", RowBox[{"f", ",", "x"}], "]"}], ";"}], "\n", RowBox[{ RowBox[{"f", "[", "d_", "]"}], ":=", SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["x", "d"], "-", "1"}], ")"}], RowBox[{"MoebiusMu", "[", RowBox[{"n", "/", "d"}], "]"}]]}], "\n", RowBox[{ RowBox[{"DivisorProduct", "[", RowBox[{"f", ",", "n"}], "]"}], "//", "Simplify"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "-", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "12"]}]], "Output"], Cell[TextData[{ "or directly with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", StyleBox["Cyclotomic", FontVariations->{"Underline"->True}], ":" }], "Text", CellChangeTimes->{{3.4234552666877127`*^9, 3.423455268015829*^9}}, FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[ RowBox[{"Cyclotomic", "[", RowBox[{"36", ",", "x"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"1", "-", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "12"]}]], "Output"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]]], ", one can write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "36", ")"}]], "(", "x", ")"}], " ", "=", RowBox[{ SuperscriptBox["x", "12"], "+", SuperscriptBox["x", "6"], "+", "1"}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ "The expression for ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "n", ")"}]], "(", "x", ")"}], TraditionalForm]]], " in ", ButtonBox["Theorem B.39", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Form Cyclot"], " seems to be independent of the finite field. This is not really true, \ because in the evaluation of that expression the characteristic does play a \ role." }], "Text"], Cell[TextData[{ "All the irreducible factors of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], TraditionalForm]]], " have the same degree, because all the zeros of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], TraditionalForm]]], " have the same order ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ". Indeed, by ", ButtonBox["Theorem B.32", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], ", each irreducible factor of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], "(", "x", ")"}], TraditionalForm]]], " has as degree the multiplicative order of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["d", TraditionalForm]]], ".\nIn particular we have the following theorem." }], "Text"], Cell[TextData[{ StyleBox["Theorem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe number of primitive, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary, monic polynomials of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is\n\t\t\t", Cell[BoxData[ FormBox[ StyleBox[ FractionBox[ RowBox[{"\[Phi]", "(", RowBox[{ SuperscriptBox["p", "m"], "-", "1"}], ")"}], "m"], FontSize->14, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoAppB Number Prim Pol"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": A primitive, ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-ary polynomial of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", RowBox[{ SuperscriptBox["p", "m"], "-", "1"}], ")"}]], "(", "x", ")"}], TraditionalForm]]], " and this cyclotomic polynomial has only factors of this type. The degree \ of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", RowBox[{ SuperscriptBox["p", "m"], "-", "1"}], ")"}]], "(", "x", ")"}], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "(", RowBox[{ SuperscriptBox["p", "m"], "-", "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[{ StyleBox["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[": ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]]] }], "Example"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "16"], "-", "x"}], " ", "=", " ", RowBox[{ RowBox[{"x", "(", RowBox[{ SuperscriptBox["x", "15"], "-", "1"}], ")"}], " ", "=", " ", "x"}], " "}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "1", ")"}]], "(", "x", ")"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "3", ")"}]], "(", "x", ")"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "5", ")"}]], "(", "x", ")"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "15", ")"}]], "(", "x", ")"}], TraditionalForm]]] }], "DisplayFormula", FontSlant->"Italic"], Cell["where", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "1", ")"}]], "(", "x", ")"}], TraditionalForm]]], " = x+1,\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "3", ")"}]], "(", "x", ")"}], TraditionalForm]]], " = ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1"}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "5", ")"}]], "(", "x", ")"}], TraditionalForm]]], " = ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SuperscriptBox["x", "4"], TraditionalForm], "+", SuperscriptBox["x", "3"], "+"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "1"}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "15", ")"}]], "(", "x", ")"}], TraditionalForm]]], " = (", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["x", "4"], "+", "x", "+", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "3"], "+", "1"}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "Indeed, there are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"\[Phi]", "(", "15", ")"}], "/", "4"}], "=", "2"}], TraditionalForm]]], " primitive polynomials of degree 4. See also ", ButtonBox["Example B.6", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB 16 min pol"], "." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ "A way to find all primitive polynomials of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " is to factor ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", RowBox[{ SuperscriptBox["p", "m"], "-", "1"}], ")"}]], "(", "x", ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"] }], "Example", PageBreakBelow->False], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "2"}], ";", RowBox[{"m", "=", "6"}], ";", RowBox[{"n", "=", RowBox[{ SuperscriptBox["p", "m"], "-", "1"}]}], ";"}], "\n", RowBox[{"Factor", "[", RowBox[{ RowBox[{"Cyclotomic", "[", RowBox[{"n", ",", "x"}], "]"}], ",", RowBox[{"Modulus", "\[Rule]", "p"}]}], "]"}]}], "Input", PageBreakAbove->False], 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[{ StyleBox["Remark", FontWeight->"Bold"], ":\nIn this chapter we have viewed ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "m"]}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime, as an extension field of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ", however all the concepts defined in this chapter can also be generalized \ to ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "[", "x", "]"}], TraditionalForm]]], ". So, one may want to count the number of irreducible polynomials of degree \ ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "q"], "[", "x", "]"}], TraditionalForm]]], " or discuss primitive polynomials over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ", etc. We leave it to the reader to verify that all the theorems in this \ appendix can indeed be generalized from ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["p", "m"]], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", SuperscriptBox["q", "m"]], TraditionalForm]]], " simply by replacing ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " by ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " by ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["q", "m"], "."}], TraditionalForm]]] }], "Text", CellTags->"RemAppB p->q"], Cell[TextData[{ StyleBox["Example B.", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nThe field ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "16"], TraditionalForm]]], " can be viewed as the residue class ring ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[DoubleStruckCapitalF]", "4"], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["x", "2"], "+", "x", "+", "\[Alpha]"}], ")"}]}], TraditionalForm]]], ", where \[Alpha] is an element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "4"], TraditionalForm]]], " satisfying ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "2"], "+", "\[Alpha]", "+", "1"}], TraditionalForm]]], "." }], "Example"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["B.5\tProblems", "Section", CellTags->"SectAppB Problems"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nProve that ", Cell[BoxData[ FormBox[ RowBox[{"(", " ", RowBox[{ RowBox[{"{", " ", RowBox[{ RowBox[{ RowBox[{"x", "\[Element]", "\[DoubleStruckCapitalR]"}], " ", "|", " ", RowBox[{ SuperscriptBox["x", "2"], "\[Element]", "\[DoubleStruckCapitalQ]"}]}], ",", " ", RowBox[{"x", "\[NotEqual]", "0"}]}], "}"}], ",", "\[CenterDot]"}], " ", ")"}], TraditionalForm]]], " is a ", ButtonBox["group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nProve that the elements of a reduced residue class system modulo ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " form a ", ButtonBox["multiplicative group", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"G", ","}]}], "*)"}], TraditionalForm]]], " be a group and ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " a non-empty subset of ", Cell[BoxData[ FormBox["G", TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"H", ","}]}], "*)"}], TraditionalForm]]], " is a ", ButtonBox["subgroup", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subgroup"], " of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"G", ","}]}], "*)"}], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["h", "1"], "*", SubsuperscriptBox["h", "2", RowBox[{"-", "1"}]]}], "\[Element]", "H"}], TraditionalForm]]], " for every ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["h", "1"], ",", RowBox[{ SubscriptBox["h", "2"], "\[Element]", "H"}]}], TraditionalForm]]], "." }], "Problem", CellTags->"ProbAppB 3"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nProve that there are essentially two different ", ButtonBox["groups", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], " of ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefAppB finite"], " 4 (hint: each element has an order dividing 4)." }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nFind an element of order 12 in the group ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ ButtonBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "13", "*"], BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], ",", "\[Times]"}], " ", ")"}], TraditionalForm]]], ". Which powers of this element have order 12. Answer the same question for \ elements of order 6, 4, 3, 2 and 1." }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"G", ",", "\[CenterDot]"}], ")"}], TraditionalForm]]], " denote a ", ButtonBox["commutative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB operation"], " group. Let ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " be two elements in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of ", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ".\na) Assume that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", "n"}], ")"}], "=", "1"}], TraditionalForm]]], ". Show that ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[CenterDot]", "b"}], TraditionalForm]]], " has order ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Times]", "n"}], TraditionalForm]]], ".\nb) Assume no longer that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", "n"}], ")"}], "=", "1"}], TraditionalForm]]], ". Determine integers ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{"s", "|", "m"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"t", "|", "n"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"s", ",", "t"}], ")"}], "=", "1"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"lcm", "[", RowBox[{"s", ",", "t"}], "]"}], "=", RowBox[{"lcm", "[", RowBox[{"m", ",", "n"}], "]"}]}], TraditionalForm]]], ".\nc) Construct an element in ", Cell[BoxData[ FormBox["G", TraditionalForm]]], " of order ", Cell[BoxData[ FormBox[ RowBox[{"lcm", "[", RowBox[{"m", ",", "n"}], "]"}], TraditionalForm]]], "." }], "Problem", CellTags->"ProbAppB order axb"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\nFind the multiplicative inverse of ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", RowBox[{ SuperscriptBox["x", "3"], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "1"}], "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"]}], ")"}]}]}], TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "2", ")"}], TraditionalForm]]], " (", ButtonBox["hint1", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Pol ExtGCD"], ": Thm. B.13; ", ButtonBox["hint2", BaseStyle->"Hyperlink", ButtonData:>"FunctAppB PolExtGCD"], "). " }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\nHow many binary, irreducible polynomials (", ButtonBox["hint1", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Iq(n)"], ": Def.B.15; ", ButtonBox["hint2", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Ip(m)="], ": Thm. B.17) are there of degree 7 and 8?" }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nMake a ", ButtonBox["log table", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Log Table"], " of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], " ", "/", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"]}], ")"}]}], TraditionalForm]]], " (hint: ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is a primitive element). Use this table to express ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "20"]}], TraditionalForm]]], " as power of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], " have order ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"m", "<", RowBox[{"q", "-", "1"}]}], TraditionalForm]]], ". What is the probability that a random non-zero element ", Cell[BoxData[ FormBox[ RowBox[{"\[Beta]", "\[Element]", RowBox[{"GF", "(", "q", ")"}]}], TraditionalForm]]], " has an order ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " dividing ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "? Give an upperbound on this probability.\nConstruct an element of order ", Cell[BoxData[ FormBox[ RowBox[{"lcm", "[", RowBox[{"m", ",", "n"}], "]"}], TraditionalForm]]], " (hint: see ", ButtonBox["Problem B.6", BaseStyle->"Hyperlink", ButtonData:>"ProbAppB order axb"], ").\n(In fact, this method leads to an efficient to find a primitive element \ in a finite field. It is due to ", ButtonBox["Gauss", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Johann Carl Friedrich Gauss"], ".)" }], "Problem", CellTags->"ProbAppB Gauss"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nWhich subfields are contained in GF(625)? Let \[Alpha] be a primitive \ element in GF(625). Which powers of \[Alpha] constitute the various subfields \ of GF(625)? (", ButtonBox["Hint", BaseStyle->"Hyperlink", ButtonData:>"CorAppB When Subfield"], ": Cor. B.38.)" }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nProve that over GF(2):\t ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", "+", "y"}], ")"}], RowBox[{ SuperscriptBox["2", "k"], "+", "1"}]], "=", " ", RowBox[{ SuperscriptBox["x", RowBox[{ SuperscriptBox["2", "k"], "+", "1"}]], "+", RowBox[{ SuperscriptBox["x", SuperscriptBox["2", "k"]], ".", "y"}], " ", "+", " ", RowBox[{"x", ".", SuperscriptBox["y", SuperscriptBox["2", "k"]]}], "+", RowBox[{ SuperscriptBox["y", RowBox[{ SuperscriptBox["2", "k"], "+", "1"}]], "."}]}]}], TraditionalForm]]], "\n(", ButtonBox["Hint", BaseStyle->"Hyperlink", ButtonData:>"CorAppB Sum a_i^p="], ": use Cor. B.28.)" }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nHow many binary, primitive polynomials are there of degree 10? (", ButtonBox["Hint", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Number Prim Pol"], ": Thm. B.40.)" }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nDetermine the binary, ", ButtonBox["cyclotomic polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cycl Pol"], " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "21", ")"}]], "(", "x", ")"}], TraditionalForm]]], " (", ButtonBox["hint", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Form Cyclot"], ": Thm. B.39). What is the degree of the binary factors of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", "21", ")"}]], "(", "x", ")"}], TraditionalForm]]], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nWhat is the degree of a binary, minimal polynomial of a primitive 17-th \ ", ButtonBox["root of unity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " (", ButtonBox["hint", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], ": Thm. B.32)? How many such polynomials do exist? Prove that each is its \ own reciprocal. Determine these polynomials explicitly." }], "Problem"], Cell[TextData[{ StyleBox["Problem B.", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nThe", StyleBox[" ", FontSlant->"Italic"], StyleBox["trace", FontColor->RGBColor[0.996109, 0, 0]], " mapping ", Cell[BoxData[ FormBox["Tr", TraditionalForm]]], " is defined on ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime, by" }], "Problem", CellTags->"DefAppB Trace"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Tr", "(", "x", ")"}], " ", "=", " ", RowBox[{"x", "+", " ", SuperscriptBox["x", "p"], "+", SuperscriptBox["x", SuperscriptBox["p", "2"]], "+", "\[Ellipsis]", "+", RowBox[{ SuperscriptBox["x", SuperscriptBox["p", RowBox[{"m", "-", "1"}]]], "."}]}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "a) Prove that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Tr", "(", "x", ")"}], "\[Element]", RowBox[{"GF", "(", "p", ")"}]}], TraditionalForm]]], ", for every ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["p", "m"], ")"}]}], TraditionalForm]]], " (", ButtonBox["hint", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Is In F?"], ": Thm. B.29). So, ", Cell[BoxData[ FormBox["Tr", TraditionalForm]]], " is a mapping from ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["p", "m"], ")"}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], ".\nb) Prove that Tr is a linear mapping (", ButtonBox["hint", BaseStyle->"Hyperlink", ButtonData:>"CorAppB Sum a_i^p="], ": Cor. B.28).\nc) Prove that Tr takes on every value in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], " equally often (hint: use ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], ").\nd) Replace ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " by ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " in this problem, where ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is a prime power, and verify the same statements." }], "Problem", CounterIncrements->"None"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Appendix C\tRelevant Famous Mathematicians", "Chapter", CellTags->"Chap Famous"], Cell[CellGroupData[{ Cell["Euclid of Alexandria", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ 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 XFgQx3trHixYYdxkWb9lOjdor38HfrehkQ==\ \>"], "Graphics", TextAlignment->Left, TextJustification->0, ImageSize->{90, 109}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: Euclid of Alexandria"], Cell[TextData[{ "Born:", StyleBox[" about 365 BC in Alexandria, Egypt\n", FontColor->RGBColor[0, 0.500008, 0]], "Died:", StyleBox[" about 300 BC", FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text"], Cell[TextData[{ StyleBox["Euclid", FontWeight->"Bold"], " is the most prominent mathematician of antiquity best known for his \ treatise on geometry ", StyleBox["The Elements", FontSlant->"Italic"], ". The long lasting nature of ", StyleBox["The Elements", FontSlant->"Italic"], " must make Euclid the leading mathematics teacher of all time." }], "Text", TextAlignment->Left], Cell[TextData[{ "Little is known of Euclid's life except that he taught at Alexandria in \ Egypt. The picture of Euclid above is from the 18th Century and must be \ regarded as entirely fanciful. \n\nEuclid's most famous work is his treatise \ on geometry ", StyleBox["The Elements", FontSlant->"Italic"], ". The book was a compilation of geometrical knowledge that became the \ centre of mathematical teaching for 2000 years. Probably no results in ", StyleBox["The Elements", FontSlant->"Italic"], " were first proved by Euclid but the organization of the material and its \ exposition are certainly due to him.\n\n", StyleBox["The Elements", FontSlant->"Italic"], " begins with definitions and axioms, including the famous fifth, or \ parallel, postulate that one and only one line can be drawn through a point \ parallel to a given line. Euclid's decision to make this an axiom led to \ Euclidean geometry. It was not until the 19th century that this axiom was \ dropped and non-euclidean geometries were studied.\n\nZeno of Sidon, about \ 250 years after Euclid wrote: ,,", StyleBox["The Elements", FontSlant->"Italic"], ", seems to have been the first to show that Euclid's propositions were not \ deduced from the axioms alone, and Euclid does make other subtle assumptions.\ \[CloseCurlyDoubleQuote]\n\n", StyleBox["The Elements", FontSlant->"Italic"], " is divided into 13 books. Books 1-6, plane geometry: books 7-9, number \ theory: book 10, 's theory of irrational numbers: books 11-13, solid \ geometry. The book ends with a discussion of the properties of the five \ regular polyhedra and a proof that there are precisely five. Euclid's ", StyleBox["Elements", FontSlant->"Italic"], " is remarkable for the clarity with which the theorems are stated and \ proved. The standard of rigour was to become a goal for the inventors of the \ calculus centuries later. \n\nMore than one thousand editions of ", StyleBox["The Elements", FontSlant->"Italic"], " have been published since it was first printed in 1482. \nEuclid also \ wrote ", StyleBox["Data", FontSlant->"Italic"], " (with 94 propositions), ", StyleBox["On Divisions", FontSlant->"Italic"], ", Optics and ", StyleBox["Phaenomena", FontSlant->"Italic"], " which have survived. His other books ", StyleBox["Surface Loci", FontSlant->"Italic"], ", ", StyleBox["Porisms", FontSlant->"Italic"], ", ", StyleBox["Conics", FontSlant->"Italic"], ", ", StyleBox["Book of Fallacies", FontSlant->"Italic"], " and ", StyleBox["Elements of Music", FontSlant->"Italic"], " have all been lost. \nEuclid may not have been a first class mathematician \ but the long lasting nature ofThe ", StyleBox["Elements", FontSlant->"Italic"], " must make him the leading mathematics teacher of antiquity. " }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Euclid.\ html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Euclid.\ html"], None}] }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Leonhard Euler", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ eJyN3QnYbtdZ1vG9z0nSTKU5h5M2DbRJGkI6tyd0Hgh2SKG1s7R+BSppgTZA 7KhUqyIitRQElFIoimJFJGjVOoJjcZ5xFhFRUBG0WHCe6/N73/0/3f2u0vJc 1znv++29373Xute97vWsZw37hXe/9fVfeu/db73ntXff/Lw33/3G19/z2rfc fNcb3jyHzq7Lsrxq/t178+L7R+Zr/z349ivHrhq7ZuwBY+fHrh970NiDx86N fcqYay4bW8f8dt3sfmNXbea7a85s5rtrz/pvechy+Zh73TB205hnfPrYbWOP GXvk2M1jnzbmuLT0fOnr/qXhirFrx1wj7aXBMb/1+MMPlgdf5veuf+rYF459 9tgTx16w2Z1jnzvm+7PGnHv02GeMPWTsM8ek77FjjxsrvQ/fbGBc1ivvuOOO Sdf9L8ipp0kNhK8ekwIpu/8YhKXQd+el8QjXNZf5bSiG9NnNynnnzmzIut69 HjgGOamG8rWbQVQOHjr2KZu5XpqgJq09c1+yzkvf/rml94jsucvc33movHLs 2WPQfMnY5419zthdYy8c+6VjzxyDLNSgecsttyxnbvH/FbfcOibt/pQPebju uuvW626//fZ5/PnL91Qr0QHDZNSPPnVMJgHv+gpgo+QRt1sWeZH+2O1v+Iev W/sphsF2yvcOJY+lN47Jw9PGHJfeqzdzH0l0L/cIV/d0zPN8frQMzy7VGCm8 YmPt5P26QwmPvWgMhi8de9UYTGH7nDFYwx6DpeWzxpQDPJW5tILGd5/yI42D 1LLecOHChXnGE6/FSsCpS3IhhaX6gNeYO9CF+c0Fd7lus+4YcgrHNZUitruv Qui+rq0OuweEnzAm5U8eww5/XxyTk1D1m2pJ6IYeZN3PtXt0XXcaXXl11m+g +IqxL9mMBkDX58vH7h572Rj9oB2/fAyLpUseQxfSnu++k+VlPX8s5qfen+K5 kurJraeGFqOCDxtT1hBTGhC8fjN0lnM5UXc9Df/8zvdKrlJIN/wNdc9wXzml bu6dJqUBe2RPo+sa91fSnp+6O7cp8yW1VZLlS33/orE3jn35GFTpwy8Z+/yx 141BE6o4/aVj0ldrALf0IGTdfn3g8Y9zj4cYTuJYOr8XBb+ADoXCJ2hBBaLK 76M8uWvBe2Xpic5B+Elj1UT3hUQKqbxDVs60H1KvlKWjEoaqazxbaaYS0uue 8VBuXRd6zkO7v6UNMp7bvZWkkuka9QaqXzYWyrh7MnbP2K8cw3GKgduPGnv8 GOXwHZ6VMowmSetNxzRccYUicYEMdtGk8cyBYi89sAxWI9i3b+p+SzqRPwG3 GAULJeu28Pb82AqjxFzZyvtWr85jvbKB54XN3B/OzjsOS0ysxXPcvfIPPFM2 wg2GaUK4usZnnJI2efIs18gPVYY1LDFZK6eW4QLs6Qr1ps705K7NnjEW3jds Nkle1pumMObeJys9kAs5l9JyKlf+hqICcL620/VQlUvXyHn1OeSUtjZCW1ad kkOsumWz7uVTKtUeJeq70nWfSo3JhbQpac93L+mXNt+d93woYkD5SWcgD1Xp dT7Wq32Qcszfatkbxr5y7LVjkNVaqNm1hc8fozvYD2nI+x2GS3tYud8q59Be 5FYqpVbqoKxM/I2j6ms+svPuoA3ANeg5B819vXzK2IvHtNpS9oixNAm/3UPq pVSqcemXjVHMLx5TR+XqCZspMajGa8+UFunet8/QdH+oxfW8OeeUnuulNy9H mqgwHkuXPOPzbxr7tWOvH5Me10jLc8fwW7oxSt580j9I+3vPJn7GeuGY+TsP Pk283rd1EE8p5NKnVMqZO+MfbtRD8R2iroUU757Sfc2YT6VajaYYcvcVYxQS f6CszcEnvNJGUUe5lBvpzJUM7dpxzJBmSgbFfG25xQLXY4har76l0sfW5obF MQhSDCrxG8a+YextY18wJv24i0UYgkF47bnQVSd5RzDJB8gbG5KsDztm+86r ExI/BNRpIXFcpfBdhYy6nFvUQTtFLmNoBHjFL9ES+LVjwFPJqgKaqV8x9uvG FArgnzcmIz45sW8Z81sun4wAL7muM1OTKR3+znGSUYVT9ZM/ld19peM02O7t vML/6jG0/qoxf8sDqquqqEvonj4m3/KLDO4ZKdwrN8Dd9YGuPYJ9xVLfEFj5 hEPqM4d2/aU3KAt5PfR5tmafBEgDsXPOs3wqUPlCEGSAk3RJJwzLO1yQX96R gpvqHoTzszaDe79TkWoeK3sdxJzQMPB8EuJz64wdmnH3g5eKwpmryd53nPAF vlVEnUGypllU4XDCMzwfgX33DGnDPZioPM7Xd2NTh5f14Ue9OjnvKqlxZU1S DnndXmio+qXQE1QlDFZIzkMbGpoHqSUPmha/gTIkIZNL7ZhCho5nY7cqC3Up jhlyKzeRQRoLIsg1pJUcFJ0vPKAGcmZcQz7IFLmS1iuOLdaydwzJAbTfNCY9 0qohkaZfM0beMFdjULfV356Tw1tQJgnZmvNlve74jJNDHTodrlEHHZMjyENc auoQ47dr5JR44QUOOQcJOcNbqVG+fu949Tf++buOD0RePUY8lb7US4P6CW25 LzQEQSxx/0du5tq0o06yZ7hGyf/GMS5zHZm6lrngnqdOfusY1y93QLrUYTpD +5Q+VKVHM4lF6q80S4P75zC5r2q0XqPjOGhfJVXQCO0a+DgU8soT2mpJHRjn oe1pcgg53KbY+I1HFEeDDn38U/sK0rm3kkkV5UjOPAuifk9R3F8aIQ0F9Ugu UxhpwblCI3JbMIAiKEUcde/6FLmsdRLwHQa/agyXPRfzqlNKHNryhnnY5Xp1 XB1Wv5Ss4+puwYCj+7dx+0F19/byHa9qYB2TW7kqgAY1yMo1fa6WuT6EKY2a qa2pIwxBaMuxHP2hse8Y047iUU62egVNNRZK0lC4xLMKQEHe9dJTXVGD5YEi vGYMp90r7ntGXcl9p939MUI7CXGYuAcE4aQN4dJCHjbS9bLN1AuswHlp2Ac5 1uVYiU4uh7Bfuqvv5Ra6vuNOXQto51zLkZR7olTI/QM3w3eax4nG6bwMvJEq /PNb6P+1sT8/pgZLtfpSLj0bso65vuc6V2BYCSkZ5/G2FtLvPEvLiN+pZB4U VHAwLqq3fuu73/yOMaqmTihR94YJZZMfaVWS2CYNmCXf7l8XbAuEjJIce7cn V7hTnbc0UE1xZwhLIZ4U2HQHtRAP3NHvcBTa5VbZ4wC0HVd6UgRtqYeGZ+DP 3xr7h2PfO+Z6qEFRKUoDPcThNLESljPn5FY6U45iutIFrQLPEFZC6pb7yVNd fr+vpHFRmt87xv+8d0z+ag9wv3Cgc+4pDa7xWWjjxs2IyXrZMdR3citkcssh /ZjN8HqPdIGrus0pCr7LNS5pGSCiRqVlWjP3UvY6ZvjcM3Djb4z95NgHxvxO bj2TGvm9Y3IR4nLjXlqrwnNQ8Ny6YhCUJ61j3RBouxckKefm6B6CV9LPX4EY bittPQEKR/OlRT7qcAqwOl6PQmuJ70qS4tWGKPnjYMvWbb8jjsTrx28GIQjv gyhyU6fS3bQCcuYaOXbcb/AYGk/ezP3wFpf1WZyHtmf/wbGfGsNx19A79/J7 rSbuuAe1cBzaSoE6PHMzpQM56ahTC11tBj9ZXdh7A/JTOAvajuXvu7fSpHw6 k9oTPFZP1Fd188s2g7i6QzUbPKgPmGZT7PWqY5z05EGeImWhfXEzaNMyOdh1 em5wNym9FJAfq+tOYVxfeadQcgMdLeVbx/gfzuGq2vqvxn5mjNJAwrlKJH8I okraJ/QhowScr7suXYWVpBka+claZqWQIkproTLHIJ9PojcDcd/p99ePCbRK t7oicIL7v3kMv5WC9MIP4/aDqsdW8jiQePIMKS+ckoLgUKEqnL55M0rRECmN zPPKZ1Wr8wnUykJXhZ/kWmk01Akpv/m7Yx8Z+21jSoe64aSc7IdQoZ4uQ0yt db4gRf1J6ZFWel2/ABsoX2HokIYO709aCt1LL07zTb5lzOfbNsNzaZG2Xz0G +frN0lE4dz/4si7HVvKVt0kxdKGQRnviQzbL52RxQqrlynUNEkAbooWC+AN0 zvVyetNmBcbyJmk3n+Tnx6gKzlZadL4eFATqvSutFEadkVPcosvShBHSTomU nvqbntZa+g4R6cNBJek6z8AELeC3bVYgkHrkY3kuRqg/+F6fQCl/zEDcukyO QL00IlmAB7SJcMVQQCK3poig39Q5jNjILDsaeNVOFtxH8sGoCDSfYHA9t+9P jpESwk0U3c9v3jlW91w6FY00gJ5U3blZ4k2cFaXsSofnF6RBfEXuGhWHJMpL XXfPc510gluX6zvHOCYCJ0UkHde4EPfcWr+TNzht8x0u20E9yB367EG69675 ZSl4+pFqNzmh9gWr3bpsYJqsgLKeoWT4lEx9HIyhdvy9PzPG2/6JsR8ZE+Qs QlNPVHqwjyo718B2HnBDRIqhvrK08Bxcq75Lk/NowB+o9dlrjnZOTYSFFufN Y9rIbx7DbhpHqeu7U3XM1nbKH1oUu2iChwZkvd/Wi3xgE0KgDO3TmuLXDX00 sNWAuzue28xxvy9aQD0bGEcyPheyS6WcyMG/H/t7Y7yRD4/947HvHqOKfk+r lFi9S4hI19M3k+70rAGG/NEC/vX0lBq0lZCWKbY4VjsvXZG0mACNe9cY3/SP jqmI2KJNbPhGRZVXaZaOWhVMNN663rihfZsqk0Ln3zV0k+dcRKHIg899BK3y 9Lvirvimaitv94WWKk8SlKI2R5uIz/9zs3809ufGvmdMVXV/fKuq1nOEoNJT qphR5FK6ajubaoQB1BXaSspvpKH8OJafpoQgjqtkyn38joS8b+z9Y6QFv9U7 JaLOKHlpkpbiuA0bHZXkGBg4eVSIQqphmkScNfDUQGredpEzKuJ63JADqZXC IvNSXZtYJMU5XvB/GfsXY/91sx8f06P8s2P6JPw1JYebVMj9qoeegVuh7xN6 9b9dJ/dNj6AQUIaMNBQPpUBNd5Auz1O3+Ix3bEaJ9BJ+69h3jUHcgLsSV6pd J5/QDovqzUd1u/EZ5dhALJ1U2z5e5KEJJvuocNMT8AoyUPVkuknXmt6mZkuh XNG+fzKmafzpsQ+NUZZ/Ofanx/R/cFlp+o37uG9jS3KnuXXfopbN1ZLGptVB 9FmbNe2niSlNHcLBJqq4P6+aXuuz+F3jInoJ6t0PjL1jrLraWIJ01OzK4zaJ a1lvnosOsdbbNqtXXxRC+VMFd8vvq/fY5Enfi7QpEcddSwWoiGvqVzclsL4t Pqbd+uz/dAyv/8EYXxCP+FXxw/3UB98dbyiyqAQkcVlLuo86QwCPIYJFrqMs fiuf7lPfi/kdD1orrl/jmRwRXMZv3rZjv37s3WPqrnvmozbewmB5nAy16fZj ebSurG9ejL5oghQ2BF10JM2DPs77Ld7jlU98gHA1070auHUO2vRURPvHxn5y M6ryz8f+/phW6ZvGINn4geshCjluopxSF8/ADunHbwirY54lb5gSEs7hNwUp rgXlvAB4QBITtC34zMvWs+RP8bbVSy0lfmtF/UYapKtpTIzqHvvsW6z1ZdpW T83Z1orgo5oB6Ub99v32Jj5AM7Sb9IK/FEgKikin4xCHfDF6z/y+sb85Bm2q 8mOb/fAYRcErKNNwv9VqeoYRWtyDqjRLq3SpQxBuGmQt6T7eKm9Kmy/RKFHt kLRrFZU0NeH1cbZx2vO0J1RFTMqY2m8Z8zdmhlmTKWB21O1jWPHkDXkuIdkE GijvJ9g0ua2IYN0faKdClanar1WSQ7mqjqi9ah3/Qg5xXUq1PDQct3mB/BSK 8hfGtJg8sCImajS1kFvRFSURouqbc3gGbe1EI4VY5bi0QVT6lVRxLemUF/nA BtEciFMLEZKvG6MuVKSpaNIgQoj76lkqKZ9NrjiiPQ/iv71DCjwdGpDMA/TU h25WX1uOtK5nFcXyebepfc2KaBKeFOO0lgWyTS2SG8/Rvstl4xNyQLP/zdiP jlESEZM/NvbvxuSUD4DXeKX1ww58k2vP4qNQGs9vigrE8sXztxvJkUe89zts kybXN1muGRn3bIbD0H77GIQ9l4/kGFWRV6WJYX7f1JWjZk9FwevvwAmpwD2o nx7RTl3woL6ma/ytZLQCzc/WDtfbUWPxRSulFNWwWiw54V8oBef00X52jAco AvgfxvD8j4zhN1T/+hjd1II15YrPIteNWEoPtJtb4XiT6CmGfDZRDptqV9QZ aqUk684rQRqd0qhPVEXLTdNFTGi2kmh8zKc8FR3h54zjuazPmQuh/T2NNBQB 9JQigfVK9mhDusUT6ffeV28asdqKN+4LfZ/4VtxU7a2Px5vSy/k/Y/9x7L+N 0fA/MUbT9S0pyu8Z83tcdC9IUIsmnTZnQdr0V9XqAjq+N3LZyH0zYerjUg56 7d547/4v3wyfaTaOQ17LSa+V0hduptWWz+oTXKeRXdavHqmB9jeXa8jQROXt SX6V19dYQpz29+bZnHc+fz1Nb2THMfesj6btbmxUzvFTqvXcof3fx/jdPvXk /9SYOKfW8veP/Z0xOfEM3FLPeIJqNJTwSyusPhb2UrLSg7/1duRRurS26gZm 4TvkKBatNl9HfaEOtB8r9ZAg2Ei/UhDTUcfEU5rkDROaoW7cd999y3rfOOjQ fm9cLlKTJ9UU06a0S7G71ELKUVNLfRY30a5DU0nU48f5arD71xqp5fxXSNPs vzJGp//1mL+NnenFCw5CnC+OV7XEUHY/aaeXEJFupV7/M1WotjdhWz2gTFjm mN8aI8NfvgeVgLy8qjdaQSVA3/PrlQI8MDY/pbkYSkHrPsle1h8eVxLa73vc ZpBttB3n6h37e7+MoZhKM4FaFpIP3rTTolQQVycKmRajU3pyIsXmNogB/r8x yP+nsf8xBnUt5g+N/dUxPrj2H5Ii0Z6pF4K3UK3vplQL8Uo37hYJc74ZW/kR EIrH6p9S4EtrEdUdOq0UcFVdVCdghZ3FSmDk3v7Wqott/uGxD37wg8v6wfe+ 973Qvu80ujhY/I/tF5XVYqYkLctqkjHUG88Pfdc2b8z9WvDgOM5BCOJmMP3c GKRxmob/5zF/aynxnt8iavXtYxBKoeiwWk4BpbfSbp6R/OEbZamlVhfEQqDj 9651DnchzM/AddEnvkm9G9+h3lg0PZcWHKdQ6oQ+Al6Pitw3oC/r977vfe+D 9gcevRlEQr1hg0ZqfiElgXiL3JrSXUsJbf5mIz5Fh67ZrAm4rYDAff02OaKD WktxEyM5OA5p8W+c57/8vjF+NsQ9A0paObxTqhCv/fCpHdKi0mmotgSJCmxT qy9QVCg3Md71rnFMaWqdabPWMBZC2DNxXiRWq86XUl//wNi46sv6buo9aH// Ezern5/v3dwZ3INqESk5UQdaStAsuuaKFR8sBp6XWPyw+tEs1CaqN38GerjO E/y3Y1pNniGOazmVArURO+QlGtjBWSUHDR5ZUTD3aqErdPS4lSQPEtrFcmqD IAdpvRech3Cj8I1DuwZe8gUrWs5D/f4xnIa0yCw/ippMp21Zv+sDH/iAPuo7 PDW/mCekVuDBkzb7ZGhThUb1WtbbTKnmUysJ1zjWbKzivsx9W/oS2nruuA3d /7uZFvSfjUF9AF/OgH15+Ef44hCiwS25bZZV880giq80GDc9g07jdlE3XqIS UVpwaE5l6tMcvLxhrS7+/u4xfQZtivgg5H0apX//+9+/vn/+niSc+6LCc4Fe IMrDyFlTdwqJ5OT5e1trsZw5LKJ4yNWtZ8xVIc01sDWKNcRNA0sIfCbngJJY bjf59onaZB3gXHHDPB8F/PZDw/qDY4TI76Vfg9ekJ88SLNDYoSOgAUsEkErV gIFq4lM+W31RUEs2iSwZ0ERwvRtceOdm7xnTLUBtx0dXlvX7ts7NK/dIn6Z3 E7oLHTf4DimoEoIGpq7cTAoTjKYwyEko+7sBOJ9ysB86aSo+pLjdwCQmEEZv f0Of0EDccdL+kc0cQykoFspuNDY35As243wW0JKGpuujelPsVUt5KX3yoUQI ludwSKH83ZsJG2oof/sYQRnGL+u3TfFC+3WtO8NpqcslLjgO/TjvXFNn2gcA 4rjpt1IrlUqgUKLcNLm6bmvBL6W5X2PXhDzfsQBX/9cYRP/2mM6N70oB5zWY BtcIDvRdG+KCtTpATVvmMDa4wbnjqhOOOjGFWBoQaZhzv3bS7zXGHEPutA6N 79yUb9hM2ISMO6arOe32sr5xWmZov4X0eKrcQRdqapYyrkP/tM0Ko+xd71ZE Nmzf0LyU4TGlql40HO8a50hnE7nLYZOKlHbhEx0dbrfwICX5uc2cg7xPoZXQ ZkrlL47pYrpXiFGFVqtRliaJQ7ZdG1pX3JQbdZaialQ1D9xpikEpfBc60f2E LodRF0AHyfe5bFnfMz2fuc9dX4d77iLnFKWpjVAoEA8h6BdCbhK3GteuCK3N dZ5WyoHScC/oOt/wSCGUhqs9q8lT6oWc+q3zf3zsL48JwHJRcPinNzPkg9vc cuhzXeogUR2KI3gr5+4LOY21NDXxNuXLcd3W8R233LjuMC+QV46yQE0gRCcB jhCA1lvgfxIYXg3aD/tXnXqs/haOpHqlkyVf6nnTj+lLk9Qb0oKHh8NfLWh9 YNi3FruFRtoRnzCsY9egpuvoU7scNGzc9DlZ1RUWJPlLYxxtrOaMYDH3D87Y TE+0kY43uJmSc3o9J2Y3xQ9/wr5B+q5pvXHdH0rM6eBwSI9Pzr5PgW+Bdy0A oF1fh3MqzrK+eEoJ2l/V9DqaT0ua0skloi/Qa11sw/fQ9721hulMpQHppuk0 VfpRmykZeuOzwJtQpvZQOlrRfNtxbPrgBsoFJxbamAxNqgxpbIY0FtMT539i M7VASRgQorDStd81QmtRN2s/DdX3ah0dQGkIv2cz6H7rZij9jWOC8y3x0/Xh 0HMzB/hl/ZL58UGxoY1X1AuX5Q5KoQ1NiOQj5hu2kBHSeOM8Xoa2v5sDtm9z /RZflILn4bX61dRnOfRc9budU+RYW2n4DJp0hErjNuRxGKq1mfmJjlNu3R/B CpW77g5rOm5T/+K0OkpjiALR4F0oLW2e4TJeiDlq0HaOUisR6SwQqG12/VB+ Wd81xQDt79Qtxa1yBwU5bvcdagHluqz5ib4rEag3CapAiBL5nM2gXEDM/d0T wkqiFfn97bM9VfhoUqv08UUt1n3R3dFeQh2/ofrhzSg3tP/3WOqiu69d1Vby FjCEModuu1Q05Ug9VPIQI8NkGpKhTVG+fTNoO0dF8Bvy+KyFgLbfj7OyrG/f dPuduqa8UnySM+oAyfjdMhKpbEeZuPn8zZqGtZ8G1gA2lFuzzrQR2uRW4CtF 929gRC3EAAjjEcWRDqkX3jEX00ST0KbLUKYakHX85zfDf+cchzaeqsvUsSU1 7cRUgISn4lmGlgVsQvKbNoO+UnvXZrwRJZCqKBHKR1V8TlaW9VXjtkD7K9sB Auq41XLd+KmV0gdoJif0WkgBzZa91sXH4/YxyNtQOs65p2vzSpSk3EOWv8Sv EkyTHr6Zmq9WN4FEa2fIgR+oFczPg6jWUfc+lJ3He6VDTQxw4h5WtZwMt7XG 8gJlfKYEFAQ/Qw5f85yZ7445F9o4zs9UJ7uPFnP+XNbXT8cH2q+Rs1pIHFKL lYBUtUC01it+px4t3mhqou/5jPjt+ny7FMl1aXsDie4NXf0NqEIet3CqoQgt K7XRj/hdY/zBn9qssBW9rn8f4uoB3eZD6m80yfXCccOmw+CldOm/uzcUC696 PuQhh6tv38z3SoVaKAFKkz+ijkJeQGYa/2V9zdAG2m9TplCW65a3Fk6k3Xni an6tVwv0WozK8Feq210p/VeSta7P2aywvedKHT5I4Zs3g/gbNysgyISrlDD+ 03HDCvwNaEKcsmg5cR3SjvG+6b0+CGQgoJ41na4hswYcW3IAdXyVHp5cypBK OOac30Dab0Rn3OcrNsOgIeuyvhrmy3LhHU2lb7gT2tRDKeSnxHt/x3sIt7tL Pc+hzBm8WZ79lBzF/dqjCkxhAF1BSiQaSJi/Pa6uvQLdz4NuTbaCJApccCNo RhmIRSNraN4sCeC7htMmkKFgJbv5Is1lRe09fYGtKiggn6ra127me+ekncz7 LdgA/obNOLVHB3AyOWC/4M2NTzB0bsMkguLzuZsBvLHn6NqWMq3zaxyzLe64 zIkO9HI3lAB3pCi+a5qb18KFVua0XVYC5v6ei6Jm+hirNI4DbR1G8vwjmwmq +DTXWidE4wYB9/AMz5ZHdERVCHKbIfo1m4XwfF3OOrBcc+mYZgVb0J0I+hvq rb6ZQ8t67xb4e4mnKA9yA23UDVnIQCRq+57TRiygA1HINgLbuigNWyu95Azd c0saA1ey+Nzzlbr7V72IiJLReOOdaz23kKhjQppCVDhNVIxZakQd0xkSBiU4 GjGI6FYoPWkhlu7tvr4TL1KMk8lvYuHYvZv5nrjgsc/qpzSrF55FSEwMXd80 F0P7EHZU1nKu8cDb3G48aq20v+vIF7pqlUcOomuoQ+5KYz5KhNgope4HVa4I JIzb4aYxSGMcGibo4C0qyZncQ1e9g7Rnup9c6fQUroI0CTeSbCYEtUl6K2kC CTXIuCcMoB03HYMHzrcFkNJvrkjjlLlqUHX/VrVIE247f+T2qDS079UwcW3r yPjefid0193wC5JpbTt/tBsD9JQS3tRJoqsQae0fhVFr92i7t+6Y2p4jR2cp g5pvlo55JGp/q7dqeDzPPTwTqhpDrokZ9lwQI8W6exDF2db9yYdGTSkqwTrd uc50nYsNPWjht+dJ6ys3q046p0QKiUife+K6Z2KxkN/6uuMCsqseC1Hl5azy +vzNQtvWLWcOG7i86EV19dJzVjc0BzJXPIewtXI1pp4hVW1vKoqGk9xknRIu M/cYyvhu1RO+6+S0wggqciTHnodP5lJx+NxH6Skx867kWD6aB6D0uULSjMfN xcZFKGv1fIfgKzZzLcVxrA45bfbd/aWFesDQPSEP021l1/piBF+Wa8+jWmFB lAamByhClQ4dE4/RkTPEZHnCc9voziUpe53QgrW8CeHu9qNp1h9rxgbV5U1g ozaO9+DT3ByuHI/DWCrnmvvmetqDkTwGeYKBzp0yUl7aSaOBQkjNxBYMaZO/ 1nBiIazn44zvy/X3NBk7ycldUJGSn3rkPl0LYt9VoqTEcU7OMGtZX7tNH37a JuNvUmVU75Y5wJqzUMwEgEBrzIxYN8aAoPnVfu9YW0shU8tyORqOtdwIUEYc AdqUnNw2gCG5Zk9vm6yIKCEs0mv6AM/HTUj9LeYnhqJwINfydr3y/e6yIr94 VXNGWgpJJx3uidBJFuQjd06IZ6sYfg9leLYEHpmOrt+2xc4Xt9ubO0GqOJ9y ac/GBBhqxfI4Hk0Pbrp70tDupU18VTLQLbra5BS5sMRDtVflNXU5zFAW6/M3 OSHCRFypQF+zql9YzEMN1BRy/VQL0aL2uW4da8uTmVEZThOmQS2HGmfrH9YD x+lk0z0dy/kg4CnDVk3ucby9AieLy/ryARXaryKi9drb4OHZmxXp9JmTcXqk EtJypKTajgSy7eRZnEWFJtpN4oa253HToPmDmxWz1tT97Gb4ytGA+AfHdFOI uRLiQLfEHL8s0lYPxC3kraaxBUTEu32e8V0+W64E7aZN4ijkcDgRrnncuisH S13SB/Up93Gb7rOsoj3Qflnj+tD2VHdVA6S+3aSh3RJTaLelR5tJfPZmKQhk 2+2zcTcOudKRe/x3D2iIMNUMiu1xSDgX1KDIEq7jq5gIB5qSKBm/I+XQ8Jw2 EqQOuYpKn5oYGWhfeRxvB2PM8FsIF2nS/EGMQmga8JZT3fZqvucS+oR01/gb 15t2OclYVovgRb4OW2rUjW55XavRcb49SPEj57lJpNvC2uUMiJe7nrSfaNXW OPiLP8W8G3nwTNpq6hZVoMOQp9eQ9onjNLxFN1TkBzbDcQ41rZa75mb0vDb3 2I+S0+92/KYkvmMPVqn9eA3pnG4o4ry/KQO+1q1xDKLUgwNTN0eJuDZ1nluv Lzqu+jh3qBR5Z4Wg6zOqNImDRk4PhfTKCGEBtsb2zGFOzG2PbcvSZLx5zq36 89u2M0UL0swb4UUEsOCoQFITRniGeiqkHcAoTUj0ggiQ6gCE9oRxbzGUVigd N8y6aWkT39blonWvTGgOYPKswFTvJBohAQvoAq+t2usYEQOwfLle/xx5zYdZ bznuiXBy0m44SVKDZZ7YgBWqtoYS0tBvtleD60oCkoX1mlwlkFkJtAOU3+mh i+oQBnJMKCDLD0Tn1iQYboE23w61IQ11vxH203Bq2OSYEKB4VCYgrXdpTnm0 3q8JwgSN7MlmDXgoAXQnKNBDXTQm7+1MQsSIkKoAP1KN7kpBCQ20y/qCI9qP fWX7KrhqCwy+2lMSkzaEbf+G1hM6hk/N92v4XOPXGkS2f30FF4Xn2w5nuChF eio4q2HEc7Jtfh/e59ApDeiS7gH9DOSXR/yQwxxrno2qwgkHeFFr1jsVmma7 f3OAz7ZyjZaqOxhQHaDFVQGYNw1gBSz5NAjYLf5Q1VyngIazy/r8KcF51p0v 7+0UjcG62qe/Ub6IN8DoBcoWHnFs//4DNGkv5vYvaTMBYCtMtECPNmCSSl1E njY6G78ViTZ/odk5wOcLCuNRb4BrH3neqE3FnTf6qAro5jSdm4fdJldtN9H8 hTbGlXZ5hNaXb4bGUIekdlc1lG5tYAKjJCBa11HptLmU38NxNHl93nFq1CMu radrJWN7PVDcdq7CZmC1Vl9GUsn2v2xyWTtxNmnHOfShISLLADUdoVUGgMNg f3M+OCH6kk1zGgFfzpDx5cKHRED8BsOBbbKZJlbTiuJ1iQwZiJc2rNv25u2d til3WPtTcnvfBIbfvRkcG68h0jEf1soBvtso2OubDI5TjQnMLdfncLhHs5/Z MCIdhm9D3q22V+Awi6gw1hL6mw42Caed05AY1lwBWtgkPmqj2lGKsOY+6yo2 aS/F8MkVQXL4tz7BMSTXMurccALJB2JTFUokTsKB5MJzAqWll5TggkpXK9k8 8b2qaV94CFo3+o3kOXrICmCtIUlppnHxwbqbftcEpPGMlvXZ43tB+9HtFaNY i8e1eXdjLq1Q7TUHWL7t+XpNK/CbEb/faaNdNVRl/oGnc6mhCW1dPlLRri8M 6hja8KKSaMJC05+0ogQ6n4TziN3Frvko5EZkhUy28rp1FNItTVCW3jr1rZto T2vMK+rKkUPZIk/QVgKOuQaV63L7HeTldxR6We86zs06uUnF4fG5ksfTHrJK AIfb4wPS+LrfzKmXToRuu6HXFPUyrPY8xCttuxUcrSXAZWjTD2hCG5o/upm/ Q9w1dMgx3qF6QoNwmqaIP0k/cdWVxHt/q3/t5QtN3/Fa2nuJBvSlVSuunucB hyjuEovihTw9984zxOU8h7Dchm6X9YUD4KD96GcqM2pNOZRFa7XbWbjIXWMz OiwQr0amhPjd6xXwuZVLauw+NKFemLsPtfirGdTEQa7xRcpAfZ3bIX4G6suj Ptwc1kSFcBAW1KOywCbglJZT2tYgwO79TP7ON2GS3UZMLTdroZ4C1J+h5CBr 6Q3gnQdZMTgyAWyNny7N+rLjSwpOnl5T2FzKOiIkG5WL3LXYqe0bAMx1bUbx gzZr5nDblgC4jdYDXFWCDHrXkdEb1KyR4N87pgroP7uOq520qwZ+o1oAHv01 s35PSMx9VEjQ14yiYpsFtICq9RJ5hntPEHnkKenmBDejJR+q92S0IUHvpWjr qbYk2TYmXtanH4XkWZ+R89FQeIMAORxt4rrfNs33tqZB9zZ9aWe6Xo7TdiU4 VAyodQdaeF4e+Vbhm6fIc9NpwE/o6fjw+kIb1ZuDplok2+JSOjbiAP7mGf7O MfzEkjpXody7pLbNL4/OyfWHF+DIZrMCgE1raWtj5BQ65wOg+kCqALA5xk1N 2t4OsayvOG5A+/yb9qOPKlB99EJK+4UaKB3F2+mwVZO1j61yR6HW5OXaqrSt Y1JIAtV0g8uqs/DuzXROjOQQAz1GHh/haEKr74Cn+PryvJD2rxAo535rHxVc q+/zAaSxYAnhOB3wbheppopuMw7OoPFy/5fWuQz8mK5AyDGwW0eA5cfY33Fq 58khKlSEtYBGcb6Wp7WRRxufs+a6Y/J+C9eimb2x8P6bFdlsfrpz3ClDXgpT o2EohjMBKP0TrBZx0mQ2fNZmDkS+oInoqr6RzigdwWwuuD5U28m35TfSSEdL ZXv3TVqiD6RA5F33o/BFw1E+kROtUbyNQ+HXMFUhC46NQd/1JZtqP3kfl0bt oqeVT450b+lpc0Dq3JK8msiWpspF72eUA9dGablp6Sqtoh1FQaXc0CvEKTGa csi5g7QDyiGu/aPK+uv0oh0n3Y8OuRc67+dAcRQ097msbZTbBrmt9eBU1VY2 fQh6zUrC30Smjkkv8mg1QZ0Yw7jri47T8E8OL4dwtJlk0G8dk2NNBtlv2Srl tYGtFOt4K8t6W6acukfrluSmuXwqLB6rhbjUNAVcFW6ysIJiE4/aUohTbrzm 2MRpbSp+QdPzUudmskmLfFZnm7fdos5CVb3ZC2ottCwY9IjNwqyNG3KJY2Ib Z29d7mV96hHtJz2ybdQaBSg1Xd2EpVZEtqVX27b1Cpu6PPG4ReW9xidX0PW9 WkfpcLzx14QR7SQJ1t1peoLvEOZohza3UWlQHjz2O7KPIZtS9QrQlv71rpUi ZbJVayJp7RZewaBpe54VZS7rwUBk/V0EGWzts9W8GW82XRUBat/cYsDkumJX RK119709W1vL3j7JQPeEZqE5304rPt2vQP7pRZB+oz2rl6NfqEfvb6DqO+pz Fjn50GaEhS9u/omqQHxEW7Xz+zX2gA/tFoBJe7sM75cJ7hd+yBe0WiLUXlrt 3FTzlIjCqOEq+XPec7c4/7IanOX+Pax9VYs3NW8vUSh17d2QXMvJfuijder1 1Fl7H3+iV8GiJ88CwoJ3nOn6jSjccpkWjnEZoU+yOeMF61BboAhjaqTlWN6k o7dlyZ8qIH9Q/ZjY1PVLm8YU8tlvChwcBS/a+Cs/vpW2bcq3OWXLes1xUfPJ NXvFab5B9O5lTSl26r0HuzBDm3q1PQlrtv8nApviCmegdB12gwfWbjQT+2c2 0z7WsdcD0i62CaL2UR+vVa7S0vvZ5K1NcDsmz7Xle/dPvvw+T+v0RsEF5qDr HnlpcEvBc4+Vzvy5rI871ueTpX5hIZDEo9WmhU/be3uPNvVtIm7n2jyz7Uk+ GdoQ0rNpyyiOdSupoQ1Zvl/Otu96Q+Y0mItgsKo4KK8X2glFE+zaW7ttiNvg sU0fE5E8I/lrW6x6dPWhm6qbT9xrjpr+Rb7bqNc1plOvTznWn5Pzp73pttdW lm0Nha8h3tYNpVQu6qk71wajyeYnQxsn+HttraNthLy/eR5EZR/6g752UwBK ZN/MEaiL9Ouhk9pee9TkUPnpDc6lN49l/0ruvJM8LVbYM9T3W3u6tiYuIW7y tOMwsXvW+phjvTm5fu9Nu3PDjvE0RYjjp7eL2u/f0Gsoem90o9qfCG180gGk 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 /wE/73Or\ \>"], "Graphics", ImageSize->{90, 109}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: Leonhard Euler"], Cell[TextData[{ "Born:", StyleBox[" 15 April 1707 in Basel, Switzerland\n", FontColor->RGBColor[0, 0.500008, 0]], "Died:", StyleBox[" 18 Sept 1783 in St Petersburg, Russia", FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text"], Cell[TextData[{ StyleBox["Euler", FontWeight->"Bold"], " made large bounds in modern analytic geometry and trigonometry. He made \ decisive and formative contributions to geometry, calculus and number \ theory." }], "Text"], Cell[TextData[{ "Euler's father wanted his son to follow him into the church and sent him to \ the University of Basel to prepare for the ministry. However geometry soon \ became his favorite subject. Euler obtained his father's consent to change to \ mathematics after Johann Bernoulli had used his persuasion. Johann Bernoulli \ became his teacher. \nHe joined the St. Petersburg Academy of Science in \ 1727, two years after it was founded by Catherine I the wife of Peter the \ Great. Euler served as a medical lieutenant in the Russian navy from 1727 to \ 1730. In St Petersburg he lived with Daniel Bernoulli. He became professor of \ physics at the academy in 1730 and professor of mathematics in 1733. He \ married and left Johann Bernoulli's house in 1733. He had 13 children \ altogether of which 5 survived their infancy. He claimed that he made some of \ his greatest discoveries while holding a baby on his arm with other children \ playing round his feet. \n\nThe publication of many articles and his book ", StyleBox["Mechanica", FontSlant->"Italic"], " (1736-37), which extensively presented Newtonian dynamics in the form of \ mathematical analysis for the first time, started Euler on the way to major \ mathematical work. \n\nIn 1741, at the invitation of Frederick the Great, \ Euler joined the Berlin Academy of Science, where he remained for 25 years. \ Even while in Berlin he received part of his salary from Russia and never got \ on well with Frederick. During his time in Berlin, he wrote over 200 \ articles, three books on mathematical analysis, and a popular scientific \ publication ", StyleBox["Letters to a Princess of Germany", FontSlant->"Italic"], " (3 vols., 1768-72). \n\nIn 1766 Euler returned to Russia. He had been \ arguing with Frederick the Great over academic freedom and Frederick was \ greatly angered at his departure. Euler lost the sight of his right eye at \ the age of 31 and soon after his return to St Petersburg he became almost \ entirely blind after a cataract operation. Because of his remarkable memory \ was able to continue with his work on optics, algebra, and lunar motion. \ Amazingly after 1765 (when Euler was 58) he produced almost half his works \ despite being totally blind. \n\nAfter his death in 1783 the St. Petersburg \ Academy continued to publish Euler's unpublished work for nearly 50 more \ years. \n\nEuler made large bounds in modern analytic geometry and \ trigonometry. He made decisive and formative contributions to geometry, \ calculus and number theory. In number theory he did much work in \ correspondence with Goldbach. He integrated Leibniz's differential calculus \ and Newton's method of fluxions into mathematical analysis. In number theory \ he stated the prime number theorem and the law of biquadratic reciprocity. \n\ \nHe was the most prolific writer of mathematics of all time. His complete \ works contains 886 books and papers. \n\nWe owe to him the notations f(x) \ (1734), e for the base of natural logs (1727), i for the square root of -1 \ (1777), \[Pi] for pi, \[Sum]for summation (1755) etc. He also introduced \ beta and gamma functions, integrating factors for differential equations etc. \ \n\nHe studied continuum mechanics, lunar theory with Clairaut, the three \ body problem, elasticity, acoustics, the wave theory of light, hydraulics, \ music etc. He laid the foundation of analytical mechanics, especially in his \ ", StyleBox["Theory of the Motions of Rigid Bodies", FontSlant->"Italic"], " (1765)." }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Euler.\ html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Euler.\ html"], None}] }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Pierre de Fermat", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ eJy13QncbVd51/Gz71tIwlAINJQ3FJoLYYYAIcSEKQmkQCCkpLTSlIIgLQYp pqVowBocW4daR5ylTlXr1Kp1qLVq1arVOuFstWrrPLQOtVqHGp/vOft3s++9 b+7tTT99Pp/knHefvdde67+e5/8Ma+193/rej9z7pR9670c+8L73XvPGD7/3 y+/9wPu+8po33PfhOXS07Ha7L5r/PnTNzvcH52v/u/L2a0eeMPLykV898ttG XjHi9xeM3DhyzcjVIz9l5HeOfGjE31eOHB8f7y479v/bjh838uyRe0a+buS3 jPyskVtGPmvkS0feMXL7yE8aeemIezxz5GkjnzvykZE/NvIfRn73iPaeOOL8 m0duGLl+5NYR7enzN41868iHR5yvnW8f+Q0jzx25Y+RvjPyuka79gyN/YuSX jOjnXx/57pFfO+K6vzjy90Zc5x7u+3NG/vCIPur3q0Zcb6xfPTLD3i33zImD 3ZV3fvbIZ45A+GMjv39ETyD74pFXjzxv5DNG3jTyiZGPjjx/xIi3yF4+4pjR 3TXywMgvG/mpI1CE3lUjTxp5yoh7uy9knzHiuqePvH1ET3/uiFl47Ihr9OWF I2Za39424hyj/dsjnxzRr5eNfNsItLXpGISg/cZVfu/Inxz5rSN/auTfjXzN yC8cMbP/dOQfjPydEb9/1QhstPM7Ru4e+fjIt4x854i2BvDd8pHpMGTfAJRn jUDOiP7QyE8fefyIeblphD4/ecRomuOfPOK6LbL+hh7dhZxznEv3IEXn2IP2 bljlRSPQfOIqZtRM++0DI0bqu2OvHYGUvkLX3/qqffr1d0egTRPY1l8ZYXOf PvIbR/7oyFtH3jDyK0a+YeT3jHzXyPeN0BztQemfj0D1X4z8x5G/OvLXRv7Z yF8Y+eDIN4+41jGf999//265/84774TsqyH2kpFHjxileaHd9Ig+QdcIjAxa Rspqfv3Im0e2yDpfW0ZtNEYFUfrhfHP9m0a0T5+/ZIRlahei9HEZocuu/8IR aGAQbWIVs0fv9c9M+e1rR/7syL8cocM04CtGvmPE7Jhts8ze3jICQZatT9qn h395hK1ClnZB8s+NQPj/jfzrkb858o9GzNhPG2ETGAXicHvXu961W9410wbZ j+FYemlkLM4c4iPWazRG+foRvbti5BeN/JeRvzSiF1tktYHXWCMONhszg3dC 8PNG0sfXjWAU9zJ61uTTcXzs3s6FnFFqA9Oks/piFl45YnZ/5oi26K2Zw6Wf M8JSWTs+1KdfOfLFI+8d+aUjrsEi3z9CD3/GCMRpgmuhpc0fHvnHI/9w5HtG IGzGzKZz/vSIWZvu75bXDWVN349fVU+ORjCA+XQX8/WcEZbDQ+BLyPvbPP6T ET2kH44/dQQq2sCZEKZ/4+h2p7i73WuvZh840294Sw/ZBBRdz0tdN+K3fzvy P0f+98hXjrxmBFt9+Qi0IUZvtfm+EfqsHTNqPPoJJTr2jSNmDdos+PeNmC1o //wRMwRBrPLzRv7rCA+GDbALD8YTa4MvYvl4+HtHYPHvR7QLD7/TFG2Z0enS sptj83nPMxE3Y2XMKBPAXz+C2A2QurghF8mp+N0Um05qheYYM02m8tqgZgCl eiYCVV69CjKgpoDQaUCdHjHZl42gXxP+m0cMmHoYgMEIIf7NCDoU1phUZsHM 9DXHaNJQrInhkBg7szGxQh3q97NHTA7icO6fH0HPv2bkwRF0KmzgnH/7iEng yPTr74/8rRFgGwPAYTIE8S7tUUwKY5wzvN3yvgPq93yVMyF73wjEHjNy7wij Qia3jVDfXz7y60a4dEb1n0a0zD1T5xxmTg7akKZqPv1O9f1GJQVw2mM26BRB QBza1Jtxc5IcErQRg2sg+WUj+owOUfOjRhCc38ycWadWVNnIaQbD5m5oC0f2 B0agLcCDJopFiMyI2XJ87vnOEdciHOdSW78JR3J6MEQFcGNinz+CJN1vLt8t 75wBQ/tTdMaZDJOuQocOMzS9Flb6nqPg/FC4uaVfUGLM0KRXkIeuUdFlBEG3 6aDviAQ6UKHDRsptGz3DZhecKOSM3OjoklFBWZtm1WyYhVcfGHFnlqAbmXHC 7NJ59I490HX9YFdmS+CGRBAL9PQFaXBoQmPo/YIR94fPhA33mwmUDjcoo26O kY47F17GhXSMZ4a7Wx47ig7tb6Wngh8OiZUJslgcfUZ/kGRB5urdI3rDKiGB dlGV0RuFTw7WjBXqQg/adBBSUDk1AnU6LkBjJ/9nhIPFBs5xX4hD4cFV9FO4 wpo5sz8+8otH3MN1rB6zmXkosk0aZFxoWYgknHAcQ/2ZETNFm4yD9tBbM1PA J/RmG+7LBr9nFb9jEmE1R8nOYMOpwgqzQXsUbLc89VOf+hS099boKsEJ3nI2 Dnem4EhvBENGQ284FZZiNBwQJ8tqIeqceBry0IUE9B0rWISG41hI+0JXaBoZ fYM2DmcL9JftcfPCGPqtn3jWLHGAdFp7NATa7Iam0HszRs9iP7xsbGbWuPks fikNoecQF3yaPToLI4mOew1un+Lr4AVlGsBpmz0pYvhIC/Rnvu6Wz58GoP0g PcWPRqxVc0aXIe44D/T+ESgYFZ3WO/rAAwmWtF5wR4ehWbhg5E9aBdKse5vq YRWouK8wBM/6Ddra4ydYMa9TmuhTe77TR6ml++N97Rulc2gBHaOjxkmX8bPw gv7xTcIPrIBxzDyU+BK6jrfZvNAcmmwDw2ATM4dNzQ4GMWu0QJuw0Q8zPWa1 Wz40tAXtB3g1o8VpfDefLyDHe0ZJJySgLJYlQR430Q2p4Q+NiCswCHR5QTYA CbGKu0INGlCEgnNwq2v8bpSCu/82YuT7eHEN5sywkUpgHDM7+ibAMwPiJ6PF Wn43O0bL0/p0nr5CE2oCN7ZiBtgfvWSj/3lEv/QRfwvZf9UI5M0MXf9XIxIc yRFbpPe0g72xQSmo8/TZuGjoTPJu+eicLNy+i1WxcrEI66O7YgUjUCDiFfli 84RRxAh4k9ek2+7IwvTSaN2JzvouAnoo0bn5uOP8Al3G1XgZ0tBiFxIE7UMI Go6zNRGYuOALRrTDg/ukx5ARU9FHfXQMP/N2wnX6T6u+aAR69JOei0GuXIVm YVEz6/cfWoUXlD7y0u4j6RY98gUKVLAyFlhM07vlm0bJIftmEUkxKn6DPc+n l6Kr5skM4FRzanSSXujrveJMiQT9CUHnw/TyPbI3HYcIS9YbuuBa6En+MYF4 BgKQcb1o82OrQEOCkO5DkD6+eBV9LOaBgDSWVWtL//Td7LB6cTudx2pYhP2K g0RweBeD/fcRrIE94MEWtOGTjsfTYqQJVZZ7h9OB+lEqYbCM1uCiUeqpMyk8 Q3Me0MqtqTH3y7gMWjZo6rVFPZDEVl05NCax/3OEOaBCtEYFyhQlOsxEqEtN DcgnEqJWnB41qV7waSP6pH/6iexQuXEgNRPvOpMBcKAwE4ChTsTD9RjHD44I MxAIIvCd0xMOcUHIkTIhJf3TNtIUah/qm6PTkP1qrnjr6h+3CpSh6CrGL82h EnpfaKyH3Ch0GAJ1p3ZUoGBti2y0rG0zaqRUH/X96AgzgSpU1Ji4diMUplJh hkhdGL1ja167cz8qZaYgqE8CUfc3YqYhFICg2hQjRmQIQhDKuZsNM8X9cDWO CXHMoJlF9UzHfZkA8lPfhLbraMxAtVu+FtEOsh806IKqp6+y6toxcqC7CAF1 RhicEYQc4+wYkOCcTvm99oS/W2S1jcpLyyANGTP0v0YYqTadQwfpMd1g1GbC 6KSa9Gu3Ch36tlUEYlw8A4U+bREao03GLZx2Pj1mvM5DAMJbTkwtzMxC3+y4 t9l2P6iakZwjMpNqSrj0SZtj2rtFdR6y9xslC4GI7/QI7frOsukgFFAftKAG EY4G6u5kfukXZihNLBzeIss2oKsN10OQXuklXYGKEWqjip3jKND9jUTfUK9+ 0lH6DjUOB3OxUAkwO5NqcaBmRoKCAWgJvUOfKJ5TQt20g30ao3sLNmkNm6L/ QmJtcqTOoX36yZbNIi2YSdgt756bQfYb9TL3Syfj3VCAIiukS89cxXGjxg7m V89xlvBXAGfezcjKHGeQrYygTfoBXfc3745JaCHDss0M/sT1QgUjKxE3WveT tELFmpAA0nec2DoABFmqoNExrECvIURfcSpdd65EWOFJ/93bjHDQVZr5FP2i u+yJ0xTm4twC0/Hxu+XLVOYH2a/nifBpZYR0jX7QC+jQdmFiLhcKuBAjOE8v 6Ks6nztJhAvMt8iaORxOp7WNlzEGBLUFRb2XMpq1yg36Zkady0bwnPvhQ2mU cFOSwJXjTgkrlH2HilDHsZJuQZRgy0xiAlyrDMfFQx5qxtSalPFLyegrOzUu /KpsIUjDt8pzE5nvlm8eAp5+H914+iHZ7aswu7tPC+jpqMRA7/WKB8FbAnc8 Cw26w0+z4IJ9Vgt9+shizC89fewqztNj7bgPxMwmGzBLdN2sYQjtYyIoG1GB HM9C175zFX0QXCnMQBlydJIuf2IVnogOQ6S1IxwrwNKWghM2Un/n7eiwGWwd WB8xCYTFCaWtxsur0ihxBqRHfXfL5w5JQ/gLT0IYOvSKRQiIFS9ZEivAAOkV MZ/8uZIAfaT3JbsQK17AJPiJ1aWbFX/wrt95DDNiJh1zvT7wYK03VfTEHuIH 7EDvhKiQUUqQoEJcZIRncarveJsu0mspGlbB0653DZ9hhkq/XIcNiqGUWoTG lbwxlfHQXdoo0ZL4CAqXmw7u9uhrTkK4YgyjNk/mR9RhTqVKLOgNh4WpXXpr fvPhFRZL4XgHfpae4Dao8MGsHrJ0uUIP1LEPvdcOnZZEC/DpiAKkBBlyPNe3 rwINyLBw6LWq7F4YBII0BW9Cg+5jBjGtdMvvVjscVyaTimEbNkyrMBcbEsPn iXlXiPKsWKhIQNVi+eJDtn70kpMQxpNGyXJ5BvMkopee8+GskTfgL13CqvGq 7+YWA0AYsjILOq7QwbfjP1yJdUpYn7cKXTECOqItIzFjLBJXQpEfp4/iFNZN H6EIJTyqIKlMwfrpuNmgoxCn9xiPRugXVuhcbdKiPzLiOmOENMRphusUjTCE 2dZ3NiY+poW0SeGLLUt5lwemoxD+zJMQbk3Un/QKynRRVK4FWYNoCMoSY3eA Mv0z1+aXtcuXWBnfim0UGOkFJKCPr7XPw7Je0Thdjm/NVCtm0MT3UIAY/Qzh Yld6KH75vlX8bWagZgagZpb1yXgslNF5pQ1sgbfZBRutGMlm8Dyt0JZiLHbA GvyRMZQnsA8e2l6J5fYDtZ3Mw/FOkVQ+XyTN99JHPTDXeE8vWIvzigfov3Yg h3/NjJEaDT1mE/TWbPIimKISc2UDSxAQpGtm1X387b7+bjEJAu1ogITf8noQ hW4MghVkPyI+fWNf+FiJjP5DWhQHbR6RVmAkbbIHsTVvp9wieqscRruM25jG nHfL4wYACL/74XSYHrH0CobmiBWYf/oo6zRyhTm5OP8umqHLEBPfih1cx4Jc 5xxWCWElWO1D1blQ1cvONzqzx6vJn+iW0Rul0WqLjkECynk8v0GE14MwToZc i5mY5n+M8CkQwkDYz6y5hoc0E+7Fe5o9s0o7oMsPYQ8c3pIdnae7mA+DSIyW 1648fMtJCNMjc2GO6RJdhhrr99luBNarB3rGM+gV5KC0XcpwPgvCFqpCri1H cm5xB37kMeRRxQLtUpB1qhE4Tsd4IFmrUUMdypA1I5iCrkKVFqS/2MkMmBm6 bXbEB/qppuC4tvC19rCP60Ru2jNObUPZb/7WF/0Ql4sKxSvzsVs+IZMbhF+1 Rfjx+//fcdodRSWiM7qih+5Ap8yblo2Y74QS7wQxs4J/izEwhngAH2MWmQj9 /ZERRUA8Cj0j00sMxG+zQj1unwiptuC741hBf7RjpiFHnzACdPgJ6NNP3smS Bi8sLhL30Desx1uLa3xX8RGDy8c+uAr2U0/Rf7P3yYPslk8eKq5Hu5MQhAbv 4mp8yAKKJc0XFOgki6Jz7s4LtbNMLsPCRD9GTVdc9/2rYALsAQXWKJaGmtGJ lERdvCQehYSeF9NCp+iLTbDw9ubhWbpj1qsn+A5FS21l8W9YxTERJE0wXlkM DydXEx+xKV4Lu2nDeNjgYVn4UJA7esUWwU/f//9N+wjfnVgcBKEgz8FLLA+a eESUgt/4Ryi0n1WvWaPR4Zx0Vw4knmXF7bJhFXoLQTrDUvLBkNMWjoQOxOmb v/NgeFI//A41/C460i+IO5fSyGyqqdFFuVaFfZ4Gw+BUvoJ+0tPXryIGoiVQ n1OWNx5M7OhFJ6kfx8CIuV6HJIFoTecNHNUAkmvUeZRiVwNV0VngFnh8wyom AIgKhFRQQGVCXMOdMxbq1xY/16Awv6MtYLh/NMVQOQ4AAdT3km/BFxXW59aQ XCMQo0qcaqvOzIbaISwBY6UTxSXAtXlYSApwePCZyxWHTPfompMQFF5RQemU 76gN/HrIZdumBz0BBnqEFENEuAytZBKKRlfqTkWMBG1RS27VuUpMRtzWYn9T Y648BLVtdlxjBtu0yKChjpIlIgJyRveeEd/Rm4RS37XJ3VqWkCiXqknrqCSH 2Aq0MIZaUle/U1PwQN4uwuWlB/4/uvIkBNsG7SpuVDAEf8ZmNIy40bS/h161 JwJ6kPO7kaIrI/2WVRi233LzUDRCAY/Qj65wKo4xyqjQ92ZEm3SL7iMZbrZd MUILeiUMFB4ITtCaREORRhCPnKDIEgViNIbt0Ro6KsTuWMkN19B212U3ByH4 hIezYtibA4faqaUngm5oQIYlWlRBbXQLaXM4ggh6YpQoDCJoiE7l1gknEKXR MbrE6lAgK3ZuZafokNWaQegqoNBdLMBVsrxnr9KmdA6i3QacHBQUbeimJAI6 2MpvtIXWtFuNvrUskj2u1++Wr5gTIPiskxB8ziru7A5CR620rZlLQviskg5C 7LtWoVt0w8ihWFkHp7EiYVbnuY4jgDzdRv7Og5SAJf5yDoSdA036iOPoEqu0 IOiTjkFOHzkMpVv2ZPQlvAJ92kAX6SX+g4qgyzUt/ly1ytNWecoqcDi44YEd grefH2zffJr+9ShImtyCirlxml5U+oc2rnz+Kn6TkEGDzkCRq2yPZkGIAEQw W6HtO1aBGOT89r2rcNuCFbpb2GeWnMcjCZbwbktRwoJ2EnKrkNJPY3ioEH7l frek8RbM6H+JsnTM2LdLc6QFo7XMu1ssiEDzORdCs+WVkNOy3nSBY3RUL10T ou4svBKYs1L6J5j5gRHehH5CDdJQjN8qmuBN59BnSAohcW6PZxTckBbw8DB9 pu8Co7yMQJlP1T+jP3sp7Mr9Tl/jKLipJED3WHl799odCQ/XVKIY171bXn94 /OPohpPQrNjUlXrCYqDmlGtWeThEK1+2pAglaBQatlPR8YpgpSG8CYQhSefo sgA9FNNfIWLXtMvVokT7knhDJSkRChSfsEqPWR32bjzxuEXwfDGUjBty2WTj hMtWa6bZ5eq5BpAvvxCQbuIQEFXIGYKGusG5YGbwjkU3XCcKAxYjpZbWGHxH AuV1VKtnYXwHZusScq0M1soSoNT7fDJoAFJFwVIrCGJl6pgjQYECm3Vz7hm1 pG7VzlI143GdcXKushpOSTwuE0MGMFk3IO6W04fnvc52Ogc0b7oomjmhc6ft 2lUYi+OrQR0LYFWABCnVMhgsymPMQkDfIc69215GneWPqM593SO64lwELlX5 224kw5CvMgcjFwC5Th+q+83Xg0Y++rglcn8azqocp/YoXHG69SKtmZc2nmrV CO0EW54x4MLx1kdi3jk0v2+xjFSFs871u1BCQOZv2iKM+e5VCoOYKu2CG8y0 Q6tpkYowx8oNGHRz26Zj9y7Y2D4DmHaRKMnva5B4Riu1ucH4uE3GWVym3KZM +lTlen3qbbc8eXU9T38krufc/SfbuxN3dn4hLCSsbgiRZfTCHPbNfttmSsOq pFnXzyYL6PTByKCtD81SdkvcA/I537T43JnfkmW7Pdp0b1yd2/nubbZoVOsA kJwMcrlpAtiH9ToXi4iOVzm3g4HZQ1YG47vrAANccZyIG8GJpuW6plg7VMSA kJtPbW2jrO5fjNdjodlm3oJKtoHI+e2A3eQuZ9TSNY736F99CNCXrHLdKlTz RatQGBX/5bMOW1yPXr1Fc7/ra3fZWQaxjacems7jPWWnss5PVdogpqRucwoS g0YLb6GwnY02SoSO4w834iLn7Yi3arU1m0znobauOG5fbsSlb5BB6CjxsJiw upK7Hxk6Tz02EseiF4dbsvBdftAD3Yyw3csUHqJb2kxPNqM73ObxFwVmC8gK yu7o6sP/jx+S3aNWcAzFbQtUAkmJgO+97777dst9h6dbzl7LuhTVWfcUHnex c+p1RoBt2iTPY7W7TNHMNe4Rz6dGpQHb6b4YQojwaE+HjzqTMiTbdiIJqLSS RHVMosjEc7vLnXfffTdk3vhIkYmqmvp2rTnfMXOJKvhv4T5a4iGlr1IBkQXT 1zYEo6XWvx4a0RMvikx9PZfj1z5fvgJDRQBREBAwLTJPb3fLtevS0c2PFJjc e+7buXW04NLgBaOi/x9cRS4lA1ANARjHCERMhHF6iuAhYJ5wUWCM0OScq4YH PA7/z4Hi36p1GZJKzL333rtb7p1o7LyNDZeCSr2Bd1ucMne/CZBs9VPZUCG2 wKEmpUbqu0/hvZqPKm2oZlSXwsHlQNA0BG2tbRyfndNfcew8Xunlq+SleNV1 C8xuuWe+QOcZjxSd6kklCs7Hv/Gwu1lWluT0fFn1zv874m9VENs42s62DUEv BZ0SlbJEfWkj8bnoGKL7QKInqvgFhi18titrefG6oeBZjxQdOqNFKKyh/351 AgWxDOGjkFFSEzrVcVhWGxGElKoOSFpvzePq8X7M6Lg/hOhQ4ex2m/UWHdYG HfdCvCy6Z7+0Yxvs8sHDIy1nL1Uf0HnChdA53hJdcaL5Wllud2r/CN0tZ6wt S3NYBIGEpS89f0J3OE5Is3vREDemwuC7hc6eZHOeeU5Pc2dFVcUBWVVRTn2k 7z31AaEYubi4LSIlC/7+jFVKdRoHLsXePl+1iv4dtrytKc1t56P7+AuiW8zn N6evCfbulK7vnn9tFdHmvxep6CkkoKZkQRd9qmEaJddGj6sKK2FIe9S/1YjU 2AUObS4XgOin22p7++T1hdC1in5qv5b+lOfm6+pr0V7b7WKabRLpnr3Kp6dT eQSf9HmIarluXcF+/vngvu2C4AZS5BrtlU/KDduPUifLbPudm8zYGb7iLWP3 t+VDCxCWAgGPEtV/AG0hq5Sp3XVUqSy/ZOFC4Do/isyJBK7rqt64trRnm52X fuVIysR7BHifQ07c9DAe98Lg+q5TrVkSrNPGyzRXGw2IDbIbRRehrA0MVnlU IiXm1hWwZ8/Gsbs9yY0AUgalVqyq2cNM4hx9o/FZSK/LuBC4fAmtw0NtXyy4 TAFcr61tTtnYHXdN4BLtAdbi9x133LHccXi6+Oitlwpu++eZxO2r6DCN2Eaf nd8CC/JECWpkuQ+1Mwl7ezZcp35kCUxH3cNOaeVjyx0mQzvMMNcUMOTHQrqW dU2yPrG63mRUgt61uT/HWi4rAKUsUYGxA1Y9cH2QfHnN6u/fdD64b74guE4B jiiCB9IwzXXTYj0dki6gAB0Dkk0ivJfVMsVIfpZGKmbiU2mHh1l6PwGetSrR YxhWP6Qltrub0G0lpkqLPlwMXAAojupTRditlgbslhLy5HDZUMCp/QM+n/Za jo0xqk4P7MuLRl9g++xLVdw4X79EZj3n6bfWU6ttVAUyufYAqCRZV2uFEiNY DYKZiFRRWeFX2d66me1ZttZY07ASZD+CB4DMC3pFs5UHo/iLYVtRue3WKeiW UsO1qFkbVScoPJ0Sh/nUF98ZoG1be1YYJQbunZcKbpX26oIVmSiqkokmSsMI WtMBbCChsYws/eO7VOE9gQJ4CZGBsTYAWsQsoHAehaa0WMGkVhtt8bxJvRi4 Ua3J2AbW0e0W2JbbCn60IfQCZmEYA6DA+o/lHnjggeWBw97oo3duwT3URF92 uoysh79aTKnj5yb1FWijwTLInC52wAByIprKb7F44MmXPHTSm1baLt/WT3uH 7IxodRnwSvoshk9zP92ucMH/He+z8UMGAbjA0dfWOQCNzdAvesc0APPpWNve sOfyksPL1Y4+7yS0tosCqVXqWZZ/IbScbyQVh1xrKcw+ELYMKctsFozwpWms QsxRuUexrvVwOxFkEdYule89GsHj5jiqgnT/LVrZaJF/0UkRCTMRwbRDC2I4 FiniWw8WL2/2Tp5zNwKGVqhUP2/hoiWzi6GVUXSdORRgYjmVCqjZISBHUrfx HUPaQ9TrEXtTlRGUFdgvQsdkr0bD8zWTGWn1ntBqcPpUP/ULQdCjXjZY1I7p uGbtY2gPuC93Hd72dnTTSWhts8kixJZpjeJiaMXvvY8LLdhFVWhO7KAS6FjP 9uYExyChhyxRj7XJSuxO6J0TakD2C7FQFgMx1MTafUL7XLT0V1usUF+NATKu F2fcuEp5jf5mjXPabnnlusvvnp8ItPJebfK3K6s3I/U4hOiktyZ5bN0xkUuP pskWzT9OC2HZpS2+Fs8lPfYH9XYni2F4a3330Bm0/AbFHk3Wn7bkmgmWl+d8 5SpZ6C0H2S23HN4+cPT+nwhLrLqBuzC1mg+XaD+Q+A6z+4SYdFDA7HuvLzQq vYaYXVuhBV2frBliZqCXndJjs9MS4Za39Cm2r87jGmj16C7UuEJIhZjzDo+L qR4+nG79eFneufSQfzJvIjivoWRpXi5h1LjLpnpbAKBEZyCHWaHsenVH1+Y7 eyzcdw9zaEtkKAI3uvaHnatb+qjPLFw0h5PMBKR4GGhBz2/66xN69Pbw2PiE +dD60PloveDHHUG0pMy/0RXxa+/oY3ksEv/YitK+SC9qFCmU+JkxW8Ah6jfI QLzN+vNxyvfdo/avTbEdWDfbqrOlrZxGOaC0hqtVyQBIwYOu+g48wQNQleqX N66q9Y4tWIe98c+7YCzL5HseSKqvw8i7gbTZ0yB7qZDBAkwcCliJjJ4ifm7S dRE5sfk5egOqvTr6477ThUP99Hi/MrmtGlRlrLv9zkKwkNVuXaBV6KjdtgC6 dRXfHXvrQXbLW70XaoB65aUC5W8d5oVsCQko4GAXA1N59snmZE7sDSDiA/GA djzcwiOmJVhLjCACY1PWiURYSgC9nmGNOQOq4l3uZFtnK4M3FHE+reFoeykl QAAWWJ+zSiD5bbzSbvmSiYEB9fFLBYo50nGUrfOIQ9lTgKRuwvhpGtA8VGBL PCBoHLPTayNAq0IGgNq31HZ32VJP0SMNu79sWrQOew5QT9lIVt9GEdrU41zr MumdANA9YPik1L3R8c2r+O6Y30YJdwvvCKgXXipQPHLMLYqTElrlkcGYtlIv UYI4XewEDDyDlxCKdrCwWoiqPl/Wq8ZV8RSAegAYaIpSwFf1O26p9EnHFdzb bt0LrEqS4Hz3KsIlf5sfQLxllcHsaP/u8qM7OnSI1j/+8Y+ftzvmgM9zL4iP CRbrOQ4f+yxFRDhaPMmqZH2eWbDcjJ5YEhxYF7XvAVJ5Sg+Asj6rGq5jFny5 KIlWvGaV4816VGk1gHqdd/tBnIJ72hwHENpUbOBvYJUuV0SMzP22LMtuWQ4v yTq66lK1CEP2Sm4t8udWv+TACg78OQOHgooNFKDkvC1KzLaXoNNAaz9650E4 I3V/2lq1SNfWlbDMzZ8Bta0ptMZfytsL6wAnWAIG0yq8rHCzLd74TU+Xt68b YG66VKAQt95J6LRmQaz3I2+fQvSIC97qOWLcAygmVc1Ub40GYVt56JGLymm5 r+xpXUg9CagyFZfTRN2jSW6xLa6kPT5pl9+qJRDfHVvfRrtb7rxq/6DJ2eWt HwtQTgECdhQeGLh8yR14PlrBbvCJ6aQxYnP1g/I9IYHRaQs47I8nRNa4ygbV loLYdivXYroTgCps001z1ZYo82TwvX0fUO0k9b2HujYhwN7rldygq+WONYm5 8VKBQk5mW49oA1MT2wDEjlFkYxklHaZtitdSNMkHUvcY0XMOm633KwJGJAQQ DvB4AOPZ2l/s3N4vtwGqrY+ULeXLx0TWmZRu8AEs39/mqmgcMAC8axXf3Xqi gt3ytrVKddulAuV4fteMqxjZs6h6zP0Lj9VT2hTGPAFFa2R08g7rU70GK7D0 WJgsewOaNsryaZRMTvfOiZ22QKVh5rDySeRMU/J6vcsm7Um7ANQ7q/xth/Ly 8vXNK3ddKlC9nYr5OcZ90ALaBCSleeCwBSapGswNevygaBvB0yoa57ztznZV Y9Ovt0bRnm/qIjabrly2T4uOz6y8RGdEmKCLBk/h0yrNaZbGBJDf/aab5kR3 4jDH1VmWV6yrnq++VKD0xBQanONaNvtq+4ih3QTuxteLCaQtgSSWst9IVoyv cBxOQyx4zyfvqcJHswSrKi4tW093LttnBMd77SkkKO0EHgvt1eC0qjyuvfSZ GE5iovjL/FDeSp8rT+2WWw/vqjy6/lKB6uEQn/42dbJLd+3BD98FVED60VWQ NZAEXRXtiIi9grFrpCqSY6ZsV7zSQK8MXtcdLtOv3fEzyuFa6tfNKq28HGDu WOVNqwCK+ZW+XAgogcFyw7oF9JLJvGiOzuMNQHHvvBoXz8wMsigUQD+wyg+v ElBSGQSPt5zXni1/a0Nawwt6iNwkiN2mW5ftk+Ljz64EzXpb/m6bTYulkXTp CVE5YAAXMz3b15abh/UBdd35QD3xoltlTJneeYhV67RB2URqMuM82pc9rtpX 2EjFBKIQoKbE+uCx/Y2FojJc75lJzcpy3I5Fnt7vIfP/49OtMLRrOu3yvQov k+Pl0BxwABZIFyPyw0vKViK/9VK1SU+YllORA9IWI8ldlEagYrQ9F56GkKq+ kKFR/ZY5asO1qgzWuvuHTGwkiLHntgHVpq2TgBI3cf80A0jAZmoluL5fLDQ4 ROWHMtLZ21f2uczu8af528rjYiYw4w0DYz69p6ZBU55D5ezyfb0oQPqdCq2g HE573oMqLyyL9tiVYta3wXj7tXzvoZhNMe44B9lzcv4G0KoJezBE5eImGoSL evUCE8NLJQUFn1XKJ5BZ3r8+IvLM8/G5Yq9ICK13NfluWcmg1nra7tH7gV5f YfGMwOFHVqEgsGJWFAS2YlCvWejfV2v5tA0W5WbuHc/kNwrg24DJ8RmokItm VM5lSnk0x2iLvwEFPID0xlREP6ctd627Rp5/PiCX7/MgammW6ij0vRPiDL3c uKcLY91isdUTf8MENs5D0VgqKrZhRN9aFC3MaeGhfyZiu4Gjh0l8b2EDPrpq 3IoK8IFFVtO6uIACPrAT58MnbNpdM9O03PLM/b82cvbLdq5auacHkXo4rldN Wbk1MLwaCAwLw5zB7OgMLg/Z2AsfzJ3BU9nRXoP+6Yziht4CJgCin/CBCXt2 TqF7GDkXfqayBTjjN3bY9EZPfgs24eF39Oy739elplvWDbW75TXrXq7XnQ/O Y05XES2Rps1KO8zVqFjEGda4/MGK1SlPjLv68QNmLzhDyIJA/egRKiRBF3pZ gemAjXH3Xi7nhE07t+gUHEWHuZ3II59OT3xWL/Fbi+DOaYkOjv4ea1muX1+Q c+P50Dz2dCtYlNYAeomzT4NSol0j5N1h4I/eDzxyzog2uOAizozOa8pYe0E9 k+WGX7gKFaUTvWamDQVwyYES6WH2Yuxt3GmcxTt5pRZvO3bbKuVuXuf4bP8Y 2ODy3JOcU8/U9cwFbDqmo54Us/PJAsjZzun6BxGKr7w5MLaBsrUBAbWamgH0 DhpK0pp9+6p7zDdAynB6+DiSMYfO54UE8cCoYqkthtI6GgUpggakT8cZI6Ip 2Z3mlpetYc7XnUQ4Zs+NWbpZxViWXQyqzmIL9iUkWY3qoCQv3cd7OGm7YmvV 1fqjuLeHfXtavaqpT+EJw6o0Xd3RZ/8cW5meLjJ55CsSYkD9K17aYZh8Svte M6a8Odw6r7kZyJa3HEqDZxc9DtjcdrpNAD1Gb3JoolRR8lDN0eTqkDI1hs1r wwhB96YziiQdVdYule3BjhijPaj+btnT4PNSrQzlqZzTK2CA079WWdZAUVqy pkCO9QZNrFzK5feezq7kLdlaXu396YPQtecjdOUZhLaPAZSs2wojwfY37miz kSKjpa91E8lqbtftTYop2uO9fU4ct0CBWxSMGQ0To04tDm+3FPtsG4dP10OB SeGdSkgtY1CXatGVNpwHTabofm2/bk+czzVQXu5aqxwn8PL1p7e7I3xSI9ND J9XJ+HUvLejfautFujpFzcRE+XyZgKlLJXp1vXarw1Vx7fgWoEi4jX5t/+2F zgZr8AASsJSxz8eR77vHvamlM8LE0E1v/qxM7VOA/p73vGd5j+crBpuXnmRe PY2RjfvbpLo/GmLnMKBEUhd9gk2LDzohf1egUMUxlmis8ecX238F43annJv2 ts9vfeLiufGoQTMbk+4YU2lnSL/RBJ8tn1EWWPbPO1SZLZiG9aHqupLzs85H 6LACk4npWXsfmEJPZbXVs1XsXhrR0j9N85gEBDu3lKDKSGuR7V3Oxc/h3Sk/ 7h5zZg9uKQUkmUJeCBoD1imI7Z50awsY270M1SazbBPYoygu7x/AqoS9339+ +BdKz36zXRpUKNpjG9stsjDTx9YZ2x0Kt973Ax9jzbuyhPZ69zaak5bjn7bK 9vcssMdgmAXvZJAtzdMCf/dWsTx5K89VLXr6znW+07poqfOANRjtli9Yn4p6 xUkIVWRqE3F7DdvN2VO0XICpMU2Q2NfTd4cXgZdF02O9dr52C5Db1dGqbm2n RX3PzdWO+/SP8JRQQaZR9oiz4/oGKZ+OuRa6gkD2Zgb1HY+Wpfs87Mxa30x3 w/kIvex09cp2+a17w3r+77jQvpeItIRpBFCjvFjbDpAeJjHSIprSydKD9ipt bVvb7u96bfamOXoBrQozjYprMlrnin5PgWSSpsLjh45d8TqG1E4saCkEabeC z+HJunVf5FkF6P2bQ3ZPPt0I9Lh/IKnCo1b1yHw4XqxmZOZaDzcIrP+M7rX7 pxeKDysemG9o+l7FxShZkmPmv/peL2c1Iv5BrdW5zuu1o0atTyWjvaY0Sqrq Mx/L3eu681vOB+Dq0z12UBBrmnrnigHqLB7jdKo25Fz7Zzw71kbAnuEvMJ37 n0I/u6ffANvCtQq9vpc4GbtZ5GSxQC+wZTPO7R9rhgEstuOnQTG2a+F5WKtZ C8b3nA/AzadL83qaeLs/z4B6y2apYE+d93Ia5wKD/fg7fuzF8IFZ5pQmAJf+ s7dWofR4nbW7W/BtxcqoC4Bjs85p4Tgm2W6J4oMXAeHDqMDNp3uHSU+8t9ve z6a2FGH7/H1Pl5MKK42shwTTdQisL5y5qd2lzutfbu2dk+auAGwbuGovloBq QVn7mVp1aWmw+CXPc9Y2wztPQmC7t5fkUXrRUXzWXPc2mJ6Phoy/IWCeewlW r741eppfArJ95ZZzHWsnKckD9Dyrdo2EVaxLtS/vXxmOS0OgtfJtJn3YVbHq wNtPQqCV9+gACts3HBbPFh0Vn2+fMt8iAJleeOKctL8YExKNDjIVy6o+9zxo z0kbNato5d+x/Kfv7WLe7sttM866RLBb3rHuArj9fASu2EfsJ+35Th9E+0f7 Z6pffO25753ben4jgkQ8EjK9PSg+6MmHEuPtvqrt/LVLpiDTb3kLfxc/Nfqe R2x1SHuHaPywXers13g3/+fu4d6uEFVb6k0CXZzL6B+YKIHt7QHpBZRi11jV d9bRY5ntXWy05R7x+DYSb0+2HLN/SOhcBM6tLUkYlusO71hc/j9npJ+S\ \>"], "Graphics", ImageSize->{90, 109}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: Pierre de Fermat"], Cell[TextData[{ "Born:", StyleBox[" 17 Aug 1601 in Beaumont-de-Lomagne, France\n", FontColor->RGBColor[0, 0.500008, 0]], "Died:", StyleBox[" 12 Jan 1665 in Castres, France", FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text"], Cell[TextData[{ StyleBox["Pierre Fermat", FontWeight->"Bold"], "'s father was a wealthy leather merchant and second consul of \ Beaumont-de-Lomagne. Pierre had a brother and two sisters and was almost \ certainly brought up in the town of his birth. Although there is little \ evidence concerning his school education it must have been at the local \ Franciscan monastery." }], "Text"], Cell[TextData[{ "He attended the University of Toulouse before moving to Bordeau in the \ second half of the 1620s. In Bordeau he began his first serious mathematical \ researches and in 1629 he gave a copy of his restoration of Apollonius's ", StyleBox["Plane loci", FontSlant->"Italic"], " to one of the mathematicians there. Certainly in Bordeau he was in contact \ with Beaugrand and during this time he produced important work on maxima and \ minima which he gave to Etienne d'Espagnet who clearly shared mathematical \ interests with Fermat. \n\nFrom Bordeau Fermat went to Orl\[EAcute]ans where \ he studied law at the University. He received a degree in civil law and he \ purchased the offices of councillor at the parliament in Toulouse. So by 1631 \ Fermat was a lawyer and government official in Toulouse and because of the \ office he now held he became entitled to change his name from Pierre Fermat \ to ", StyleBox["Pierre de Fermat", FontWeight->"Bold"], ". \n\nFor the remainder of his life he lived in Toulouse but as well as \ working there he also worked in his home town of Beaumont-de-Lomagne and a \ nearby town of Castres. From his appointment on 14 May 1631 Fermat worked in \ the lower chamber of the parliament but on 16 January 1638 he was appointed \ to a higher chamber, then in 1652 he was promoted to the highest level at the \ criminal court. Still further promotions seem to indicate a fairly meteoric \ rise through the profession but promotion was done mostly on seniority and \ the plague struck the region in the early 1650s meaning that many of the \ older men died. Fermat himself was struck down by the plague and in 1653 his \ death was wrongly reported, then corrected: \n\n", StyleBox["I informed you earlier of the death of Fermat. He is alive, and we \ no longer fear for his health, even though we had counted him among the dead \ a short time ago.", FontSlant->"Italic"], " \n\nThe following report, made to Colbert the leading figure in France at \ the time, has a ring of truth: \n\n", StyleBox["Fermat, a man of great erudition, has contact with men of learning \ everywhere. But he is rather preoccupied, he does not report cases well and \ is confused. ", FontSlant->"Italic"], "\n\nOf course Fermat was preoccupied with mathematics. He kept his \ mathematical friendship with Beaugrand after he moved to Toulouse but there \ he gained a new mathematical friend in Carcavi. Fermat met Carcavi in a \ professional capacity since both were councillors in Toulouse but they both \ shared a love of mathematics and Fermat told Carcavi about his mathematical \ discoveries.\n \nIn 1636 Carcavi went to Paris as royal librarian and made \ contact with Mersenne and his group. Mersenne's interest was aroused by \ Carcavi's descriptions of Fermat's discoveries on falling bodies, and he \ wrote to Fermat. Fermat replied on 26 April 1636 and, in addition to telling \ Mersenne about errors which he believed that Galileo had made in his \ description of free fall, he also told Mersenne about his work on spirals and \ his restoration of Apollonius's ", StyleBox["Plane loci", FontSlant->"Italic"], ". His work on spirals had been motivated by considering the path of free \ falling bodies and he had used methods generalised from Archimedes' work On \ spirals to compute areas under the spirals. In addition Fermat wrote: \n\n", StyleBox["I have also found many sorts of analyses for diverse problems, \ numerical as well as geometrical, for the solution of which Vi\[EGrave]te's \ analysis could not have sufficed. I will share all of this with you whenever \ you wish and do so without any ambition, from which I am more exempt and more \ distant than any man in the world.", FontSlant->"Italic"], " \n\nIt is somewhat ironical that this initial contact with Fermat and the \ scientific community came through his study of free fall since Fermat had \ little interest in physical applications of mathematics. Even with his \ results on free fall he was much more interested in proving geometrical \ theorems than in their relation to the real world. This first letter did \ however contain two problems on maxima which Fermat asked Mersenne to pass on \ to the Paris mathematicians and this was to be the typical style of Fermat's \ letters, he would challenge others to find results which he had already \ obtained.\n\nRoberval and Mersenne found that Fermat's problems in this \ first, and subsequent, letters were extremely difficult and usually not \ soluble using current techniques. They asked him to divulge his methods and \ Fermat sent ", StyleBox["Method for determining Maxima and Minima and Tangents to Curved \ Lines", FontSlant->"Italic"], ", his restored text of Apollonius's ", StyleBox["Plane loci", FontSlant->"Italic"], " and his algebraic approach to geometry ", StyleBox["Introduction to Plane", FontSlant->"Italic"], " and ", StyleBox["Solid Loci", FontSlant->"Italic"], " to the Paris mathematicians. \n\nHis reputation as one of the leading \ mathematicians in the world came quickly but attempts to get his work \ published failed mainly because Fermat never really wanted to put his work \ into a polished form. However some of his methods were published, for example \ H\[EAcute]rigone added a supplement containing Fermat's methods of maxima and \ minima to his major work ", StyleBox["Cursus mathematicus", FontSlant->"Italic"], ". The widening correspondence between Fermat and other mathematicians did \ not find universal praise. Frenicle de Bessy became annoyed at Fermat's \ problems which to him were impossible. He wrote angrily to Fermat but \ although Fermat gave more details in his reply, Frenicle de Bessy felt that \ Fermat was almost teasing him. \n\nHowever Fermat soon became engaged in a \ controversy with a more major mathematician than Frenicle de Bessy. Having \ been sent a copy of Descartes' ", StyleBox["La Dioptrique", FontSlant->"Italic"], " by Beaugrand, Fermat paid it little attention since he was in the middle \ of a correspondence with Roberval and Etienne Pascal over methods of \ integration and using them to find centres of gravity. Mersenne asked him to \ give an opinion on La Dioptrique which Fermat did describing it as \n\n", StyleBox["groping about in the shadows.", FontSlant->"Italic"], " \n\nHe claimed that Descartes had not correctly deduced his law of \ refraction since it was inherent in his assumptions. To say that Descartes \ was not pleased is an understatement. Descartes soon found reason to feel \ even more angry since he viewed Fermat's work on maxima, minima and tangents \ as reducing the importance of his own work ", StyleBox["La G\[EAcute]om\[EAcute]trie", FontSlant->"Italic"], " which Descartes was most proud of and which he sought to show that his ", StyleBox["Discours de la m\[EAcute]thod", FontSlant->"Italic"], " alone could give. \n\nDescartes attacked Fermat's method of maxima, minima \ and tangents. Roberval and Etienne Pascal became involved in the argument and \ eventually so did Desargues who Descartes asked to act as a referee. Fermat \ proved correct and eventually Descartes admitted this writing:- \n\n\ \[Ellipsis] ", StyleBox["seeing the last method that you use for finding tangents to curved \ lines, I can reply to it in no other way than to say that it is very good and \ that, if you had explained it in this manner at the outset, I would have not \ contradicted it at all.", FontSlant->"Italic"], "\n \nDid this end the matter and increase Fermat's standing? Not at all \ since Descartes tried to damage Fermat's reputation. For example, although he \ wrote to Fermat praising his work on determining the tangent to a cycloid \ (which is indeed correct), Descartes wrote to Mersenne claiming that it was \ incorrect and saying that Fermat was inadequate as a mathematician and a \ thinker. Descartes was important and respected and thus was able to severely \ damage Fermat's reputation. \n\nThe period from 1643 to 1654 was one when \ Fermat was out of touch with his scientific colleagues in Paris. There are a \ number of reasons for this. Firstly pressure of work kept him from devoting \ so much time to mathematics. Secondly the Fronde, a civil war in France, took \ place and from 1648 Toulouse was greatly affected. Finally there was the \ plague of 1651 which must have had great consequences both on life in \ Toulouse and of course its near fatal consequences on Fermat himself. However \ it was during this time that Fermat worked on number theory. \n\nFermat is \ best remembered for this work in number theory, in particular for Fermat's \ Last Theorem. This theorem states that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "n"], "+", SuperscriptBox["y", "n"]}], "=", SuperscriptBox["z", "n"]}], TraditionalForm]]], " has no non-zero integer solutions for ", Cell[BoxData[ FormBox[ RowBox[{"x", ",", " ", "y"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["z", TraditionalForm]]], " when ", Cell[BoxData[ FormBox[ RowBox[{"n", ">", "2"}], TraditionalForm]]], ". Fermat wrote, in the margin of Bachet's translation of Diophantus's ", StyleBox["Arithmetica", FontSlant->"Italic"], " \n\n", StyleBox["I have discovered a truly remarkable proof which this margin is \ too small to contain.", FontSlant->"Italic"], " \n\nThese marginal notes only became known after Fermat's son Samuel \ published an edition of Bachet's translation of Diophantus's ", StyleBox["Arithmetica", FontSlant->"Italic"], " with his father's notes in 1670. \n\nIt is now believed that Fermat's \ 'proof' was wrong although it is impossible to be completely certain. The \ truth of Fermat's assertion was proved in June 1993 by the British \ mathematician Andrew Wiles, but Wiles withdrew the claim to have a proof when \ problems emerged later in 1993. In November 1994 Wiles again claimed to have \ a correct proof which has now been accepted. \n\nUnsuccessful attempts to \ prove the theorem over a 300 year period led to the discovery of commutative \ ring theory and a wealth of other mathematical discoveries. \n\nFermat's \ correspondence with the Paris mathematicians restarted in 1654 when Blaise \ Pascal, Etienne Pascal's son, wrote to him to ask for confirmation about his \ ideas on probability. Blaise Pascal knew of Fermat through his father, who \ had died three years before, and was well aware of Fermat's outstanding \ mathematical abilities. Their short correspondence set up the theory of \ probability and from this they are now regarded as joint founders of the \ subject. Fermat however, feeling his isolation and still wanting to adopt his \ old style of challenging mathematicians, tried to change the topic from \ probability to number theory. Pascal was not interested but Fermat, not \ realising this, wrote to Carcavi saying:\n\n", StyleBox["I am delighted to have had opinions conforming to those of M \ Pascal, for I have infinite esteem for his genius... the two of you may \ undertake that publication, of which I consent to your being the masters, you \ may clarify or supplement whatever seems too concise and relieve me of a \ burden that my duties prevent me from taking on.", FontSlant->"Italic"], " \n\nHowever Pascal was certainly not going to edit Fermat's work and after \ this flash of desire to have his work published Fermat again gave up the \ idea. He went further than ever with his challenge problems however:\n\n", StyleBox["Two mathematical problems posed as insoluble to French, English, \ Dutch and all mathematicians of Europe by Monsieur de Fermat, Councillor of \ the King in the Parliament of Toulouse.", FontSlant->"Italic"], " \n\nHis problems did not prompt too much interest as most mathematicians \ seemed to think that number theory was not an important topic. The second of \ the two problems, namely to find all solutions of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"N", " ", SuperscriptBox["x", "2"]}], "+", "1"}], "=", SuperscriptBox["y", "2"]}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " not a square, was however solved by Wallis and Brouncker and they \ developed continued fractions in their solution. Brouncker produced rational \ solutions which led to arguments. Frenicle de Bessy was perhaps the only \ mathematician at that time who was really interested in number theory but he \ did not have sufficient mathematical talents to allow him to make a \ significant contribution.\n \nFermat posed further problems, namely that the \ sum of two cubes cannot be a cube (a special case of Fermat's Last Theorem \ which may indicate that by this time Fermat realised that his proof of the \ general result was incorrect), that there are exactly two integer solutions \ of ", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "+", "4"}], "=", "y"}]}], TraditionalForm]]], " and that the equation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "2"], "+", "2"}], "=", SuperscriptBox["y", "3"]}], TraditionalForm]]], " has only one integer solution. He posed problems directly to the English. \ Everyone failed to see that Fermat had been hoping his specific problems \ would lead them to discover, as he had done, deeper theoretical results. \n\n\ Around this time one of Descartes' students was collecting his correspondence \ for publication and he turned to Fermat for help with the Fermat - Descartes \ correspondence. This led Fermat to look again at the arguments he had used 20 \ years before and he looked again at his objections to Descartes' optics. In \ particular he had been unhappy with Descartes' description of refraction of \ light and he now settled on a principle which did in fact yield the sine law \ of refraction that Snell and Descartes had proposed. However Fermat had now \ deduced it from a fundamental property that he proposed, namely that light \ always follows the shortest possible path. Fermat's principle, now one of the \ most basic properties of optics, did not find favour with mathematicians at \ the time. \n\nIn 1656 Fermat had started a correspondence with Huygens. This \ grew out of Huygens interest in probability and the correspondence was soon \ manipulated by Fermat onto topics of number theory. This topic did not \ interest Huygens but Fermat tried hard and in ", StyleBox["New Account of Discoveries in the Science of Numbers", FontSlant->"Italic"], " sent to Huygens via Carcavi in 1659, he revealed more of his methods than \ he had done to others. \n\nFermat described his method of infinite descent \ and gave an example on how it could be used to prove that every number of the \ form ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"4", "k"}], "+", "1"}], TraditionalForm]]], " could be written as the sum of two squares. For suppose some number of \ the form ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"4", "k"}], "+", "1"}], TraditionalForm]]], " could not be written as the sum of two squares. Then there is a smaller \ number of the form ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"4", "k"}], "+", "1"}], TraditionalForm]]], " which cannot be written as the sum of two squares. Continuing the \ argument will lead to a contradiction. What Fermat failed to explain in this \ letter is how the smaller number is constructed from the larger. One assumes \ that Fermat did know how to make this step but again his failure to disclose \ the method made mathematicians lose interest. It was not until Euler took up \ these problems that the missing steps were filled in. \n\nFermat is described \ as \n\n", StyleBox["Secretive and taciturn, he did not like to talk about himself and \ was loath to reveal too much about his thinking. ... His thought, however \ original or novel, operated within a range of possibilities limited by that \ [1600-1650] time and that [France] place.", FontSlant->"Italic"], " \n\nCarl B Boyer says:\n\n", StyleBox["Recognition of the significance of Fermat's work in analysis was \ tardy, in part because he adhered to the system of mathematical symbols \ devised by Francois Vi\[EGrave]te, notations that Descartes's G\[EAcute]om\ \[EAcute]trie had rendered largely obsolete. The handicap imposed by the \ awkward notations operated less severely in Fermat's favourite field of \ study, the theory of numbers, but here, unfortunately, he found no \ correspondent to share his enthusiasm.", FontSlant->"Italic"], " " }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Fermat.\ html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Fermat.\ html"], None}] }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Evariste Galois", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ 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 sgHGyfR/9Upwg68F888axGV46qCLBvn9RYOwNWvHTc2NQeYHSxKTFrdbhvBM gY954BoLW7kZlVZUZ7Varj20n3KyWbHaltVjeNKEqOKZwbHbud6o8tL8g1Z5 K9aoDHj2Kzwx575VX/ZYclfuJV0CSSOhCDI5TExhnJXqlw7CnZwyzplzP3uQ gg/I+a7cRhWjlUQoQxxXUwAtzJjRUvAcwtaK60dl0rhaAGxGoZ+u00bVm9td vddjSv/glc19+6rRLz/TXrVmFj6Fx5UEVTYe9zVNLTplkvuuT9Ko7EtFJLCb K02N+4b9+szyaYPYJcEaLsV1cm0vHARnik9dGInHqco73PeUQXB0DHs+mmeZ S2OCm/6bw47LWOojTcPd8Iw0WH5Ve+1yWqF58WNjOtDY3L/XqC86O9fyhmkJ nmKodnkU4M0xXPh0b+3Ai01u1wonvTIr5/mNcKQpfcpE400YSRzRsHxZRkOs xmCdXunZg/Aoyff7shKNy4Va/eZVE161W77Cj/xW89p4uE2ebb6qp24sBQSu y07PPtBqq5dZ5lVfLMslJ0FE+9Jaws1aideOfVlecc+9B6R/M46eq9/8GvGh sUl9NPf6QQ4ZVnzFIkgDwY77+PMGVUJH7o0VL2aZHMefePVnDaITwlQ8zA+a +aN4XX9pSv0xTprW/Imr+WDx6Oz3V09c6V6yWfIFpqf2mI5Rbz7g+7Jcup03 Q8R/1crT6vM2kYMM8XKk4eVlO69B082ja/EAS/6xleb6X3LFcsGOhbl2JXoU Lj7lE3zCnh6FOacLznhUIV06AK5+63gOEfBIOlK/OU7hxuXXnmUmuil/Md8y TPMdsx8zFuPUqYlV9+J/zbb9TR5ZaNnuBRHRbI4ON5wVXWm2GsOmma/JbcfO pqeCqqo2ZBVHB452PPY5C+tDIwrhRZyyH1JYXFh+gBQZZOPMZwyC7GaQ2WG5 njTIucsHCZDqSjPb3rV2BMqxu49kQXPOsFT1O6N6GPGv7nbcOmnV0yfvAzDc JCDuIsHzruxgrbAuC+5Z+aP1S7+lAo0PjKJ+EbdjLvYzB8EANiyFMcpc0Yoi MWkcU8FzwH1cflkCERXLNuML109fKW1As+TnIeMSj7fpSojwgkFwTUtUW4Ty y+B2tLNJx2fbSmcD3n4b3vHJ7vXJak1rm192Juuelk2ThOOh5Y+15y19c7J9 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 \ \>"], "Graphics", ImageSize->{90, 109}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: Evariste Galois"], Cell[TextData[{ "Born:", StyleBox[" 25 Oct 1811 in Bourg La Reine (near Paris), France\n", FontColor->RGBColor[0, 0.500008, 0]], "Died:", StyleBox[" 31 May 1832 in Paris, France", FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text"], Cell[TextData[{ "Famous for his contributions to group theory, ", StyleBox["Evariste Galois", FontWeight->"Bold"], " produced a method of determining when a general equation could be solved \ by radicals." }], "Text"], Cell[TextData[{ "Galois' father Nicholas Gabriel Galois and his mother Adelaide Marie \ Demante were both intelligent and well educated in philosophy, classical \ literature and religion. However there is no sign of any mathematical ability \ in any of Galois' family. His mother served as Galois' sole teacher until he \ was 12 years old. She taught him Greek, Latin and religion where she imparted \ her own scepticism to her son. Galois' father was an important man in the \ community and in 1815 he was elected mayor of Bourg-la-Reine. \n\nThe \ starting point of the historical events which were to play a major role in \ Galois' life is surely the storming of the Bastille on 14 July 1789. From \ this point the monarchy of Louis 16th was in major difficulties as the \ majority of Frenchmen composed their differences and united behind an attempt \ to destroy the privileged establishment of the church and the state. \n\n\ Despite attempts at compromise Louis 16th was tried after attempting to flee \ the country. Following the execution of the King on 21 January 1793 there \ followed a reign of terror with many political trials. By the end of 1793 \ there were 4595 political prisoners held in Paris. However France began to \ have better times as their armies, under the command of Napoleon Bonaparte, \ won victory after victory. \n\nNapoleon became 1st Consul in 1800 and then \ Emperor in 1804. The French armies continued a conquest of Europe while \ Napoleon's power became more and more secure. In 1811 Napoleon was at the \ height of his power. By 1815 Napoleon's rule was over. The failed Russian \ campaign of 1812 was followed by defeats, the Allies entering Paris on 31 \ March 1814. Napoleon abdicated on 6 April and Louis XVIII was installed as \ King by the Allies. The year 1815 saw the famous one hundred days. Napoleon \ entered Paris on March 20, was defeated at Waterloo on 18 June and abdicated \ for the second time on 22 June. Louis XVIII was reinstated as King but died \ in September 1824, Charles X becoming the new King. \n\nGalois was by this \ time at school. He had enrolled at the Lyc\[EAcute]e of Louis-le-Grand as a \ boarder in the 4 th class on 6 October 1823. Even during his first term there \ was a minor rebellion and 40 pupils were expelled from the school. Galois was \ not involved and during 1824-25 his school record is good and he received \ several prizes. However in 1826 Galois was asked to repeat the year because \ his work in rhetoric was not up to the required standard. \n\nFebruary 1827 \ was a turning point in Galois' life. He enrolled in his first mathematics \ class, the class of M. Vernier. He quickly became absorbed in mathematics and \ his director of studies wrote:\n\n", StyleBox["It is the passion for mathematics which dominates him, I think it \ would be best for him if his parents would allow him to study nothing but \ this, he is wasting his time here and does nothing but torment his teachers \ and overwhelm himself with punishments. ", FontSlant->"Italic"], "\n\nGalois' school reports began to describe him as singular, bizarre, \ original and closed . It is interesting that perhaps the most original \ mathematician who ever lived should be criticised for being original. M. \ Vernier reported however \n\n", StyleBox["Intelligence, marked progress but not enough method. ", FontSlant->"Italic"], "\n\nIn 1828 Galois took the examination of the Ecole Polytechnique but \ failed. It was the leading University of Paris and Galois must have wished to \ enter it for academic reasons. However, he also wished to enter the this \ school because of the strong political movements that existed among its \ students, since Galois followed his parents example in being an ardent \ republican. \n\nBack at Louis-le-Grand, Galois enrolled in the mathematics \ class of Louis Richard. However he worked more and more on his own researches \ and less and less on his schoolwork. He studied Legendre's ", StyleBox["G\[EAcute]om\[EAcute]trie", FontSlant->"Italic"], " and the treatises of Lagrange. As Richard was to report \n\n", StyleBox["This student works only in the highest realms of mathematics.", FontSlant->"Italic"], " \n\nIn April 1829 Galois had his first mathematics paper published on \ continued fractions in the Annales de math\[EAcute]matiques . On 25 May and 1 \ June he submitted articles on the algebraic solution of equations to the Acad\ \[EAcute]mie des Sciences. Cauchy was appointed as referee of Galois' paper. \ \n\nTragedy was to strike Galois for on 2 July 1829 his father committed \ suicide. The priest of Bourg-la-Reine forged Mayor Galois' name on malicious \ forged epigrams directed at Galois' own relatives. Galois' father was a good \ natured man and the scandal that ensued was more than he could stand. He \ hanged himself in his Paris apartment only a few steps from Louis-le-Grand \ where his son was studying. Galois was deeply affected by his father's death \ and it greatly influenced the direction his life was to take. \n\nA few weeks \ after his father's death, Galois presented himself for examination for entry \ to the Ecole Polytechnique for the second time. For the second time he \ failed, perhaps partly because he took it under the worst possible \ circumstances so soon after his father's death, partly because he was never \ good at communicating his deep mathematical ideas. Galois therefore resigned \ himself to enter the Ecole Normale, which was an annex to Louis-le-Grand, and \ to do so he had to take his Baccalaureate examinations, something he could \ have avoided by entering the Ecole Polytechnique. \n\nHe passed, receiving \ his degree on 29 December 1829. His examiner in mathematics reported: \n\n", StyleBox["This pupil is sometimes obscure in expressing his ideas, but he is \ intelligent and shows a remarkable spirit of research.", FontSlant->"Italic"], "\n \nHis literature examiner reported:\n\n", StyleBox["This is the only student who has answered me poorly, he knows \ absolutely nothing. I was told that this student has an extraordinary \ capacity for mathematics. This astonishes me greatly, for, after his \ examination, I believed him to have but little intelligence.", FontSlant->"Italic"], " \n\nGalois sent Cauchy further work on the theory of equations, but then \ learned from ", StyleBox["Bulletin de F\[EAcute]russac", FontSlant->"Italic"], " of a posthumous article by Abel which overlapped with a part of his work. \ Galois then took Cauchy's advice and submitted a new article ", StyleBox["On the condition that an equation be soluble by radicals", FontSlant->"Italic"], " in February 1830. The paper was sent to Fourier, the secretary of the \ Academy, to be considered for the Grand Prize in mathematics. Fourier died in \ April 1830 and Galois' paper was never subsequently found and so never \ considered for the prize.\n \nGalois, after reading Abel and Jacobi's work, \ worked on the theory of elliptic functions and abelian integrals. With \ support from Jacques Sturm, he published three papers in ", StyleBox["Bulletin de F\[EAcute]russac", FontSlant->"Italic"], " in April 1830. However, he learnt in June that the prize of the Academy \ would be awarded the Prize jointly to Abel (posthumously) and to Jacobi, his \ own work never having been considered. \n\nJuly 1830 saw a revolution. \ Charles 10th fled France. There was rioting in the streets of Paris and the \ director of \[CapitalEAcute]cole Normale, M. Guigniault, locked the students \ in to avoid them taking part. Galois tried to scale the wall to join the \ rioting but failed. In December 1830 M. Guigniault wrote newspaper articles \ attacking the students and Galois wrote a reply in the ", StyleBox["Gazette des \[CapitalEAcute]coles", FontSlant->"Italic"], " , attacking M. Guigniault for his actions in locking the students into the \ school. For this letter Galois was expelled and he joined the Artillery of \ the National Guard, a Republican branch of the militia. On 31 December 1830 \ the Artillery of the National Guard was abolished by Royal Decree since the \ new King Louis-Phillipe felt it was a threat to the throne. \n\nTwo minor \ publications, an abstract in ", StyleBox["Annales de Gergonne", FontSlant->"Italic"], " (December 1830) and a letter on the teaching of science in the ", StyleBox["Gazette des \[CapitalEAcute]coles", FontSlant->"Italic"], " ( 2 January 1831) were the last publications during his life. In January \ 1831 Galois attempted to return to mathematics. He organised some mathematics \ classes in higher algebra which attracted 40 students to the first meeting \ but after that the numbers quickly fell off. Galois was invited by Poisson to \ submit a third version of his memoir on equation to the Academy and he did so \ on 17 January. \n\nOn 18 April Sophie Germain wrote a letter to her friend \ the mathematician Libri which describes Galois' situation. \n\n\[Ellipsis] \ the death of M. Fourier, have been too much for this student Galois who, in \ spite of his impertinence, showed signs of a clever disposition. All this has \ done so much that he has been expelled form \[CapitalEAcute]cole Normale. He \ is without money... They say he will go completely mad. I fear this is true.\n\ \nLate in 1830 19 officers from the Artillery of the National Guard were \ arrested and charged with conspiracy to overthrow the government. They were \ acquitted and on 9 May 1831 200 republicans gathered for a dinner to \ celebrate the acquittal. During the dinner Galois raised his glass and with \ an open dagger in his hand appeared to make threats against the King, \ Louis-Phillipe. After the dinner Galois was arrested and held in Sainte-P\ \[EAcute]lagie prison. At his trial on 15 June his defence lawyer claimed \ that Galois had said\n \n", StyleBox["To Louis-Phillipe, if he betrays", FontSlant->"Italic"], "\n \nbut the last words had been drowned by the noise. Galois, rather \ surprisingly since he essentially repeated the threat from the dock, was \ acquitted.\n \nThe 14th July was Bastille Day and Galois was arrested again. \ He was wearing the uniform of the Artillery of the National Guard, which was \ illegal. He was also carrying a loaded rifle, several pistols and a dagger. \ Galois was sent back to Sainte-P\[EAcute]lagie prison. While in prison he \ received a rejection of his memoir. Poisson had reported that:- \n\n", StyleBox["His argument is neither sufficiently clear nor sufficiently \ developed to allow us to judge its rigour. ", FontSlant->"Italic"], "\n\nHe did, however, encourage Galois to publish a more complete account of \ his work. While in Sainte-P\[EAcute]lagie prison Galois attempted to commit \ suicide by stabbing himself with a dagger but the other prisoners prevented \ him. While drunk in prison he poured out his soul\n \n", StyleBox["Do you know what I lack my friend? I confide it only to you: it is \ someone whom I can love and love only in spirit. I have lost my father and no \ one has ever replaced him, do you hear me...?", FontSlant->"Italic"], "\n \nIn March 1832 a cholera epidemic swept Paris and prisoners, including \ Galois, were transferred to the pension Sieur Faultrier. There he apparently \ fell in love with Stephanie-Felice du Motel, the daughter of the resident \ physician. After he was released on 29 April Galois exchanged letters with \ Stephanie, and it is clear that she tried to distance herself from the \ affair. \n\nThe name Stephanie appears several times as a marginal note in \ one of Galois' manuscripts. \n\nGalois fought a duel with Perscheux \ d'Herbinville on 30 May, the reason for the duel not being clear but \ certainly linked with Stephanie. \n\nYou can see a note in the margin of the \ manuscript that Galois wrote the night before the duel. It reads \n\n", StyleBox["There is something to complete in this demonstration. I do not \ have the time. (Author's note).", FontSlant->"Italic"], "\n \nIt is this which has led to the legend that he spent his last night \ writing out all he knew about group theory. This story appears to have been \ exaggerated. \n\nGalois was wounded in the duel and was abandoned by \ d'Herbinville and his own seconds and found by a peasant. He died in Cochin \ hospital on 31 May and his funeral was held on 2 June. It was the focus for a \ Republican rally and riots followed which lasted for several days. \n\n\ Galois' brother and his friend Chevalier copied his mathematical papers and \ sent them to Gauss, Jacobi and others. It had been Galois' wish that Jacobi \ and Gauss should give their opinions on his work. No record exists of any \ comment these men made. However the papers reached Liouville who, in \ September 1843, announced to the Academy that he had found in Galois' papers \ a concise solution \n\n", StyleBox["...as correct as it is deep of this lovely problem: Given an \ irreducible equation of prime degree, decide whether or not it is soluble by \ radicals.", FontSlant->"Italic"], "\n \nLiouville published these papers of Galois in his Journal in 1846. " }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Galois.\ html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Galois.\ html"], None}] }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Johann Carl Friedrich Gauss", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ eJyV3Qu8ZlVZBvD9ncPMmQFhZhgGJ0DFO1NjgE2KKZVdVCgdLQOxK5kmpWlq 9/vNbpZRFpZdTLsXXay0LEszU8vyBkaIMCqIwgiJ3Bn8ev97r+c765wZHXp/ P5jv7G9f1nrW8z7vu9699v6eeP6Lnv3M557/oguecf7Jj3/B+c9/9gXPeOHJ j3veC2rT8mwYhqfXf889efB5Xh/zv12bjy17QNn9y44qs325bFPZEWVHlx1Z trFsqWxoNivz973KtpRtK9taZv+jmvnO38eUZZ/tZTvKji+7dzOfbfOdfezr mHbssOKPYdcx9yuzj/Nqt+8d971l87L/Lbuu7Jqyj5bdUGbb9WW2/U/ZpWWX l3287ECZ7/+97I/K7ijz+R1lt5U9oezEMteBz33LTi57YNmDm/lsm+/27Nkz zPacffbZhc+u0x9SdnrZZ5dp7YayzWWQhSBUgzI0gyr07atn0Aii9nf8Spnv HbehmW3OtbnZkc3yt+9yXI6tywwrLjbsWnZt30M2I7y37F/LIAuNT5RBEnI3 lX2yDMLXlkHsLWVvLHtT2VvL3l72b2X+do43lP1xmRF4VBlk9eu4Mn3FhBPK Tmrms22+A89sVh2pdu08GqKQPaUMQnoXnmq5v/FV52bNgqpe3qfMVSHTozeC MQwbx+5vGGbrzNYt43cPHXJZDXxp2afKdBIoQLq62UeaXVX232WA+fuy3y77 8bIfKHt52X+W3V52Y9lry3637B/L0GtnGQ8wOFwMmTT/+GY+2+a73bt3D7Pd hU218oSTPqsMOZ0hw2+v0Z/akNvGkXugbAeOq7uCv+1jX8AGjXbceOyoLau2 4RAgRj9Wxu92DflbM/naN5S9vgyQwPhg2WVl7yx7RzOswrK/K/vnsn8oe3XZ d5edW/YdZX9bdkvZP5XZzz723dYMWMCMHunizmY+R4cm1hWxqo33uw8QABf/ 1aOcEWiA4Vfple/97TjMfGgZugDR975zTBDzeZ1/juZ0y+NJV5ayrff9nCOo Ukmf/PuTZb9ZBjmo8td3laEhekEH3f6q7A/L0PI1Zfz+X8p+tcyoQPbnyt5c ZhtEqSjaRm/4KXIdzpdrl2G2tTZWG486JwoYFJzN3vbUU0dFlabgs3FoqCyF ws1vRxWr/4fB/jpu3LZ7FFunabuO4HxL2SvLgHFlmVBwV5nO/WnZy8p+ouzH yn6x7FVlf1mm444B1PeVPb7sOWW/VvYjZUB9d5lwAlQEMVDkyrW1Q3D4/DKk QEchT1dJ065du2a76t/adfuFvlyMcJkdaR2cbKegfVzWwcTe9XE7APk755wE bWVYfw7HhqnTF6cM31nGF99XZuQp/91lfHVfme0UH6MA+AdlABBbAWwfDLTf X5eJtT7bT/SwD9CIHzB422ll+IEPeCFXAR5W+V5fAczhhnPOOQeFLubEOgiE B5UZ7XQwQWK5dRwBgZwEpHfhHrCQdALs9MV5xm0tYcnfGsVtiBW3k3j8V9m8 mYhwZ5nOEiohldi9p4zrcU3RIoDY50NlwHY8N/yPMknNx8p+piwJ0eeUaYs+ 67/PMABcErOWsAyz+1544YVo9mZb0Yvi4/Mjy6LyzrI+9bNN3IEYp+9jZFA7 OG5uH3qUegSN2NeWfazZ28pQCN2CGkRQjY/Wn8OSjcNJ88RNx0HkirKgiVZi ckYBPT9cRhC/uSwimjQPMol+Uj4oGt2Kq7vtf9FFF80uuvjii3XmKn4iZnx5 2TPKvrQs0SH5q5MlCtgGLB2PEDVAh+VDxNAtDUiDsxbcrQOw0EDHdBhY/E6i gS4yNLnwbc0CXKPQ8ojdzvmtZXTvvWUSNIf4Cn40ThpNz3CCR+lGQih31EV/ 0y0Ycs0LyhxT8M/eU03U3n0GGE7PK/vWMuIXHJwg0SNzhswlGk4T+TYsPLH3 0mPH7+49rJ+ifFHZn5VlakCT9RMfJLM+f6As/DIdgMdNzXwO1ya8jp/DR/qB i/jmMy6BXBB9dNmOZrpApmBFzlDFdt54XtmflDlHpYmzq2vY4PQ2HJIYirIl Z+c4iU4hYU4Mr3CJA/ruEDhtbLYWp9MGfA/9DIOgL2eNj0i5qA1V0j5c2F8W nFCIKsHnlmY+oxl5b5iNHBIzjYFJAFnnf/Yj+Z9bBh/pH17hky6ZSqGL4X9M 2a+Xwdv5KoLMhBFYXfNtZX9RVv548ZeV9WIC7HAoJLXdYLTkIFglX+hSiYbV 9iHJllPgNeXWN7k9HvlX3/68DJ+CEY3BMdhQ+lW9OnHED0ZwyP7UXJ7xS2V8 x0TJPAGepTkXwQSHND/yonv0Ste0/avK4IujbTI2zN5YQkpK3vnDZU8pe1IZ YnHGJ5b5/AVlSXoTVHs0JqRWhiCxvZnPiYuj6tX/tSoD4XjKoPUtmZhOdeqg My8p03mTpwAruZJ5mgcQcABzUoFAOPU5ky0WsrE4rHMhL6K8phlAzAsIAWCf XVaJ1q7kFfhCe4TJBDn80g7HypoNeGnIMHt3RRmgXgJEnXtcmXRRtiMNpHCq A31VJNnYoUDNbIT5HFA3j/ucMSYYGfq0zkAlhApVzyxLwsG4cJKMS8r0mlxJ REihbSKHTI5rcXXHyOrQVkglB6gpsvjXcbI5rux8tkP698uECP0UASGaWba/ Db6UAjbm/64rUrlGATt7V40uQPfRRh3i968rQwfu/U1lTpawiqE58aEABcwx zXxeD2hKRwE0pawx7Ja9oEwO0mse4KSr/qaRpMeA831A8L3kGLRA299fJicR TwCFvgAwx6BpdDf6IR22DTA/W2ZuoD3ab4BRk4TZpvwh69Om6AytEK9HjazB rd12foDIAumxZebJv1Nm4nNGmVFKpSg1kwTW5Btx48xiWScNRzWvd6i29d7/ 3DLkKrgm6Tt2npDJIlMgfFUzrRMa/qYscAo9ughCWczidDvnkEVvf0I62R1H NcGQlBllAIg0EOXo/tZhs7YgGPFwrBGoU8+umSLNlhsl1U5gHvzisq8s01Uq phqVUNvP3RuKwwTlpllSl36O3yG90piJ5UEwAT8scFkMCSuN+M1lRp1YwiAV Jt5DSBU+uOzLm5nBylgwD6TwIpSyn5wXHrCwDeNJRbIBovjwMu0RA2R8Mr9k GaTQkGqXCOcY5yO8Rf4lHsAR5wlf31iGKvTSCWDqs/NNOd4Ri+JUqkhLU1Gk 2zRk29DZVIR61KCdPhmifGbiobHug4ngwZvgE1zgiKq8Xl9QkrdSANhG+nmy 7SK4rMdYkLhk2eQYjs7jGs5tH4EInrrAizhmnBFfJYMCUGY62mXMnUuALBoM sxvqixFYQcSIyEX3lNE1Z6Wt0cHMfteDmpLp6j7Li6L0sGDppnFbapEpOUAT 2xYOeupYN27pz5yj8etUCsgjAgd8ceeSZmpWUqFfLqMJv1H282W2iTUGDaiO M1Dil89A/dEy3Y2T+xxwwfGDZa4v1jmWDgXMpP7V7GEmOdPZ+allhqSvjmMo VViwbOPwaXA8FIybmrMLT4FbMgYb/UAweBCj3jEp+IvKYKDNyKq9+R45HAt3 IQZ++vsLZZxfyPieMtVSuQK8kqojpc8yLT0TblJmlqLDEwIEgNAgY0rbMMwU wHbh8sorr5xdOUF4zPykqd43Zofm1JlLZqD6OJwi5wLalcV0xjjmjlJyn8nj zxxQkXMvSg5l/rWviNeXErSVQOWzvuuL0AxbDo0bsMy/LfYsjie4hOHCMrmX ma3jZLUCjwDkODznvI6DuZyRu+gPx+eqESe3AxR9Eoi00RgFV750V7PaPMxu aQDfkYInVGRemB+Jtj3k7KrKSwuANy8AVvfIFNw3yfZXgd40liMCrn35PfVr c8jJ908fp9zaDlMBB1+lRfAV6+UAsLGPjF4gx2WY2ddp8Irvf01Zqiz8W3r0 K2UJZoIM3zGFwls0S3lCt8QZ5RszgUx1g2146/rB98Bkw+xAw/fqEFQiJvy5 Qld7HJIBJPo3Fgbf/mZACua+cYpE+AnfRw99SfzsMtOWiF0Gv3d4iTlB0yFE UwpSRVSzJgIiVvYHsIEJmQGNlKKV+1gARGJCLVlHZgBDQ6QjhdqfIv/IiLJn lYmQRDSRrQc35LX97mY15sPMsOPZlc6EuBc0A7QzZ2LWF7TXRqPVqlB/OyRs hTyUe5Ux54XSgq17RrbyOA0DEoXDUDMeKQuCC8MY/PwyYKm/iWCYA/wotfNg cVJKx4hi1FtCLIWT8GM/b1fL0+zMAKNaZ5U5BqjOC0DsTU0vjA2omRfXP7NP VVoA12vTX51RcUJeWHATMp8CEqyTwy11ISuYTWHsgWuiXFQgyh5W68yTyzAz zA37/J0K0iubCU3SftIAXOEJUNz8p8qkA/IqEg2AFrZaVe7E0ZWxD2MNFGB9 JcRLO366LIqmwh2OmFXKlXlPKp/Mde5o1gO8uOZsXsMG3o86jZtAusZRTFyj 7Ga8IieIk4H08PbFyo0tiqWZudeT72UHUvU0UXNMf8INTdRtkU7Ep5KiPREA qRtTIA0NKKFZOHGQQoriOOsaySpw1/kpuGiXVJk/yMQUxceelJlaEQX1S+mv /XBUFpM2JwWOwgbSIyZIa8862bZ9TvldZUaEi8ljwbKrWWphh7ovsbYatTK6 UV84EUTcXZkv6nEPH5NGEKQeJwEFnSKOG6jglDTpMj30HfXAVoUQkNJhUKmh /16ZmQHYwQ9qEpBkC1tBKvN/RdkXl0XB9InyWXyhnpyEMMExLu5c62DcMKFY gg7Fu/QWGfCfuiOjdM58zUC5CnK6Yu/nPkcrN7WIBP3sY4AhlAFNJNGypFRa RbhcE3LSTzcPTfX4M/H0t1RS2ch2AonA5vDSIJol3OuDkVAxz21oogwZ6ZcR +voyGg9B+qZ/WGLKoD32NQK0Qzuhl7LCOvEMGUulZrdO0//jr8cgWatR+f6y 88vgh12m/7QUlj1O67GMRnY3dCfmbh7c44xsOj2CJsi3GxRN6h42Ts0RikTK ijQFNApWCvmyJdvA4Iaz2QJy81+aAHqZ09PKlH2tnRJuxSDa9SVlCu7I6V8E Nq0F9QvLFJ6+oowkq84khtGMTHVznwmksqgVGM/I0+zy+opuXg46sU4dShlG PdbNCFkbiqbY/el0c23R78xRg7LSqb+35txquBIhfcjNDLoEW9RIeYIjc1rY +VfYkAgJY7BFPwKCrjDRb2NBrNBSoRIutNZ17ec2sFDo2N8q0w7nJSLGSpkG 5Wmm0OV6Ziryj0zztY04BVfW4Vp/ze4uZldvj7k8M0o4PrVMZUXJnz7b1q8E 6/LUCcbHDn3IYXZLEu1vw+FOgpwUnWjz55WhVfLRyL3woqtfXYZuPF4OKZLn rjf9M3/g5TIA3VRDcM9D9JdyyWV5PHhMtNBPlQlV5ccKciYUhoHaiOpuoRke 7aBQ9FZubJsQJ7YY9v626DpYRxkozoJ1vyxU/ykMN4kiiUe55TvSce38dbmx M3PXfr2Pw2QGEiCMxB7zlHzPu418skqQETSVB+LzQ2UyyRSXMAWTbJctUAjh U5bw0mayTizEWt4gnFELab3k2/UlhSA0vOZM2mG9HuF3DudLdMdQSVbuuMh8 hSowHnkQjJvu1PYIIka6ZcU7JGULFh5xaBSX15Tvpl3PGJDAIh0Dy5+t/xLS svSNBpqc8F+E4o8Crn+RERmSoiZV1Ht+/oVldAm5pIm01DkcB2V5H0RcE4ld U+jhEK6BIFkXIFfiLEFSZSaVMYEdgkhpJLWnpZ0NxIJ6dltxBBdv0iWRBDrq J4paTivihViHcPFpsvSYQVDmaskiuSBl8C0O5A4YE9yMkahE2RL402puhWcJ hso8eqpQzd1FEME8KdRTm4kkZIQrU3r8sz/OcWPR6GFl3E7QdYx2U1XRLEkG xMK7uHKbux9on5s3106zjxemgs8HIWWgckNDE1BQjM/M9tDBZ8eaxVOMYmpe VwEZy2lEN4og73J+hNJlgYELttypZaIPHSEl/r7PnTDq61iwIg6lBDnXBZXA grCgATX3/vYyyuR6ApMhppICvXOAdm8z7KHQSinJgEGa8k3ceWksiCwf6Msj Gydsa6+ZBSfV2qfszwJvdOiXMusP5h4uV+qzdTf1W7Y+z0QaTYIL5yJf6GT+ 190iGnNTzp1ESkCFReSHSOg7AeE9KOs8sJAgcW5RC87wI70mTih9ZtkjyowD wRDwuYh8lvRyfjLaFoXvsV/KjwoGud/Uzy21s/29JgIVlaq1590kKUrZs7/L hhdcSfJiHk24srA++xiTLAu1XVLgjqWymdInEVO+lJtbeUAIfaeN8EyxQbJH AsIT40Fc+QBXzeJ9/ZbY8QH8hKOIKZTgpERPO7UDthI0CZBQQIpEdQmYOQC+ 8i/JqvO6DlmSNOOHOT+eiu7kSBCQ3MlEcg/q9mZ9ia8vmLDq7jD72KSx577f lbKAHnphDaGSMgt6Wk0cNzVL2gmBFtDG9TUKwYRKkBcwMdW/QfhTzbRWy7Pq z2cs1jr5D7R4NZHmSTwKKyANIQqgbZgoJIaVwhY0Hf+cZorWlCj3iexrJDDJ iEHZdaBvasEbhDlMUS/EZkyAttCF1UQ49b6grh9RjMywlqYZ1iQY571XzMjz DZw/U3hNE1VTyEGgCAUSZ9FliE4IMsW+ppkmRMSyeDKlScOh6Wmy72yTOnIw 7UBW8Ej5EPbpZeIY+ORtKVoR8zc1kx0QYiRGVO0mVJyB2PhMNMBJREBtVmV4 OB8hRmpCY3bAGTmadDoVH0KX8mpfYu3h7mdgswOlftC+lfwidBYQLcJbme+c lWxqXZIJpBfhc/9L0qEYkuQ6i+H8TSKQwojlGZyU/bQyJQLbFUogzLk4HGdS DoCUKT3imn9CGRIkTh6mzqaNzo+IiGv0jRRHkG1oH2f4ujIyYjuJV1MlRwjv vLJu7eCknEyNzFxZP1xDSCfX/d2YIL8ecVa7DLOba7gKpyfPjX/KVcYZ8rie ZW64Y8z1HLJ8wIoNIpjgiDOCoJaYiWpdHjMhD4QOmh9v5rNtySShr5TkCQvt IJymT9AiuHIt3FP6N92SyEAbl4myOUWWpSiUKnHhvsAIRTmbgOk4M1rcl5gI JoK1URB4JSb6qxhlSkcC9YdwZ8khmdT29nzRkn4OKyPwPeDRcGoylmpQ+2YJ osyGLppoiIwcSzouCosWqJDMSo4MkL5cgC4cjgbrfOp26CDx5IB0Gd3zMNSN zYgHsERSrkSr0ZhoIAKK+g5gaG2OC0iAmE+bnKGhuGJyloeorENyXkABGqDA RArUpc2yQsJEWEx1iIj2GyzxRp+cy78Gs19BgCifaJYHu4J4In9bZVNoz8cb YuftJ82oiU6mckRCJIK0nhMYorF5empr6O/BJKKipDzE0Juq6jGa6WmiDGpk eVoe6GNEAJJkWVug4m/CZXKHhiZrZFRtEWKmMOqS8jhURFmfVWsVXogLVD04 lCVzpFjuR2RUe1Fejuhf7mLUVCyMEjprN3r7m5jISfQJazAkrhnUg/j6u2Wl 3sPsbnJSaM9l7rInAQOqprZ4nNVMOJzKIsPrSLtylm1yEtNOSOqdHnNyLdW6 CErWR+c5Nq1X7zZarq/X+MjZzSrwl9zinc+RVIjjdxZ42SY4Qpzo+TslS2KC m0Yb4vIWI2UE/Iv3kWklNAhjBzF0HOZgBLRTjtT+iGFQD+I9v9l0L3LK/p52 M6WQw+MzReHNWVCcp4gyt4FsHr3M8xWpmMmeoEE2SSqeabGWmo9oJS9sS05u 4wd6pvcKhLlNbrT4BGUQtKQfUIImaYdgHvVSXXNN/mR0XdM5XA+3FS4oD4Xh zBAz7zESVAHCRhHX014MwGVty/JRQV7bSXaedISutCNIJyNsc8hkgEsRkTl5 JiBingmTtDZP1Wb9SRYb5xHHLc0ywURxx4g3b2mG2iS1LRnfp/M6kaEHEhCI BGrZN5GfE3No8snlxDAgp3MGk9OjNnkFqm2cFuXkgtoiC5F1GEgDK3/jfs6l HdpmkICcdQxANdjaIvRwB1lI4nqmEalYHQbo+STZk4gsj2g3xIel8abDU087 tTNBKhML08U8hxfkk5FAXsaCilpLDHyGnnsCENdSiBAbNJX15sYZ+tiP05L/ ZBtkW25GwlHfKNkHnVHciJlumswQF1lLbvvLYkxUiFOCG+FxvSyAgDjaGwEu kWfBL2uW44hF7gn4N0tMD4d2ZSSzuxq1bxOX6IiFt+oFagxmg6E8JZWZ0Bez uKSJWYNPT/LgvEGRUgFD9KaKaJMnovKwLDqKebIYAyIW8U305NN0Qzx0LPUE bLbRFuezf27a2gcVuY59ZFiKmrlBwVDecRRclMraTxSnWcDmEtoCbG4QWifq JItKXQSwhwPb+obZ1Q3tW6T25rPSe8jLTDz/A3mJbo82sTC3zXplak3VbUN3 eaEsRkzTao4JWY7n6hBBZfTj5ObEqJqpD0GQ8KKxrESux0Wch7tkTXj/fA1V RUmjIN7JGVXJuCV1Tkw2OigsQojrGIbyxAGduZJRlcFkob3RhzYRyu39PjYm q/pMaNchw+wjlkXKtE3aoCtGQhriJm5nNSPnsm95YC8meVpdjIR2ivmcWC1S /IKCXkKblKupyS/5D25DUYQnjySapBIEd4ay0AFXjQKRsW8eN/AZGpDHTYIi d8wTR0adZBOjZPtQ5C+qIkZDbTYc5o9Ch2vlaTK+AGGj6nqZ1kAZ6r67Z7Jt gV+hfckZzSCgCpaCBMPvU5pBiZJA/IHNBFGqopiyuHVSZoQENjILUdkwz867 BPQWj0iiXpBpNaVnNctcw519nIMqLuMX5ChAvBiCrkMd+KisSLv1iSL6zjFQ MkquaQ0aJpk/yU8hrh3JrrOA1/6QDeJGLJW/bP//BMnzbqTX+A1pfIAUdKEp 86YeUIY2fguauE5Zsi++52UC/vWdnrykmQJHsnMIqNumzAMtwU0wVEKCNgWR j1EGFbrUaMPvqA5fsC/Vwe2saZLOmLMYWWgbKSqE57ke/xN8KZ0RgCJFS66a 5cYpnUHa+fOEG3RzA+vwaE+Pp5w7xzOcgDYUoQdFXDcSKaJRD4hD0kjYD/+p EI7j9+5mCoqSST16RTPq4HjnE5H0DGK+M3fGSSmEIoiEECJQfnUzx0hv9NCx tvEfM0ua7Vx55h9a+Cu5pGaZQ0OVaiQd0hYz1kRboy+22Mc1cus/yxWiSEbP 6OSmV1+G6leytDrr9FjAeXOXFFbAjeCRFJ91379gQ2ruKbQIm5nY+x75kdt+ mX7ax11SbkmwkTmr0OS3XNY2pRcBQ+1JSAMdYSXi9pOpkRwTECSUhycr0/XI AGjyOKrvnNs0lCSABFSGQphUy9VubdR317GP86aWFqidE7RInjKPbfZffxPh UDcQ+vXY581dzexBYgJdZIXiI5rlVhhCQwRZoQNt6Eq1yAyy57El7mtfopvQ ApWsG5GEmJVwKk7AkaSCpopIyt1TDEJM4cuoGQX5tSkgqSCqkCErUIWEXhsV wq8umxfbCKMkQsKR244pxJEjAQGa0NZWyPs7xwfp1FmzzuVwaE911gntc+d7 mknxJNdkAGoQxtcIMTS1jrSQHEgTda3Om51Y5pg4C50UcjJ5lwBzeeU8SJMf SRD5MDfMu1Xylhrpn9SPYONg6qcQIux5u439cBzf8RqLpJFG27Ud6xxGxU1F fVWW0T+JEnShZoRd135hSlK/fpUBZKH6mWRkeTFbz1td8h4sJo3Lg+2QyHe4 q3XQlqhm/ZFzGJWsF7WNeuAi5CCGJ1rOiwkt3zAdMrqUBTL2VUjCfSNkSuQc +JhEXCpm5HCeGuS9JfyEZ0sQ+IZzEn3Hurb9w0lJTm4T65+KeXuocbwpx6+g 7twSECMXgU4SlLsxh+P0VISa0H7SHG/DyQc1C5+hzsMgnAWIuHxmM9vzPIyR MAqUhfIIOTiUR1eTTmUxJRUyKkIr7kkkhEOoK8EZIcfgk/PgZZ6fkVhDjoII Z/hqX54NbZyX0LgupCHOlxyTR935ZWpCFDOrie1nlHPuTFT79R8F7BJ0h813 HA7s8rJhdkVm63LqVK9TCon8EgiCku9S2yfpAqigmNdImd2jiFmEfMJMRCNf 2wy1ODpa+14nXUuwNXsx58xiLQPEiR2Tx+ABLb/4UDMDABiUFjjNRtozwPvI NAFTXHIOwGVZIXoCFvXN3PQDqbQXOgZHnZVYEL4EyKywkPHl5uph8pDRrO2e Xdvk+iMcWnaPYpwamlAlHvdpBvGsoTAK0Pd31hqQXFSR1pBhciiF0DO9FZDy SjrpgdFNligFUk+Btpm6gArt1zdDMwErq8L1SM8hTlQ4vtHMGxps1wajnmKW UScIEHcO6HMho4I5BE24gKD9hQzXMKKERz+SW+dtEZC2/R5kfdNUfe/1PD8L MJE8SgJWhQ+w0zZ5CoijzQxchocDgM+wiUh5DoZqgPcNzWRvanCcwDHUxmID N6jA7DhTfJNNCTWCvb0ZJUjkkxNk+uycCMgRbBfZnFOFFYHBnSTZd8jtWApj H9kfB6N6uRFAv+13uMi3eYKyvpndoQBSeF5LdVPyQCUYUWR4EgFiQIHlaTCD BeeCLdy1RTxEFbmZSTenE7PgCYfcrFOyE9WJBBdxTiJBpXNbC6XEMJ/R3/Qw kT/3zNFIH4mEHI/So3fWkhtTguMzx7efdqA60THWrqdUgkOig8l81k5qO8y5 wmfC88gJz2mp8t6rwJDKKGjyeq/cBEBB9OPl9hGYaBXvsY/gaCgEKYsszJh5 MZqkxKxp9FGSxQUch5a5Q4iSYKPHanpmziYN0gHbDQXPlbyhoXP7W6oBcioQ Dzcs3Igr2B8lqZD9Qa1tXMFclJLpl2ovGuQ5D8Hsumb3AMrpkZm9HyVooDE6 Tk0wMQbECgwpD/kXI0Ep5Pgur5ZwvCmtkeVhms6zUrrM86482bHCI0YSNAKq 4IxBmOJ4DLd+GMxgJHbY6TNW2U9BL9NwHiuHIHIYqY1Z8+LcBBs7QaOYwuPA rQ28i/fJLVL0yK0+8N0DKKcXMO2dO7XT5t5fqmpgTaxy6VQksInIEgMwOs7M 3mQo9UjwgRKkGMNBdVeXDJkhwU7MMzUgjqK5Wo7tGC9eglOcycO+Yp9KAzab BjifZFoaJSZJRB2n/URX+mW4HWuYpWYEhkhqr/MnMSfk2Ag2XhRY74FgVsSa 3Tk9h7R3jt2mW7m9l3sdRBOWqdiodvsexmibaZo2xVvdh4cJyvAq8T2TBhTR Ztirr8FJ8m6S8LpmhNL55B0wfXwz46w9PJJ3UhTbtYkSoW5ef0ME4SMYZloJ TxgaN5MR91QoSfqNK9wky9K0G7XvYQAaV39PudPeeVYBUEztxp1UfWWnUmc8 JAHcm8JyJTxy10Db8Awf5C8va4YLeeiVuuEfRcOPLOehkHkzlf3tA2NBjEJr j/2Vfl7czJjxAQEzL8yzjbqqRVq7bLz5HF6k7GQMyUXupJA4/YG/gKhNeYWD YCUAHc7VG54lDLNPNDz3wzNv4tQHEQX3SEry01QlfcefZPgKISp5xjtTeAmL iIKHtueuDP8xFeKXMJV3whx2plRyzgR++JJhXJRc4D45hD35g338lGlr3kEC E34NU/vzGbyALX3IC5OzvNJ5rAcgofbtH7vPs3H3AM+KQsntn3A9fpFhOBkr bTHTMX7GFq446XuzE/saZwUomMELD9sc7Yo8CiBU9PclcS95cx5UMw6mqjhs H36W2/q2C0n6zR/prqwBtnycT7uOBDXnFs6MGWxt0zYhMFriXhBewBg3zKbo jjslMoq8j0gC1pafbp0gK2HOYuOz3qJrYEAr4YeEaxb5SFULFd1zt58hAxcq 6GYqO4GGq7kn7hjQgiE3HeVyuX2seyaM6JdbD0KTv23ntmho2IQNcveQZiDU Nl22b15J6niuTXYNQ159+r5mvhft9YGbvLAZNyflhiorHFh7eeewtc8dz5pT I0wHl/uwmG99XRjGKzBehNQNo59cLHPWLOjQTIqT5a7ySjBTwTZ3vVazs/rF v+CiPrmLghHm2drlCQBDSYXN8kQWCqx9hs2xUmvQ+DcvZObdfdmVomVRp+uY LmE6doFLpoCNhj+z1LwHDGRbJsjGJ1+KAXDbL5KhF+ZiqnyUYisZZ1YOUwpu mERWbcyy3ZSxXE9/UdOdrKxa4F0UzjROW/LqPtRAw/TLdljyTlGVF2fxqLbx elM2UyDH5ska07cUmKiD81zVzGdYofkHmtkHvigvQ0AxONqWdzimP3mrwLZW 8Nx6g5itJUZTq6S1WAfBzDq0WMvldXqDFW15zrTO6ZHjuhEywm8ARYbzSnb+ BeisUTHQCCac9JOYrMAlzQDIupXMn7O6iQGLlGtGnunPeuz8PkJefOq6H26W t91oA9Df2ixLGbXBfnnOtyNZ0WN2c9OzO0Gk5iAVo2Pgkl6CU+ohNHFIg2Ig tF2qimT9y00MJufNqz/y4JtM341q4QNWSiQGMzUEky9Ey4209jq38Tch8nZD TuKa+pxblpl85RVf9rdPVl+1l7VencW+me9qq/CY100YN2MSLSUQtuVFgJ2e eXNXQXYANLm3LkujI6CSQblJIJpkPbJmaSK4XD5PDmU4ZSZZVSGyZT0o6GQM /N3tItmKc+WnMRj49jVDEb4KMpRIadvfaUMeTg1MufPr36y5zKuIfZ/XpMgg UEjYSrk+5fmsU9aWvMyqo9o4u5ie5HvUnXSQHprZZGWveTmdpI9CHApHI/Os TSiWjEdbeDItszrFrCQrOvMuX9qGyvTM/s6pjbDJCmXnywOxMIBxHkpx3dAs pajQKava4ZNVUHk9xiQjR89TBcxYM/hEEnLD0jmSoTWajY+TeRBkGE6/DiXz 0n96CCP6Cye445SxwIdcJ68CyUM0DL3hIWu3NNANh6yWVcHNb2T4LA4nnuYt eHmEQ5/y2h1czLqkPDZi//66iyfkhm0Hcm+9X2Hg3zxRlxdDZbVtlvJlzDuM Jkqd/slQML+BkDum1CSlnK4pB7IwPduokFDDlSWHCtao5F8ZlDCZ96PmdaYm j6KAJupS3oMVt0nZXZd6t8oCi0PDs3ygo0uj0b0WIRxNEl30i/L38DQl7rOI ag2IxsersLxfW5WnwLLyJqfxt+9cVnPyAiXJbR4oIu68i0rleQGf864Sf/tX LUHgyDoU59cVLOJJGZrDrUFZD1GeJZkgOnLsen5MSGIrK9Pn7vF2qrdtgqbG Y2YxxghN3iyXByqyeiAjlAXnqUwFJlM46wQkov0rKsU5ZRLTedvz0HcWduXd rPYxzVMv718RGqFKZa1/3CDO0z8xth6a1tUFNODGFOeU9GI7hubFZK1P28fd h2Flnkex72yWOeTqSU8Z+dS/3MhcSyaqYyms59V/ajL5wSqcya/g4MdxzbJc nAKZd5pg9aDoRNxo/RvMM9dNe/MI+bB1nAon4EVoHJol8ATRZfKDA7rpFI12 xzZMNswDdv8mtGV7DfcPPw9EKRFDXUK/1Hb0Ewb5WRXb+x+yMXvJGkvbU2vr nxk2Q5JZ4PX6l2m7cbQEiGF5seSlbFga/798+4FVGzY0YHq8fM7ELYkS9RWd +jeed5G4CXBXllmeH3RLq2jSnmY8sP4leKbZyjh5y4ZJSR7jB5VcOzBlZQeo /JuXGeaWov0iS+imTGBCg+fdOu+78lBU8KmeBTW9X/OEfMUpyPR38LLaObdm 7Bb0+hEBw7pUexWmjQ2X8CyTJBdRYsqvbOWlLj1d+vUaiUr5yZStzfKMKGxQ iNs5F6pxqyzczJLAdCC46HC1fUkHhuVbD2bOpnEofZ30OotTmoxMI78yz4Py gcXn9qqZTNc2jf9smvfome3qOJEUiiVyYzw5ckd+FyC/X0dfTfMklOoZa15m edLiHWH9K9dcKeOapxP7hupHcuy0SL96pSPLfbmjHRupWF4kev4e3/A1bJ5H X/yrjpIXdwqX7XULw/hjEcO9dhg342zc+98RMu5KxxI49xDbi83Ht1+tc7+V tq3rW1sUtDKXHJnayAaMYXJs3yYGLN9+qE7kZXBGnBblFx/oumxytRO7Rl3P I7T5tYO8Tjdv39EZNXfZrBbJSfIAclK0vDUtQhKtSuO0x4jJhtXH5RpmEyaa 6rSZPPY6lvSqzyI3tT5GpFzHufRNmw1Ic8JFH/MTAFlklTrlic30EVHzxL/q ltqE4hmByoM3YVOYmRmHqoeM38zIMVlZ69xwFVvMoMLeVHzYOgUaZxOiwXDU 2NGNc9OJ/LyVRupgdSt9E5MirvkBK8KbnzOMMK1/kxKhiegk6TEz09bcm8uS PpfPWwHzOoH8Vp3Zh4JG+hMHyth0fatvZp/sBGUaxEy5JK9nTz/wOCatLfFo g7h5h8aIOPkRDQ1PUtLWYw1jr4Yt2/sHffLm2Lyu0DmiuEiTn9fJL3ROL6M5 evFraVmNp0TQvw+6J2qSrtbRMWttDrrYZxrN+SikeZUXZ3FTww0zbdLGxdhO P+Spm/lFKE3Og2T5zSlBJHkb/mqqwyO+vu9+nG8YH2Udjhp/YSgvVeqvoarh nlGXWA9Rrn6d+TFTV1cj5ubWt0g4k5xQUf1zgY63rp1fZ7PJMNjWz1H6/Csa ZVt+/cf++VHBLMnLfUPn8T3aODZvCMZr/h3fE4z68NdlCWsKcNOin+VLDx7O nYuXcWbSIVqprqph5ulhQSEJQ14ebcjzxt8EE9/nTcYNmwmybTvylvBIdiDJ OhnscZk83pY3T6FE+/WS4d6dzDSGXnZwl5bn3Xyj5Yjb53mqUlHI/RLwxlsj p7qKlrqXtav5sRB/o+mqV2/bkVfyG37/Ol77Fz+sVJbQFCrov4J/e2dqDcDY p0svvVR37u67s6F1p6vrtG3bxlHKHT+sT/qlG3mGzaXz5GB+8e3TdcN2I5jF pRlRMKVrSReosSmlyJEI0Lpx2WWXRSBX1mRcEZ3ctpnyhC3jC1yIiEIH9dcP d80S3Vw/v+8S9W61t0X7swQ+r47U3iypyqIX2/Ov4eHYifYdtUbx84R9jUXf 9hbQts8TPftam0gqivPMvKUqvyuZlDpvDgs9+vYbD9+FNvqXNU95l09mcHnL kzuarp17E63946s0m2sc6Nsf10gqvjoGx45Jc17Bkn7hl6xA6SGZckoK+R2J vHWp9THd6X9B12eCbFZwTrP8KnJ+gEVlw9Iol00VvNHJzLeufVPfk8kDjlhk 2a030+at87ygIPsDyNo2t5ylCK6c+Z3WIXX8t+tE3D6rSXM/0SoQnTBe/C7v 03NrQ6qckknXiam8unxF34mVNigpd6cw1RLDDY1zYphcVfFAruIGLvjyQtOk Edo8TWC27hBfFX3M5dVK3Ns2inkdUopCPksv3B/v3ijVGl1J8eyG6U1My1f3 LT9+/P+DR8d1A0K5LtlHiBItzwr0VDphbLqVcJICen4DPLFB2vboZpauGCPE 718LJyRyDCVD83ytOnFquxXcE/jDQ+ZZKstMqmRClgRjXX48Ob+Lqg0IHdHR rug72B/QzOeUWQJjMjSOKjMz7SBq4FZ3cPNG/Gn3hU6YmloIz24a38i+szlo l14P+TkjUyFFcvfmtbv/gSptTcqbl3vkNyXzI5x9+pxHFrWzvVErv3dnN7fl rGrI64VPmto5LnVturL/YDpsWJS8co9itfknz82Y3ObjL5mZ6YLmaWp+TCRp ge8Ss5JRgdh25zDLcRvRahgrZfrSGtOWvKY8UGv4dX3Dp60nzvOIYkrTnNgS Dstr8NDYpxH9zwywvCJSo/DaIgMA5nWLVA2QmQoe0aQrtd6WojaXW32X533H /Y6bt7rrojxN6hQb8Mj0041AU7Y83M7NBaG899nqS+1o2f40HpvH06YUnUkB Wuadc6tjt9xPFBJjxmL/Ca0ruWXaaJvDuleStzCzaczKXDK3CvPIYhu6HNrn 6Ru6q6Q4Pc+PlC7Pc491HrE1ykM/yjvanl1FfXG/I7fd8oayINzfHEhFftG+ oxdFta6QtagT+C6v4DJNWgvBhkUG1N/Fa6NfZ5vdPnVh9n8NLCnj\ \>"], "Graphics", ImageSize->{90, 109}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: Johann Carl Friedrich Gauss"], Cell[TextData[{ "Born:", StyleBox[" 30 April 1777 in Brunswick, Duchy of Brunswick (now Germany)\n", FontColor->RGBColor[0, 0.500008, 0]], "Died:", StyleBox[" 23 Feb 1855 in G\[ODoubleDot]ttingen, Hanover (now Germany)", FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text"], Cell[TextData[{ StyleBox["Carl Friedrich Gauss", FontWeight->"Bold"], " worked in a wide variety of fields in both mathematics and physics \ incuding number theory, analysis, differential geometry, geodesy, magnetism, \ astronomy and optics. His work has had an immense influence in many areas." }], "Text"], Cell[TextData[{ "At the age of seven, Carl Friedrich started elementary school, and his \ potential was noticed almost immediately. His teacher, B\[UDoubleDot]ttner, \ and his assistant, Martin Bartels, were amazed when Gauss summed the integers \ from 1 to 100 instantly by spotting that the sum was 50 pairs of numbers each \ pair summing to 101. \n\nIn 1788 Gauss began his education at the Gymnasium \ with the help of B\[UDoubleDot]ttner and Bartels, where he learnt High German \ and Latin. After receiving a stipend from the Duke of Brunswick- Wolfenb\ \[UDoubleDot]ttel, Gauss entered Brunswick Collegium Carolinum in 1792. At \ the academy Gauss independently discovered Bode's law, the binomial theorem \ and the arithmetic- geometric mean, as well as the law of quadratic \ reciprocity and the prime number theorem. \n\nIn 1795 Gauss left Brunswick to \ study at G\[ODoubleDot]ttingen University. Gauss's teacher there was \ Kaestner, whom Gauss often ridiculed. His only known friend amongst the \ students was Farkas Bolyai. They met in 1799 and corresponded with each other \ for many years. \n\nGauss left G\[ODoubleDot]ttingen in 1798 without a \ diploma, but by this time he had made one of his most important discoveries - \ the construction of a regular 17-gon by ruler and compasses This was the most \ major advance in this field since the time of Greek mathematics and was \ published as Section VII of Gauss's famous work, ", StyleBox["Disquisitiones Arithmeticae", FontSlant->"Italic"], ". \n\nGauss returned to Brunswick where he received a degree in 1799. After \ the Duke of Brunswick had agreed to continue Gauss's stipend, he requested \ that Gauss submit a doctoral dissertation to the University of Helmstedt. He \ already knew Pfaff, who was chosen to be his advisor. Gauss's dissertation \ was a discussion of the fundamental theorem of algebra. \n\nWith his stipend \ to support him, Gauss did not need to find a job so devoted himself to \ research. He published the book ", StyleBox["Disquisitiones Arithmeticae", FontSlant->"Italic"], " in the summer of 1801. There were seven sections, all but the last \ section, referred to above, being devoted to number theory. \n\nIn June 1801, \ Zach, an astronomer whom Gauss had come to know two or three years \ previously, published the orbital positions of Ceres, a new 'small planet' \ which was discovered by G Piazzi, an Italian astronomer on 1 January, 1801. \ Unfortunately, Piazzi had only been able to observe 9 degrees of its orbit \ before it disappeared behind the Sun. Zach published several predictions of \ its position, including one by Gauss which differed greatly from the others. \ When Ceres was rediscovered by Zach on 7 December 1801 it was almost exactly \ where Gauss had predicted. Although he did not disclose his methods at the \ time, Gauss had used his least squares approximation method. \n\nIn June 1802 \ Gauss visited Olbers who had discovered Pallas in March of that year and \ Gauss investigated its orbit. Olbers requested that Gauss be made director of \ the proposed new observatory in G\[ODoubleDot]ttingen, but no action was \ taken. Gauss began corresponding with Bessel, whom he did not meet until \ 1825, and with Sophie Germain. \n\nGauss married Johanna Ostoff on 9 October, \ 1805. Despite having a happy personal life for the first time, his \ benefactor, the Duke of Brunswick, was killed fighting for the Prussian army. \ In 1807 Gauss left Brunswick to take up the position of director of the G\ \[ODoubleDot]ttingen observatory. \n\nGauss arrived in G\[ODoubleDot]ttingen \ in late 1807. In 1808 his father died, and a year later Gauss's wife Johanna \ died after giving birth to their second son, who was to die soon after her. \ Gauss was shattered and wrote to Olbers asking him give him a home for a few \ weeks, \n\n", StyleBox["to gather new strength in the arms of your friendship - strength \ for a life which is only valuable because it belongs to my three small \ children.", FontSlant->"Italic"], "\n \nGauss was married for a second time the next year, to Minna the best \ friend of Johanna, and although they had three children, this marriage seemed \ to be one of convenience for Gauss.\n \nGauss's work never seemed to suffer \ from his personal tragedy. He published his second book, ", StyleBox["Theoria motus corporum coelestium in sectionibus conicis Solem \ ambientium", FontSlant->"Italic"], ", in 1809, a major two volume treatise on the motion of celestial bodies. \ In the first volume he discussed differential equations, conic sections and \ elliptic orbits, while in the second volume, the main part of the work, he \ showed how to estimate and then to refine the estimation of a planet's orbit. \ Gauss's contributions to theoretical astronomy stopped after 1817, although \ he went on making observations until the age of 70. \n\nMuch of Gauss's time \ was spent on a new observatory, completed in 1816, but he still found the \ time to work on other subjects. His publications during this time include ", StyleBox["Disquisitiones generales circa seriem infinitam", FontSlant->"Italic"], ", a rigorous treatment of series and an introduction of the hypergeometric \ function, ", StyleBox["Methodus nova integralium valores per approximationem inveniendi", FontSlant->"Italic"], ", a practical essay on approximate integration, ", StyleBox["Bestimmung der Genauigkeit der Beobachtungen", FontSlant->"Italic"], ", a discussion of statistical estimators, and Theoria attractionis corporum \ sphaeroidicorum ellipticorum homogeneorum methodus nova tractata. The latter \ work was inspired by geodesic problems and was principally concerned with \ potential theory. In fact, Gauss found himself more and more interested in \ geodesy in the 1820's. \n\nGauss had been asked in 1818 to carry out a \ geodesic survey of the state of Hanover to link up with the existing Danish \ grid. Gauss was pleased to accept and took personal charge of the survey, \ making measurements during the day and reducing them at night, using his \ extraordinary mental capacity for calculations. He regularly wrote to \ Schumacher, Olbers and Bessel, reporting on his progress and discussing \ problems. \n\nBecause of the survey, Gauss invented the heliotrope which \ worked by reflecting the Sun's rays using a design of mirrors and a small \ telescope. However, inaccurate base lines were used for the survey and an \ unsatisfactory network of triangles. Gauss often wondered if he would have \ been better advised to have pursued some other occupation but he published \ over 70 papers between 1820 and 1830. \n\nIn 1822 Gauss won the Copenhagen \ University Prize with ", StyleBox["Theoria attractionis", FontSlant->"Italic"], "... together with the idea of mapping one surface onto another so that the \ two are similar in their smallest parts . This paper was published in 1825 \ and led to the much later publication of ", StyleBox["Untersuchungen \[UDoubleDot]ber Gegenst\[ADoubleDot]nde der H\ \[ODoubleDot]heren Geod\[ADoubleDot]sie", FontSlant->"Italic"], " (1843 and 1846). The paper ", StyleBox["Theoria combinationis observationum erroribus minimis obnoxiae", FontSlant->"Italic"], " (1823), with its supplement (1828), was devoted to mathematical \ statistics, in particular to the least squares method. \n\nFrom the early \ 1800's Gauss had an interest in the question of the possible existence of a \ non-Euclidean geometry. He discussed this topic at length with Farkas Bolyai \ and in his correspondence with Gerling and Schumacher. In a book review in \ 1816 he discussed proofs which deduced the axiom of parallels from the other \ Euclidean axioms, suggesting that he believed in the existence of \ non-Euclidean geometry, although he was rather vague. Gauss confided in \ Schumacher, telling him that he believed his reputation would suffer if he \ admitted in public that he believed in the existence of such a geometry. \n\n\ In 1831 Farkas Bolyai sent to Gauss his son J\[AAcute]nos Bolyai's work on \ the subject. Gauss replied \n\n", StyleBox["to praise it would mean to praise myself.", FontSlant->"Italic"], "\n \nAgain, a decade later, when he was informed of Lobachevsky's work on \ the subject, he praised its \"genuinely geometric\" character, while in a \ letter to Schumacher in 1846, states that he\n \n", StyleBox["had the same convictions for 54 years ", FontSlant->"Italic"], "\n\nindicating that he had known of the existence of a non-Euclidean \ geometry since he was 15 years of age (this seems unlikely).\n \nGauss had a \ major interest in differential geometry, and published many papers on the \ subject. ", StyleBox["Disquisitiones generales circa superficies curva", FontSlant->"Italic"], " (1828) was his most renowned work in this field. In fact, this paper rose \ from his geodesic interests, but it contained such geometrical ideas as \ Gaussian curvature. The paper also includes Gauss's famous theorema \ egregrium: \n\nIf an area in ", Cell[BoxData[ FormBox[ SuperscriptBox["E", "3"], TraditionalForm]]], " can be developed (i.e. mapped isometrically) into another area of ", Cell[BoxData[ FormBox[ SuperscriptBox["E", "3"], TraditionalForm]]], ", the values of the Gaussian curvatures are identical in corresponding \ points.\n \nThe period 1817-1832 was a particularly distressing time for \ Gauss. He took in his sick mother in 1817, who stayed until her death in \ 1839, while he was arguing with his wife and her family about whether they \ should go to Berlin. He had been offered a position at Berlin University and \ Minna and her family were keen to move there. Gauss, however, never liked \ change and decided to stay in G\[ODoubleDot]ttingen. In 1831 Gauss's second \ wife died after a long illness. \n\nIn 1831, Wilhelm Weber arrived in G\ \[ODoubleDot]ttingen as physics professor filling Tobias Mayer's chair. Gauss \ had known Weber since 1828 and supported his appointment. Gauss had worked on \ physics before 1831, publishing ", StyleBox["Uber ein neues allgemeines Grundgesetz der Mechanik", FontSlant->"Italic"], ", which contained the principle of least constraint, and ", StyleBox["Principia generalia theoriae figurae fluidorum in statu \ aequilibrii", FontSlant->"Italic"], " which discussed forces of attraction. These papers were based on Gauss's \ potential theory, which proved of great importance in his work on physics. He \ later came to believe his potential theory and his method of least squares \ provided vital links between science and nature. \n\nIn 1832, Gauss and Weber \ began investigating the theory of terrestrial magnetism after Alexander von \ Humboldt attempted to obtain Gauss's assistance in making a grid of magnetic \ observation points around the Earth. Gauss was excited by this prospect and \ by 1840 he had written three important papers on the subject: ", StyleBox["Intensitas vis magneticae terrestris ad mensuram absolutam \ revocata", FontSlant->"Italic"], " (1832), ", StyleBox["Allgemeine Theorie des Erdmagnetismus", FontSlant->"Italic"], " (1839) and ", StyleBox["Allgemeine Lehrs\[ADoubleDot]tze in Beziehung auf die im \ verkehrten Verh\[ADoubleDot]ltnisse des Quadrats der Entfernung wirkenden \ Anziehungs- und Abstossungskr\[ADoubleDot]fte", FontSlant->"Italic"], " (1840). These papers all dealt with the current theories on terrestrial \ magnetism, including Poisson's ideas, absolute measure for magnetic force and \ an empirical definition of terrestrial magnetism. Dirichlet's principal was \ mentioned without proof. \n\n", StyleBox["Allgemeine Theorie", FontSlant->"Italic"], "... showed that there can only be two poles in the globe and went on to \ prove an important theorem, which concerned the determination of the \ intensity of the horizontal component of the magnetic force along with the \ angle of inclination. Gauss used the Laplace equation to aid him with his \ calculations, and ended up specifying a location for the magnetic South pole. \ \n\nHumboldt had devised a calendar for observations of magnetic declination. \ However, once Gauss's new magnetic observatory (completed in 1833 - free of \ all magnetic metals) had been built, he proceeded to alter many of Humboldt's \ procedures, not pleasing Humboldt greatly. However, Gauss's changes obtained \ more accurate results with less effort. \n\nGauss and Weber achieved much in \ their six years together. They discovered Kirchhoff's laws, as well as \ building a primitive telegraph device which could send messages over a \ distance of 5000 ft. However, this was just an enjoyable pastime for Gauss. \ He was more interested in the task of establishing a world-wide net of \ magnetic observation points. This occupation produced many concrete results. \ The ", StyleBox["Magnetischer Verein", FontSlant->"Italic"], " and its journal were founded, and the atlas of geomagnetism was published, \ while Gauss and Weber's own journal in which their results were published ran \ from 1836 to 1841. \n\nIn 1837, Weber was forced to leave \ G\[ODoubleDot]ttingen when he became involved in a political dispute and, \ from this time, Gauss's activity gradually decreased. He still produced \ letters in response to fellow scientists' discoveries usually remarking that \ he had known the methods for years but had never felt the need to publish. \ Sometimes he seemed extremely pleased with advances made by other \ mathematicians, particularly that of Eisenstein and of Lobachevsky. \n\nGauss \ spent the years from 1845 to 1851 updating the G\[ODoubleDot]ttingen \ University widow's fund. This work gave him practical experience in financial \ matters, and he went on to make his fortune through shrewd investments in \ bonds issued by private companies. \n\nTwo of Gauss's last doctoral students \ were Moritz Cantor and Dedekind. Dedekind wrote a fine description of his \ supervisor \n\n", StyleBox["... usually he sat in a comfortable attitude, looking down, \ slightly stooped, with hands folded above his lap. He spoke quite freely, \ very clearly, simply and plainly: but when he wanted to emphasise a new \ viewpoint ... then he lifted his head, turned to one of those sitting next to \ him, and gazed at him with his beautiful, penetrating blue eyes during the \ emphatic speech. ... If he proceeded from an explanation of principles to the \ development of mathematical formulas, then he got up, and in a stately very \ upright posture he wrote on a blackboard beside him in his peculiarly \ beautiful handwriting: he always succeeded through economy and deliberate \ arrangement in making do with a rather small space. For numerical examples, \ on whose careful completion he placed special value, he brought along the \ requisite data on little slips of paper.", FontSlant->"Italic"], " \n\nGauss presented his golden jubilee lecture in 1849, fifty years after \ his diploma had been granted by Hemstedt University. It was appropriately a \ variation on his dissertation of 1799. From the mathematical community only \ Jacobi and Dirichlet were present, but Gauss received many messages and \ honours.\n \nFrom 1850 onwards Gauss's work was again of nearly all of a \ practical nature although he did approve Riemann's doctoral thesis and heard \ his probationary lecture. His last known scientific exchange was with \ Gerling. He discussed a modified Foucalt pendulum in 1854. He was also able \ to attend the opening of the new railway link between Hanover and G\ \[ODoubleDot]ttingen, but this proved to be his last outing. His health \ deteriorated slowly, and Gauss died in his sleep early in the morning of 23 \ February, 1855. " }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Gauss.\ html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Gauss.\ html"], None}] }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Karl Gustav Jacob Jacobi", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ eJyV3QncplVZBvDzfJ/4OQPj8AEfMCjCiLKUuYeSWQwmigsWiTqSCRIKISpq lEuiRmku5F5m7qmVVlZqpmZaViaumUu5lJrmkmaupaTd//c518zhdWDk/v3m e/fnuc91rns953nmrmc9/NxzLjjr4eedfdaRd3joWQ8597yzH3bkyQ9+aL21 OrXW7l3/Ljiyef7depo/q+uH7Za2ZfF3+2EHlRxYckzJnUrOKDml5LiSjRK/ vVXJH5R8u+S9Ja8q+XjJN0q+XPKdku92+feSp5TcuGSlxG/vXHKDkoNLHPsO JdcpocLhhx/e1g73d/Xwjd3SFi8mp5/atm3b6nF17dDd0rYs/m4/dP8uNym5 X8nDSn6q5IYl3l8tuXXJG0voSv/3lXy+5DtdjCP6f73Edx3D2H+g5IQSxzuk 5PiSnyjxPhULvrYGxLZ60B70rxFPB6+vr9N/88G7pW1Z/N1+MOyvXQKvc0t+ seQuJSDZUuJzGL655KMl7yr5Wgk9o/N/l+T5/5V8ruSpJfSHM92PKgGZ57cr uU0Jtbdu3drWtvq7unUP+teIp0PW1tbov338fMvi7/aNI0r2K9lecs+Sc0p+ pITeDntkyU1LXlfy1pK3ldDzWyX45Pl/lUT/r5R4NEcnl8CAno6Tyac/roIQ tmvr/q6u70H/fffdd9p38+bN9L/OnvQ3j/R3DvP6kyXHljjvASVHl7AFnP+j kjeVRP/Mwaj/J0vy/FdLrlFS598MJ/xxTOc5rcTrvfCnPpgOKmjpv+N79V/f oCdMfrDkxBL2ddsS9gZ//GcbdPmLkn8o+d8S+v1HyeWXX97WLvd3/XL6XLeE XZbNbYPNj5f8aAkMCsx9nQ/c5je+w2vnotERg90W9a4E9/UNODgX3cznXUtu X8IOcNZ5cIo94/6HS6L3F0uKOm0Ngdp+335gCf3w3eHZOw7evOSWJeyLfl3v FTq31YXaXMSgdhnHdMMdO3ZQu41qX3vxd/8NZklFKt+tBA2dDmWiNhf69pIv lfxPCZW5mGLMGtq0Td/6YAmm0dhPeBiaOnSdfsesoL/7HHjAIFQe1K1fTlv2 hjJ2YLFz8LysyvMblXifDncsYXFU/WYJYHmSArytgb2tL5B/dsn1S65VgtH0 5Z3AgTEY5NTRlXhuKMvsmGX1kD3pzSJNjWOaWeegM09yTBe/xpgPldCNVwQz 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 zwvs6f8Bzv49qg==\ \>"], "Graphics", ImageSize->{90, 109}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: Karl Gustav Jacob Jacobi"], Cell[TextData[{ "Born:", StyleBox[" 10 Dec 1804 in Potsdam, Prussia (now Germany)\n", FontColor->RGBColor[0, 0.500008, 0]], "Died:", StyleBox[" 18 Feb 1851 in Berlin, Germany", FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text"], Cell[TextData[{ StyleBox["Karl Jacobi", FontWeight->"Bold"], " founded the theory of elliptic functions." }], "Text"], Cell[TextData[{ "Jacobi's father was a banker and his family were prosperous so he received \ a good education at the University of Berlin. He obtained his Ph.D. in 1825 \ and taught mathematics at the University of K\[ODoubleDot]nigsberg from 1826 \ until his death, being appointed to a chair in 1832.\n \nHe founded the \ theory of elliptic functions based on four theta functions. His ", StyleBox["Fundamenta nova theoria functionum ellipticarum", FontSlant->"Italic"], " in 1829 and its later supplements made basic contributions to the theory \ of elliptic functions. \n\nIn 1834 Jacobi proved that if a single-valued \ function of one variable is doubly periodic then the ratio of the periods is \ imaginary. This result prompted much further work in this area, in particular \ by Liouville and Cauchy. \n\nJacobi carried out important research in partial \ differential equations of the first order and applied them to the \ differential equations of dynamics. \n\nHe also worked on determinants and \ studied the functional determinant now called the Jacobian. Jacobi was not \ the first to study the functional determinant which now bears his name, it \ appears first in a 1815 paper of Cauchy. However Jacobi wrote a long memoir \ ", StyleBox["De determinantibus functionalibus", FontSlant->"Italic"], " in 1841 devoted to the this determinant. He proves, among many other \ things, that if a set of n functions in n variables are functionally related \ then the Jacobian is identically zero, while if the functions are independent \ the Jacobian cannot be identically zero. \n\nJacobi's reputation as an \ excellent teacher attracted many students. He introduced the seminar method \ to teach students the latest advances in mathematics." }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Jacobi.\ html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Jacobi.\ html"], None}] }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Adrien-Marie Legendre", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ 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 x+Q1TapLshqgtFYp0mupnohhqheakpan5ZsqAOJaVqK1l56I0f144A/W6hfd BOw3XrPnPnS/u/Nal3Gcqey2FdcCebfPIrJj2mrbzRT7EuuTdnXL4m65K0qh WLk2nMC6X6/Zbxv5xrd/IiyI48Ub1QMR1Yon0wFlE20GHIPYvmvrrFmBtBjF 7JgZxJYPGolMprsPu4kF+uWQrW61Tug11Lu9pBij/E+lK4Vpyb8NFI4ts+8W j/VWWd6x2e5ee1to+Kh8F1yWKGJP5M3mqvdcKNAtTbR1XvD/L0csiAGNtVgK 6e8WilgUZbdNQuVwobWiFRXQjt9p9lLy2+z222+edWnLJ0ACJsCBKeE5fKNv 9xMXeiw3/H/Uox1KSYFXkpR/6F6DiqwmsXt0qEubtqSgMIAji8EhZj2Ge9u3 L3Wo110o2JyBiLmHDaiGANln9qDNKDrDVnCCAGWamXTHqlVxknZdyIF8b6US c04tsr6/tvWsQGrPJUZiIkdZtTqHWFXwMxcBEmDXG67bdN79xCa0mirRH1G3 TFN9lStgg/S9dcB1xLZUTzfbB5fKyKsvFG2/e62uSLwvGnc868xWQJ+FZlPu WIRDcXuaepBZMDPOU7ei00W0a6SzK+01aO8BxHseEpSh0Zb56qVZYGEHq94O kVSknSOtP6zXJrTtRoXvG2HnhB/qEFS0+FffYVL9br9+4JEBm82z775QtFt1 5xvKwR2rrarl1WHboUkYFb2EsLU0e31Ye207j57gaJutQ7XHImTFHzU0z7y0 m0C7fQwXRdLtU+32L0hXcclid8u49hmabr9cc1sUzmh0YwbvwxCWHcAQBrAQ CwgEB6LtaVujxtifD+zNpdDdXHm27wAZyN77rmQyi+UiXAVLDThtooD7WYuL gO94E6X40D0IlLj4LmvZYg1ZNnPsd5A+Y7dnt22AHdKmNzFKK2jtMu3ZOzSm h5i0Xr7GVIbDphkiLWULDcVQH1nE+3Yx7R8ssl+POQ6gLzwS0La2EnahChQr i6FqvlZ01arNunSm67LU1tXV2dpN0Ipv6yX5+fYlPWERoJfKpO8Y262r7VDv AQW12z3rEG+T5fq5Vq75d0aqJCyrWLtE4cOLtCrot088ou0PYSuyQPRfcCGD VnNGUSmKqK34GZWL5FhbtQ+xJ0tZplv0ZfS453uotPrVXiRI02H0btWsz/S6 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 d/gl2qXpeINTeNCTJrWBn1DkKaDf08KJiLn6qfNsvxBVi47VQvFRmyoveFsV nW10LBTFgdBjs80ANPn4Zr1a3VHWi6/Z3rsgefuFIHmURW4Vd9mpe8Z3jsGn 1qpEHPhTZbtnPvYkFL685+PdukhlFRkjK9FfM2wdinehyT1GQpwg6hE70Gj2 UR1NBmcGIF8WV7ZQ2n4+j7rX7v2fbzr5kx8/ks858laZw1sW173ld41AJMJL sKE9GRPS7ZLvmdJ4BSHHymdxuj/wpzjAg9BcPhwf8zQ01jWgbN0BB3syrEjc MQfn7ix98sFy7+qZsorzRXljjHpw1Mlb1gBd/hhA7oPwK3eJj4tKoHTeYLhI VEKhbgHwfQ/2pWwUqb0fAgxUFEBzoT3KX8VFW1IKyRgTFm1sYeUIgMqNL4HV ftwnDyoznW337lb4vGWRDe8NxxveVbsnApdPsLxWymxdYdFFBexAf3cbi8Xy Mm7dFqmK8QxJ9MqK0yaZvRxVxKBNwwNBTxtTARBFiGBoHJ61n6T4v9qGzOmU H7cPDqu2d+//BNFH1oY+9vhOncXbtbeiye3X3BfSrtjtWsA1v4mCFFB73iFe dr9c0bux+50OKKLCie/nqRS/WBWeL+/SPVit6vWETsfM21M+b+3m3p4eq/xR Tvx807d+qC3V00XGjjNW8qJymGkKmHhuhYGyXkzF2nKg246x1vtti2Ck5TPD 06YwBhu5l0L3oDW0SgTSy26psIR+yoFbe9O3Dy/llncdd3zaDq5cEMpK4JU+ jAnVBMgCgvbLMSt+Z356CK7xMS2mrwSfVkoPOASXbCyl2j4vN77tarMtRfm8 rAtsTp3eTd3uL9EuDu+Nj0f91uFpaw1dB0X6u/Dr7SmCK3MhRWJ+BffCAhaJ MxMy9LfPGlehJM5oZ72AVABU6afk9bB5eaxVgI89vkvOrufN9YQo3MOC7RN2 1uySXVxmeOt1/+ooc8TFu8NOtSB2f0+oWy11zfX9f9G5B78s7vSUq24/vOv8 OH6d3xyv8xedzRYt/mW/p+PiXQrRTv4Smf1y5WW78mzcMSint+FgvS29/aSP urKTB6uteR+xWWLZV3x6CRUHh91odo972vNt+/8BdvkUww==\ \>"], "Graphics", ImageSize->{90, 109}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: Adrien-Marie Legendre"], Cell[TextData[{ "Born:", StyleBox[" 18 Sept 1752 in Paris, France\n", FontColor->RGBColor[0, 0.500008, 0]], "Died:", StyleBox[" 10 Jan 1833 in Paris, France", FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text"], Cell[TextData[{ StyleBox["Legendre", FontWeight->"Bold"], "'s major work on elliptic integrals provided basic analytical tools for \ mathematical physics." }], "Text"], Cell[TextData[{ "Legendre was educated at Coll\[EGrave]ge Mazarin in Paris. From 1775 to \ 1780 he taught with Laplace at \[CapitalEAcute]cole Militaire where his \ appointment was made on the advice of d'Alembert. Legendre was appointed to \ the Acad\[EAcute]mie des Sciences in 1783 and remained there until it closed \ in 1793.\n\nIn 1782 Legendre determined the attractive force for certain \ solids of revolution by introducing an infinite series of polynomials ", Cell[BoxData[ FormBox[ SubscriptBox["P", "n"], TraditionalForm]]], " which are now called Legendre polynomials. \n\nHis major work on elliptic \ functions in ", StyleBox["Exercises du Calcul Int\[EAcute]gral", FontSlant->"Italic"], " (1811,1817,1819) and elliptic integrals in ", StyleBox["Trait\[EAcute] des Fonctions Elliptiques", FontSlant->"Italic"], " (1825,1826,1830) provided basic analytical tools for mathematical physics. \ \n\nIn his famous textbook ", StyleBox["\[CapitalEAcute]l\[EAcute]ments de g\[EAcute]om\[EAcute]trie", FontSlant->"Italic"], " (1794) he gave a simple proof that \[Pi] is irrational as well as the \ first proof that ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Pi]", "2"], TraditionalForm]]], " is irrational and conjectured that is not the root of any algebraic \ equation of finite degree with rational coefficients i.e. is not algebraic. \n\ \nHis attempt to prove the parallel postulate extended over 40 years. \n\nIn \ 1824 Legendre refused to vote for the government's candidate for Institut \ National. Because of this his pension was stopped and he died in poverty. \ Abel wrote in October 1826 \n\n", StyleBox["Legendre is an extremely amiable man, but unfortunately as old as \ the stones.", FontSlant->"Italic"], " " }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/\ Legendre.html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Legendre.\ html"], None}] }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["August Ferdinand M\[ODoubleDot]bius", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ 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 1DjanDDPej0utS/4zbR/8NLN9h6zLUv3pfIMRK85rwqM/nhVlrvdknZfzrPy dL6zmvr351ezX5Sdm4zD+C0tHei4u4kSwK0lUNo2c6xsc3x9XR5vk7MWaNeh YaAFnBUQV9MKFTs3QNu73h+0zeSznx3aZ7CdScxaPW/CbyU53dFjHtLBQnSg Pzgl8vWpRSrjhsrK3dtv3vblkv7cbwgXTyO5d/ggy6RAgWHCp0Qg1yrfHMY3 zrH02DtUWOP7ckjqX0qk+Y5gSteNOKam15zC7/3rho9YH8KK6a/19f0TMrvW VwmQNVJbR03rouHQ8vieP/tKHr7l0Fn2FtMzFeVYa68bScxLStSJ8QifKu8e dsq+x7smMl133XVauG6xITPPhv0Lni27h15FCjsw9JQ+zC6h2DjpfJpKTG5t WN+QYe8RoBFzHw7t7Ctv0OiPcSQt6y057rN3ub4rVbQ1IRarWGaqq2hUeoPT 1+ZzPgsKkKs/1ydg9i2E8x8rsQODuL09xdvGIBK6GljDkfDBUnn6zqG1wxUp +j3K2EuymQzD31BSqf7mElvsmRUE+BSc6BCoOY53T3yYCXBwMiBpDIcs9YsL Z2i+nAalis6iCN+yc1lxv/Fhnjk18f/BQXSeVHloR45Kxsf3O985hJck3bzT tezWUovmW7SZhFbf2YQX6HCoSY4fufbaa1s4GtamcNXcRMNmz8K2uerX95dI WaTADCHOPav4I50rHU5u49CevvaczK0PvCnouZ1PsChRdlQ25u8+2ITK6JkK /y/Wz95w7ZUuxQfsbFM3TXtP81/+3b1wMMYCil9RVLGcDd5t8XZEU3bibfIV xy232/st911Nzpz34Sax2OCYndRuYXFanKSqS5V1aVsbvVnfNcuwY8uM77XQ hNnlPopGcu8/3ASSDb00q8e2Lmt82LHgIAUh/Df3pvsjwUEONXmxvbuTkPZb iVnZkzw0J2SCvlF6HsT6xOoPNenG6y6VrFXFl0/gNJe5QyPHXb6eabf0ts1z 78JnSCGoNrc4CfQRI3//WsmF89NARxoG6455dXzcerxm6nlJ8ZLsaxXtubZs 9FOkUGXEvJMZNI+13oC4a0OG7Vst4AN9FDx6+nfX5ARDM+UtyZYSwpeWLMP+ OUOy59VsnzGvbgJnCec9I0+NxswEV4yPr1x9HDNOP44h23xJhrJPkCMyfLGD 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\ \>"], "Graphics", ImageSize->{90, 109}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: August Ferdinand M\[ODoubleDot]bius"], Cell[TextData[{ StyleBox["Born:", FontSize->12], StyleBox[" 17 Nov 1790 in Schulpforta, Saxony (now Germany)\n", FontSize->12, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["Died:", FontSize->12], StyleBox[" 26 Sept 1868 in Leipzig, Germany", FontSize->12, FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text", FontSize->10], Cell[TextData[{ StyleBox["August M\[ODoubleDot]bius", FontWeight->"Bold"], " is best known for his work in topology, especially for his conception of \ the M\[ODoubleDot]bius strip, a two dimensional surface with only one side." }], "Text"], Cell[TextData[{ "August was the only child of Johann Heinrich M\[ODoubleDot]bius, a dancing \ teacher, who died when August was three years old. His mother was a \ descendant of Martin Luther. M\[ODoubleDot]bius was educated at home until he \ was 13 years old when, already showing an interest in mathematics, he went to \ the College in Schulpforta in 1803.\n \nIn 1809 M\[ODoubleDot]bius graduated \ from his College and he became a student at the University of Leipzig. His \ family had wanted him study law and indeed he started to study this topic. \ However he soon discovered that it was not a subject that gave him \ satisfaction and in the middle of his first year of study he decided to \ follow him own preferences rather than those of his family. He therefore took \ up the study of mathematics, astronomy and physics. \n\nThe teacher who \ influenced M\[ODoubleDot]bius most during his time at Leipzig was his \ astronomy teacher Karl Mollweide. Although an astronomer, Mollweide is well \ known for a number of mathematical discoveries in particular the Mollweide \ trigonometric relations he discovered in 1807-09 and the Mollweide map \ projection which preserves angles and so is a conformal projection. \n\nIn \ 1813 M\[ODoubleDot]bius travelled to G\[ODoubleDot]ttingen where he studied \ astronomy under Gauss. Now Gauss was the director of the Observatory in G\ \[ODoubleDot]ttingen but of course the greatest mathematician of his day, so \ again M\[ODoubleDot]bius studied under an astronomer whose interests were \ mathematical. From G\[ODoubleDot]ttingen M\[ODoubleDot]bius went to Halle \ where he studied under Johann Pfaff, Gauss's teacher. Under Pfaff he studied \ mathematics rather than astronomy so by this stage M\[ODoubleDot]bius was \ very firmly working in both fields. \n\nIn 1815 M\[ODoubleDot]bius wrote his \ doctoral thesis on ", StyleBox["The occultation of fixed stars", FontSlant->"Italic"], " and began work on his Habilitation thesis. In fact while he was writing \ this thesis there was an attempt to draft him into the Prussian army. M\ \[ODoubleDot]bius wrote \n\n", StyleBox["This is the most horrible idea I have heard of, and anyone who \ shall venture, dare, hazard, make bold and have the audacity to propose it \ will not be safe from my dagger.", FontSlant->"Italic"], "\n \nHe avoided the army and completed his Habilitation thesis on ", StyleBox["Trigonometrical equations", FontSlant->"Italic"], ". Mollweide's interest in mathematics was such that he had moved from \ astronomy to the chair of mathematics at Leipzig so M\[ODoubleDot]bius had \ high hopes that he might be appointed to a professorship in astronomy at \ Leipzig. Indeed he was appointed to the chair of astronomy and higher \ mechanics at the University of Leipzig in 1816. His initial appointment was \ as Extraordinary Professor and it was an appointment which came early in his \ career.\n\nHowever M\[ODoubleDot]bius did not receive quick promotion to full \ professor. It would appear that he was not a particularly good lecturer and \ this made his life difficult since he did not attract fee paying students to \ his lectures. He was forced to advertise his lecture courses as being free of \ charge before students thought his courses worth taking. \n\nHe was offered a \ post as an astronomer in Greifswald in 1916 and then a post as a \ mathematician at Dorpat in 1819. He refused both, partly through his belief \ in the high quality of Leipzig University, partly through his loyalty to \ Saxony. In 1825 Mollweide died and M\[ODoubleDot]bius hoped to transfer to \ his chair of mathematics taking the route Mollweide had taken earlier. \ However it was not to be and another mathematician was preferred for the \ post. \n\nBy 1844 M\[ODoubleDot]bius's reputation as a researcher led to an \ invitation from the University of Jena and at this stage the University of \ Leipzig gave him the Full Professorship in astronomy which he clearly \ deserved. \n\nFrom the time of his first appointment at Leipzig \ M\[ODoubleDot]bius had also held the post of Observer at the Observatory at \ Leipzig. He was involved the rebuilding of the Observatory and, from 1818 \ until 1821, he supervised the project. He visited several other observatories \ in Germany before making his recommendations for the new Observatory. In 1820 \ he married and he was to have one daughter and two sons. In 1848 he became \ director of the Observatory. \n\nIn 1844 Grassmann visited \ M\[ODoubleDot]bius. He asked M\[ODoubleDot]bius to review his major work ", StyleBox["Die lineale Ausdehnundslehre, ein neuer Zweig der Mathematik", FontSlant->"Italic"], " (1844) which contained many results similar to M\[ODoubleDot]bius's work. \ However M\[ODoubleDot]bius did not understand the significance of Grassmann's \ work and did not review it. He did however persuade Grassmann to submit work \ for a prize and, after Grassmann won the prize, M\[ODoubleDot]bius did write \ a review of his winning entry in 1847. \n\nAlthough his most famous work is \ in mathematics, M\[ODoubleDot]bius did publish important work on astronomy. \ He wrote ", StyleBox["De Computandis Occultationibus Fixarum per Planetas", FontSlant->"Italic"], " (1815) concerning occultations of the planets. He also wrote on the \ principles of astronomy, ", StyleBox["Die Haupts\[ADoubleDot]tze der Astronomie", FontSlant->"Italic"], " (1836) and on celestial mechanics ", StyleBox["Die Elemente der Mechanik des Himmels", FontSlant->"Italic"], " (1843). \n\nM\[ODoubleDot]bius's mathematical publications, although not \ always original, were effective and clear presentations. His contributions to \ mathematics are described by his biographer Richard Baltzer in as follows:\n\n\ ", StyleBox["The inspirations for his research he found mostly in the rich well \ of his own original mind. His intuition, the problems he set himself, and the \ solutions that he found, all exhibit something extraordinarily ingenious, \ something original in an uncontrived way. He worked without hurrying, quietly \ on his own. His work remained almost locked away until everything had been \ put into its proper place. Without rushing, without pomposity and without \ arrogance, he waited until the fruits of his mind matured. Only after such a \ wait did he publish his perfected works...", FontSlant->"Italic"], " \n\nAlmost all M\[ODoubleDot]bius's work was published in ", StyleBox["Crelle's Journal", FontSlant->"Italic"], ", the first journal devoted exclusively to publishing mathematics. M\ \[ODoubleDot]bius's 1827 work ", StyleBox["Der barycentrische Calkul", FontSlant->"Italic"], ", on analytical geometry, became a classic and includes many of his results \ on projective and affine geometry. In it he introduced homogeneous \ coordinates and also discussed geometric transformations, in particular \ projective transformations. He introduced a configuration now called a M\ \[ODoubleDot]bius net, which was to play an important role in the development \ of projective geometry.\n \nM\[ODoubleDot]bius's name is attached to many \ important mathematical objects such as the M\[ODoubleDot]bius function which \ he introduced in the 1831 paper ", StyleBox["Uber eine besondere Art von Umkehrung der Reihen", FontSlant->"Italic"], " and the M\[ODoubleDot]bius inversion formula. \n\nIn 1837 he published ", StyleBox["Lehrbuch der Statik", FontSlant->"Italic"], " which gives a geometric treatment of statics. It led to the study of \ systems of lines in space. \n\nBefore the question on the four colouring of \ maps had been asked by Francis Guthrie, M\[ODoubleDot]bius had posed the \ following, rather easy, problem in 1840. \n\n", StyleBox["There was once a king with five sons. In his will he stated that \ on his death his kingdom should be divided by his sons into five regions in \ such a way that each region should have a common boundary with the other \ four. Can the terms of the will be satisfied?", FontSlant->"Italic"], "\n \nThe answer, of course, is negative and easy to show. However it does \ illustrate M\[ODoubleDot]bius's interest in topological ideas, an area in \ which he most remembered as a pioneer. In a memoir, presented to the Acad\ \[EAcute]mie des Sciences and only discovered after his death, he discussed \ the properties of one-sided surfaces including the M\[ODoubleDot]bius strip \ which he had discovered in 1858. This discovery was made as \ M\[ODoubleDot]bius worked on a question on the geometric theory of polyhedra \ posed by the Paris Academy.\n \nAlthough we know this as a M\[ODoubleDot]bius \ strip today it was not M\[ODoubleDot]bius who first described this object, \ rather by any criterion, either publication date or date of first discovery, \ precedence goes to Listing. \n\nA M\[ODoubleDot]bius strip is a \ two-dimensional surface with only one side. It can be constructed in three \ dimensions as follows. Take a rectangular strip of paper and join the two \ ends of the strip together so that it has a 180 degree twist. It is now \ possible to start at a point A on the surface and trace out a path that \ passes through the point which is apparently on the other side of the surface \ from A." }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Mobius.\ html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/Mobius.\ html"], None}] }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Joseph Henry Maclagen Wedderburn", "Section"], Cell[GraphicsData["CompressedBitmap", "\<\ eJzN3QvYZVd91/F93ml48/YCM1UKaSnNWAtEKDC0KaFAgdIS0pbW1gumUiti FdTSSvF+q8YbKt4vRRRtrRUTJWqM0dCkDbkMhGQml3ZyMRRCkqYgQqtWq1bj +pyzvzM7pwlv6Pj0yf95ZvY5Z++91vr/1v++1t7va17/1jd+13e//q1vesPr zz7/La//3je+6Q3fd/arvuct46cDq2mavn38e/PZk88PjY/9d87bv3DQUwb9 6kEHBz1pkOPnD/pVgz5v0BcNes6grxj03EFfNuhLBj190BcP+tJBzxz0awZ9 wSD3fM4gR227/+xB7nvWoHMGObrnnJl+3SB9aP95g54/6Mig0eW0q+PprK9w v3tc55ojM/nsPpf57Brje+ogPByayWe8GdveIEffjfFpgw4fPjztHvb/3uEv H2TM2nn2IN9/7SDjfuGgiy66aFpddP311w8cz7kL1xDUyxNngiQU/e4ztHDl bqN+xiC/QcdR60ZuAE8eZHRnDvrsQWcNmkd42H0hhnyGiBGGnvZfMAgiXzno 3HPPnXbP9f9Z58bNjO76vKOxudc5bepLv1AzfrP5uYPi0biMzzjx6Vp8DNCm XdBNe2cbHwR9bdZ99/lrBr3uda+bVq97+9vfPlB85ru1Yj60ric9LlGEMlnD 2VcNMtpkkRySPwjq1XWuD0XzHdLOGQkkIPfsmbbkbo2MfsaETXumbXriC+fv L3zRTD6nF9owFjNlBo19RmnHGKYzz4w1w/GTzwA2tIH3mbP0GZ2POMINLo3c 3Lx60OWXXz6tLr/rrrtI3yUaTef05xhuxhH6L5gpfPTg6Jzx413PbII2tWOA +El/3ZukOWYXtvBa4/PVg1486Lzzzpt2z/P/Wed9zUwvGeQa44GbccDOmI29 edudKX01Hjz2u+9kIzs0lGPapSLT3jNCDk/G62d9GOdvGPTOd75zWr3z3e9+ NxTfFnpNje9QMD1QTEJIB671BhV6qyfnQgAycZMtMH/pr7bS1ZCknqEHrNCD 1EsHDbCmXZBNZ73oZYPm315kPKTeLOkPIvFy5kw+G0cS0bknDApFvxszxMbw pl2DnPbWtgJ/xmm2oEkuje23Dbruuuum1XWXXHIJFI+FoFaXPUORPmaVyJpR P30mqIRg3ONMT0bG6hj9NorpbEguEYSOUUIquRvNTrsan876ar/7qE8ckiEz 9VmD+Md4SfacMxb6YRxJSijSQTyG4hjOtGtQ095zs6z4N9N0juSYye8adM01 10yra972treNfg9fujMo04BzI/GdjcX5c2bKTph7SEEMlzjDOaTJqXaSZ9rC 45Hd5hWSSxk+hdKRtQwa5dcNOn/Q1w/yPT/mPK5wo92iCOPWF1RWgyCqf/1A wJGHzrdAE5IQdR/pcJ1+4s3s4hV6xuN7Vsxwv2EQlN3PTg4Nf+fdd989re4+ duwYZN9hJHrKz4SskeTf86Z60bMefDaC4hXXmo3awO1ZM7mnGCX/4jNulsi+ bKaXD+pzs0frs8c4Nt70qjGn5fTCeLIgJIScLp1NWo5P43fd1w4yPv1BM97p Dhk2lnytWc4L/fZBVwy69tprp9W1l156KWTfZX7N3+fMlOaHiBFqnXxptRhD i3ojO0aXDBm1NsxlkSbOoOL+7KbvRjgAm3bBNh15CW5whwMjzxs57Tf9GZdZ 088Zg4zd52IcqOvDPWbGuIsq8o55JjNAn1xPXl81yGd9kcOsFH10rfHjBeKk ii449wcGDXt63ZVXXjmtrnzHO94B2YvJLJvUCGkLjU7rESTOmwnKECMDeoMq bh2zJkafxXc/Gc17FVMbJW6GeEy7hGQ68lKcsQCvHASVfHjWaBmLLC1ONpMM uZ7Ma8PslFOQBvdmU82E+7IYZtA9+jFW6OLbDP36Qdp6ykxmqjiOJPzxQT86 6MYbb5xWN77rXcT18Hv0AlnzD5Ulql82EySgoEc2yYigCsmsgev8Tm5xAFny 2vwWLWqjUZmpAeC0C8bpyMugyr6SF/Lrev3lr9N89hKH0GrWXAuNVwzCLaTK hNJqaMavNiAE1ZfMZGaTQ+25/7cM+huD/t4gCL9mkOvggW9C8f2D3jdoY2cv vvjiNbJ6ax7LIY0mT5PmFgc4j1Pa5fNXzeR8MQB0HdNM5186U3F4aAzxmnYJ 2XTk5V87E3QgAw190CVWS7tkVLvGQj4hQtbMyDcO8tmM6bfcNXTxClVem2Ro 36S6x6x80yBjfflMJOD3Dnr/oE8MovH/ftDfHPRtg8yM6//SoBHj33XHHXdM qzve8573QPYyMppV19tS0rOFODA6Gg99HNI+6Dtv3l2bPctKsAbuhRK0jDa5 dY/PA8hpF5zTkTWifitbbpbKgeeI/BnOz3HF2uslp9B1P8SKP1xLts0ICwJV FtB3Y0tHjE0bZuWCQb7zMd8x6OZBDw36+UH/Z9CHB/31QWTXvX97kN9uuumm aXXTjOw1RSPZxnJ9PRg9mYCy0eHOnEO3+XreTFCGBmTNFsvgmtogF8liPtvn bWTNKjmlR1Cg/cZYDqw94ytTcCwnJXfGAhHjiQftQROPRWV4NYZvnEnf6Sa0 tAkXv4/M8/L/PuieQQ/N9MFBf2TQGwaxFLcOOnr06LQ6etlll432z73qwCAc kFkyZoQYTXaMqvnGrd4giEvy4ogD95mVohtokK8yTpYg2UJFVsmu72RAnIhT coPDrE8Rk7Gw6dpli9PcRZQ2HQDxdHgdIVVvaRw+s1ra2ZnJ7OHJeWPITuOn OLd6Drv7bwb970H/c9CHBkH6k4N+/yB518D2sp8cxOKuLpY/TNOFV+fJcAMZ 8mpuy3+LCarzQRCnroPe6SLtd9+hCmHHoidaTie0NRc8DrNSy7yoGGY7dytO Ns5ttH3PYhSR0Tvjd69ZhngeMv3LNosNfnzQfxv04CCWAfKsyGsH/aZB/2IQ Ob/qqqum1VX+H2gf1ROOcFG0T+P4fhxCLq/ltzkrfG6cni7aOIMyLnzGkfb1 VcZN34oOIarNvFjZePK3jbrfq+50nlUgx9UaxEH6MwuQNR42Op3Jymn3Nw/6 c4P+wyAW5IFBHx8E9b8/yPXfOejfDvrAoGFIptWtV1999UD7yK2QpFWNqMy2 Wle5UJ4u2Y+L00VbBARpXGa5jId911YZjnbcow1cF+GPoUw7BjQdWI8JDbWY dijHdHhty+ffvjK/Q6rwg/eyIf2Uv4ka9cOvFDMlXcbKLkOTTP/XQZ8aJA6W w+Hpzw8aXvCmWwadOHFiWp1guafpObeQXyhBLhtd5byalqzCNXP+9ZKqKWUP p4O2WNP3agtVfqrmLas8o9uddVL97LUD9LNmSv8KDlNRk5GjNPSMjmYFgZw6 Q0q4qHYOFYulAo7AB/LXzSSoA/bPDfqZQbcN+sOD9PctgxiRAfKJWzY0rW4h 4MOQXNtSSEsXFU4K3oBf6gQw3FV4IeqnC3ahjWspszGEEnF3Xdxvhdkvx/nS pJqIgtACupLwJs3R71SHUAmlGKsS7kL6UtEWDBgX51zHpL9t0PWD/vkgQZ17 CSUnOVziNSPdu5HZVv5ZHYP5MCSXGxk0S+WJcgsMCOfMHE4yY6VEmc3TQds1 +m8ppxTTOTKlX+2nzM7hTFvODzCnHZBOn/XilyxodLezztPPfmlNBDqxB0w1 S9rkvOaKootk2FWTDHATbajuJ+q/bxB/+FsH+c0ofmQQX3nlICI/UpbVXYpD XKQBMJKMlzCQRJt1UuZYKpxzrrRIOkrGTgdr1+cQwjjbUJGtIhfQtNM1JWu5 v+agEBIg2Zgl2PoyPkAbKwDdx6RxjUtjvQxLaZJzOQHnaX6YvGnQTwxiQwTi Hx00POi0esCCELRbxi2Q5qBJdIYz599yUPpbWrw04q7/4pnMBCRy5O4RcCSt LYgUaDcb2Sm/byOZi3Rt6YlzSUHpPbf7Gwfpb1mOzGILRrKXkK4Izia5X98F OoWZjXG5HIWPbx6kfTP1dwdJzX9sJshvApKNi7zwhtCuGMuOlKBBuGAVzYW0 tWzpqYA7WSAzh2dif6BRkexVM0EmZcZpCyU4SN4hk/V1XUvOeY2sfWFZBecK FJAW9JLvpU7oyxgLLfGafmqTzmm38u5jQVsfxvvtg3540PFBwr4bBt0x6OFo t3xfcaFiXQsiBdb1lIyEUGlEfrMyDoSM0GikK4VUSyRZ6IrHWYalr8OtGWe1 KqA12/Vd+h/yoa3kE3qvmMm48UWaPn+mpCLrlBSlV/uhXeHluwexHv9x0O2D mG5lpmG5p9VtA3poX39oQeS8Mn5lGrKg1ZaE4qpSYuWZCh1GlywaCbS7ruJF VsF95L77/dZiXUFySWDB7nK5tEilGXSt+2m1sZKU7LjvrqV3JKpi9dInQ9Hn iiKPBW19av9PDhKJCMCl69BmSZZoP/86cr1Emk0r0E3+9AK1Er25gLxGMm7I L+RaXnc+z1IMl0bjnL3LtppJ12UhiqSLfltUrMy0WOLfBCPPfDHxLIQzLKcZ DBNZF0BrRQurVHBZG8yItD7+WMCmKpzx2wcNc3GUaIuwVVgBvgF7s1vnwmsZ D2Crorf2vF2DMJIqjcVIrYACGDfAE5B2HtDlhwXDyDlo2HOgslMe2UpqsVoh RKtX1VMy3dqdw78Xp/zImJhs91FR1xq33/HEiECbiBdy1GaimgF9rGgz2f9o EHSJtSCb2Wa+N2jbFwBtbrn9Qa00FUpUB8ykllBBFgdluH6DHlPps3OO3zrI MdN9/kzLugjxlnz5fYl24rtcdS0AZyiKcgvUyKRr/PaWQTLoUMmQMA7tVmiN uvXDZRLRunvOcj9DwmSrBzIcTLa0BtIy9w3ac7j9w6EtbJQ155BKvKqUkyHy BEGcQkuvS+5RsgpBM6CCA1H3maWCwII2cuhcdb+MSJWlF86UcTJzdMIeCFwW jkNGu1Lqvzjojw5yXQkpZCHJYOIXmoXjuQz9to7fCsR+aDtWD2RFIA5lcq6u /TC0LxGECfZa3279rD0T5CIrUs0Zut88U84zZ9eKk2tdBykI49xsFATi9HWD HKuybpt43GuH/GhLXa1VVCtLtBVq7K82XOv+fzgIx39oENQKTVgRSRztNw66 mFMuBMopt16UlcGD9v0GJ3xdOMj5HxgEaUkN202+7x5kDJs1xREZQvuK9mi0 E6QUyfxBbT+0IQTtzjtHrsk4mXW+38yEflpfzta7L0e5DEuSZ0fnK1JI2S6e iZSQFv3RI/r07wb99CCea5lz803JtfaWqWYlqMLscIBuNjz/035GYyNB/3TQ Tw1isxVOeMk7B51Ce7OT68LrjUAIkqXITmYh9kM7WfYZp3p3hC5ukg1Hmtya OwS1k00vfIkjs2FM+Qbnceh6ayJCWaWg1sghzWaTN4V7tWY16NKD1kld67d0 qVjENVWQk+us6bNmMq7CshfM9CcGqXN/ZBCZtkYOZRaFNbnnnnum1T1XXHEF tG/FdXM4rwWuI6Y0fD+0iz1oZbKVRmt7uUuxopy+3Mee5zmzRtnzPKP2nNMm JO0K+C+DrAVKlKFg3N87SI3IWqDkWYXfrhb8kMWnzVR4jJ+SqmVCVX08pPWd lakMVqivDTUoMYgwm0wLuecVhFuPDbr33nun1b1zBPiTbx2E63buapEFIJvJ 1KdD22daDBX3mSmys9wXKs6Z18tPymnt+V7ReDvRgTp7j1vj+VuDcGH972cH vWuQcRvHnx2kwv/mQWTMeXZbm7weHTDzkCUdWaZiruR76ZXNgHGmb643c3jD pxkmy/rLcgx/eC2058L2Lffff/+0un9T3P7S24ZFueTPDIJU6984gyIE9kP7 22aCeDJdsVqh2qgrr5nVZL+y2StnsrJ+xry+rk/y9bsGKdmzib8waIz8/h8a JILTB/tN3vVPppTcfucgyLQHkD7ltYvds1j5h2XEWSGhdNXvRYP05h2Djs/E UkBWJtM6DWkYRmVafWQYcTsXjrmC7ftrg4wYEmULj8V6hC4ZcS3kjLg9JcXS Zq3ZKNPBxWB02sHudOBkAXacmnZcMB15JXsoY7Af004X8mI1yoor6VD+Z4fJ favQNFo80H4j9tlsQ3CZdaVPPofqEunS1qJgGIhSRZYsF1mGtHjIDDtCPaTJ +WZlTOw3rMcP+ZUVx4U9O1qrVED29kObHvhOm5KTStfLFdR0w7VLHShbWt5T TIzY+b8wiN0jFe8e9IuDWBD7NtlqfVsk0Zexuwbn2oV+O9t9N9P1SQKMqYig aDNZzpZXtrdTwVjMpniDNyTHVw/iHf0WytYO5oLUtLp5s2P36UddybKLWNwp ksqjsLV6pfVvHCQnM7qyaDNjRi6YKYvT8tU3zfSamczOHBHuQHp60drEZzoL xKrjmwCJyT8ZZPGDaAOdIWm7BmAo9e8eJMT5vkGc1F8eZKhCaqaaoJjgamkl R1Xtvn6mtlxRSy6Gs71oEIAZCcvq2meaAdsKGOiMjajPicyaxqXT6sPD4g2w v/CjrtaKIyUwPVr+g4MS24Kztrc5AkuQVSqJEpXq9aWL49Yd908v/YYubR7y weX45fLZKLnJvxwkjsOQRdZ2IVl0/VODZJFyI8D94KCPDbIIa86r9LReXdkM S3mNVsNaYccWn2qpkcTKDMEz24UTlVDZ4P3AHkOZVh/bFLS/6C4WRoykRVeb NmVv/ojXr8hWdCKDs7vNaI2edBeNQAdSrjcpRSXzDqfpDHBOz3310p+Wo9MI Po4oKQy/Z5A9AnzdL85kJx1r7Xe5upkh1sb7nwa5v2cyerbKWMwuZNO86mlQ 97toQgZogYXIUhmzascTZKE55HGHUE57798P4M1q2Bj3esWA9DLpTLyrNToC wXtNm+liMgC6LHIsCxuY+paZEo90E4CYKkCvMvvqmRJd1+UUKl4AUOhmP4CE zBgF0/93kGRQEGLbIrHiNrUnQWRXAK6d1q/ZFKJaX8ZkfNydsTHAChrCxvcO goMUKTvhMwRbd6lkSjj3Q3uzh2HzGNpTr+dqTGN3cN5aY7iJEvRZSRuGodPW LyP+PYOIc/Yl8WxleEzKjpmZXvatRY7L/Xuao6t52vYW+l1sbO/nPxhkmwAA 2QtgqzsYmu+YYyf+9CAC4zfstIdVRU2UVjxfXFF9Blt/Z5CMHjgEDcDV64AL kkwrgPN4XfPpwN48ZzUvz9zKCrIbWjF1/Dq7oRUc2efD8mlZhCVLAGoLB9kL 6D2SV6QSIb2seZSpVOFqQQ0aJoh7E4VyicZnHFnoj89EtCFB/I2va1j1tkZo rziq6M14ZdVmcd7UcQwyBCxLDI+bZ4Ke2b5nJvbFNZDdD+3NcwKbfPG1dxWz No8/OpPvWnXUAyuJExbMDMkUREIhTPnLeHvWqsCiqKq8bFkR6LkBTt93bfFL 4iA7uMiciFT+V6SHGBPSYW+dOAry/2OQcxDTZ8FHRo7BERubRTNChvFDqjIW IZYPVK+jSzBwdJ1Zce0+aE874F7dtkkWX2u19yinSAUd3drlJtcwsKoZ3f3n QfcNMh02H5cgtpxAeFpyqKyzXEtc7gtzHYhBQhDdY7o4OhGQtTxjwh711q+N ouD0m2Tgdwwy9X4Hv+kQmkg0tV3BQpt/ZRDFJaQKJWAmTtoKTtA6P68Z2lxz F8ibBoIOH+dc8xig3hjsV9hXeTULB2qukrF2qybd2hDkxthtiHSYzwc9PaeX KmjqOm1bCP528/ecsO9tWPN7z+3SCJCI4Ei0kPbSQcYCRuMQm5BKlpaV5hL/ 6iD2TV4BalLnnPbUwbRDNPBAdIJzPk67vkx7d5yYyf3lIsStPFw2sguU9S6y Nu6dPoZEiIaxLiJMlgAuPc/XM7DWKXvaiCfi+nsqTr6HXzZdaCFahSGvx3Jx +3wDK8DDsUque/NMqmFiMKJHlOEkZ6MiVIpjh0nxabwRt8cDhiq6WTznVBlg ASv4yGXbb957HHo2v+c8+DSh4JtmggtZhKHcWL1TfFzlmikhX3Akt9Tb9XA2 BvPKT2kH73gQ1sGwtMwRX48HDD1l4GiM/LE4XFiK5+ps7WBnxhx7Jpt8woVH 4jnUFdwn5RXYfc8gK6aSw/SezBZGu49MCsfhRb+FxcZPxngwspkOO4YRPMU5 jwcMyV/1DeeSSV6U3vHmgt5qKzBtcx5XxJvLXmHxhplgw762vaY97+5r53XP HsFTykIWXz9ILEYGjVl6Me/xPiEQh5sjnhyN+/GAoehEnmm8jtYXuE86bpxk S9QCu97MQC75FlGWtIoMkbVWkNhGuC/fadNTPl8yE1nuqXv6rYIgqoclu5kM woQLDkP8wAhvrnk8YOhYlCcipTOud04EqA1+EWYwYBv5GREgfYWxMAZ+PfVs JcG+mba09n4WmPbMLWzbmivMqWzGRv6zQXgQ3oVbeIaPcbGL/x8wvOV0MfQd bh+ZiT1/YCafYSuZlSe1LQ6v8CODZId/8Bs9Xb//ZZBn7npehcz1HFapfM+e lgS3jqyyqfpkTLDIBuIHX3wJPOPp9DE8dEsZK+zIdmFlGOoPjvAJv4/N5PNQ 2WmX4k7nPAjT/zVIzgcresvWid/IGlmRl4ppehtE7/85OFPPq8OjzZNsJX0n s0J0+aH4h+/x278exIbEK5xgUfnDcQ6pp10npr0Ti/LGLa3B4Bv/c+VvOhOQ q9s3TxQcPH50pmqnS1HTRCGnLrnYoJphOnON0pMeJIk9ecYbsnS8gv0aPGpr jFadekvX/DTdtEONp6euHxPhESCaF+BRRYQiZjVUkTWNZAW0r07KopnF1vSM wee0dY72EqoEqbysXOSDM/0SkA4dT44eCaB8k7kgv3RM3P/gTPPnWZ6e8iAw 2TgZLz2UF+Dwjw1ib3rT1JNnKnZp0y8Z5FPJkBqke9VcRxg87QiGp4M/QHZm /ThmezLZEqNL78gzxJxrVb/Md14Z3YXetHdnm7ZCqyYTqwVS48waqRtnWqLU elSrT1o3gvkhgAcg5Ei8lppHO2VqiofQ0g4Z4NlEvaw7dHoqE0pfPhOU2oNE 00S4kLa/QmRsEYNsiY5lCWZXLYJWqzhJmFlfLJuxOdpdJ7OQIlt2new6Oe3d nZUq2V3ChUC1u4Fqnclu8No9vm2ZFrW1aef2DcDazlqRLjjdN9NAKrhA5RTt rPAtiVJHleBKXnscrV26wSXhEIRVd2WYGCUqyDGA8DtnAo+VFUad+hEuiQdB LIkQ+FAG7EDIywJsG9mF47S3hhJhLSlLH+fyTHCNX1e3zuJ1rAJZilcZUhuV bZqiHORHZ/J5KV7GCELXVX5yL745NEFrzzZQyJZgemFTzzf0PE2Lny3nKio6 L6CziQBWklKKDlM4WzA3tQJGc6d/EElihoZMu/Rk2vsQfqjNNmaJ2qPhtTRS LVaGVc/ztR2iYPremXxe4sXim8fq/JbBfWeOBQzKfr3ApU2cEq4e323TMFx7 6UqvAIRphV3BHHmTkAkeJBISCi6BEasoYhyVqh3HT9OuE9PeT909U5ilmovF 2vBaBw6bJdvPuzNnm2wtsdJO9aqKszYz7ABqOvAR45ht/vSEGTOY0kNYlfAJ JrTPNTJRMOhlluRO4Mq8VVrtUXvXCLZ62QfM2tDaVmFYM4Mw9htZFtSRPUGR eWMn4NUa6u6HN/+TQ5gla4vAa9r7JVhdcGc67NrKqPg1Ba3PLH8HEz00BjYC REUTgleyRO4/NVP2TEJVIiUJcC+zDZNevgkLoQMZa1MujAT2vTSrFwj53MsO e/WNpIC8SrqUkh1tplHntDSiyJWbihe2I7viO75LTJFo40kAWt2xfq6QTx24 nQiz8CFHJWWzW7l7GeQvcZtd5KfFTUGEPXOc7ciHYGi87E8vj6yMz1a1zZbO sWfOca0V6nrBJbx6fL/thnSfTeNabUsha1ytvhRiSkDwket6jLgNlFZ3zrj9 xKNhVqKzlL3smH5ymfvhVr1buEH29OOoT7rahtS207P3bBNbzk8K3q0EtmWe DvcMD30U2AtZXSdwE2IIztTl+TTyRtYs90kC8ZiuGPdngNvQ3NU6JZimvduW 8rTELHxsMNzxZTpw0leOrqYdHU4vum8/3PguugE7ti5fylZKBXq2lB1jz+gn zGAhliAn9qLAR6qg6Mb+848SLKG+jfSOQjYxLrnK/ii4eaADlgJqpgoPxluh +jHiNqz9ismH2y0tvoXZtjxZsd8xOdOBB9LNU7h97r640Un3wG/k5DsS8+nZ D8k12oXcniTfQaLeDTIipD5G3Zgo2ZG1A2EY2FwLRnCKltUwLaNzO9gxNfJZ +YCMSuSrX9A03M8AtnXIsdljdsHxpRoGWWKMFsnjg8vIv/72g437dKSmIMxE ynnajdMuVaacqIUZtYMbkRHCUjVi6Fr1C6La28moLtxlDtq2Jiy8hRX1tDYh c/AZDPHzGeA2ZmF1fJNjXnAs85+5z2yWS8KhGhl8CsNS2ceCG/Vk0oxbDUOd gelePksj7GDSnYcb2SFDTBPcLPsJ+chatcn1S5MHOZLbdrVR2388CNZUVqYj DPFEkDUxISk+W5J8jLitCz6bEPeC27fN2TK8QPgNO9gscZtTgk+L28/NxIwy 82qtamJwgpu6dU99Mf9Sp3Y2c6nMPN0jJ/imkzJXuEkphHTwgpXw1r1MHdzI muJMOwjJ4b8aJKzP5X0GuA0n0+7EMx8Vt1neNoWd8x9kzXXPdPhJJJsKt2lA 8iwiE633Bor23DmK7Hs621JV0T0TRaywxAMSEaz3wCWxo5o8hOGZGjBcMZNM gLk2NmJFJduaCQJjL4rC4rIsk9kBQ5C1al3WULb1KCXIaef4WoMFyMNh7Ico KZt24Tadv4bOdbokdSQujQ9Ws28DFMh6gBecYARp0NJc19A42kqCOEOrN0kC DQSnqq8VAlPFEgaHKSShjtgFicAHh6YFtIJg51rVfpzAamviLpGczv+YwhqF 99WxxRfXtreVNIEAjPKlYJVjOvZQlfMkVQ5FORXZFOYNkyRWnOV8wWkaOAtS WdxRdRUUjIhx46OtNxX6c8yPI1iHUE67RHM6/+PZQgqFdde6z2dVX+f4VyGv NNQ6gLCX/2Xv2p3MCEjjXctg2BHdG7WwpD1+ynj4GP7Jrh52kRTWd1tEfKYt +Ch1wuUNM2F9mUo9DmAdHEy7+JjO/wQJgXAS6zzJAbPQBgtcCCnlXnp8jnsW 1rTxWMhH8RUvbYGlxJRXN7GlfUfhnmqUaSGt4C8ci7UK6j7HOle9qJDf/jiD dZjPaZcRnc7/ZIWYvD14KSuouQuSRxJ73qNasWQOlCBtL5niieSC/QMBVrTd Ri7sGDbPLOkFLYMB5laXsNduP8QgzDXh24PVlHGBfnscwTr0etql3dP5n0o6 Hav/UVaSRpHZwNyR/FgNUM7ndwYApOoy3BOouChBoMCaxzbM9vEavu9t/rE/ TY5Iusv/e2RrG9ZK8NphNLTPxv7KwXpiP1iHfk+7tHw6/2eLL/3OILBnbCr3 oOxAQtlR7kkZVRmLffVdcOQo1pT/KcHY12Y65Hf2l2GfS+oRC6xYFiDVoBVw kd5KpG1bbKs16azk6Wiq3H/ZTL9isF54IpujyRaPlkvfn5iJwueu2NEe2CKt KhOu15ZzIgKBDxhVJ7gpsKqiWlhS6ZcWCfMFWdyXQEp6xOZSdu7MNhmQc1uk FNxtO2MMuDD3MCTsFEhIbCmRewR8gjLawfCoCIHb76IMQZwgrK1OYNYHscF3 y/5tGQ7iqmb7LQ9vHl/a1I0uvGN7o0E1tOoqIQ5tHEGbIId4tTQjNVPqkeq3 rUmp9whZ2YseiqyGy9tBm/drkxrboR7kXqZaLcjj0DIIyPNkBN46lGsl+xBu Y6CZcY6yMP/qnG38soalGKAgwovql22CTi4E/y3w+q7N7Q0hy3r4fuvMD0e7 nbPL6rKel6npcvtq8h3irmn7kd97UEASwNfjiAWGbn+Eo1fFKDORb2h8x0yq dD0HpQQl7pDa+93MmRFmSclEGUDbZlafZlv6St7FKO6lU3THrClb/chM9EJb EIFavCbHUCdd8wrPemUnc4GS7/3Wqo+t36MoGZ6m156sv0N8W75/ZqZGEuLJ OPI75LMwbZgzMkvUvbRXaGGdoU020IC6EAN6coxekQHtauoQYVnIqw2tfB85 9Tv0+VC+jU4Zm7qnQiB94mvpiWIF/RDuMPT8Lf2gK+SWdOHDsTQx2W6DCZwy zL2/L6P9KMvd085mQ84G6gtPqkX+ZLkn6adnCvZtuIOcsPd7TwmI6AyZ6iok SNt6EV/LEz73fLPz4K4+CipBNOgrNTvfG65NEYHNBIDaOLAsLGEm9EtxmChw M9p2F6j3MNqEOsXtSYSeNKj2FPQwSoCXS4/7LZXzk6vjG7S/4M4mqR1OCfei aP3AcvFt6TqhS5hLnJ2D8sni9CsecqnmyRLwekSbrPfKFfILcFkKkE0QGWRf 29DWHw5gbxXF/G7IFbKW+khgekmnwMY9AhoT4z6eU9Bjs3NZVJvTq+FXkG7T VCF5MWSA77fOvgF7syJ14Z1phavZpeUqZ4Bvr3ZuA962s1ZShH+85vJhGL5Z rpb16FGoHp/ukcS2pYk3xAmt+C9Fpi14RLptPyU1VI3nNuliJX0T+z73CuaW HfKAH5qpMG/5qAI0q9Ett7JBdL9V+s1TejPaJ5Y2aPkcYOK9FPFtzwnxFhsg 30OhpYiJuqM4QuwA5R7F60UlPazOmPCqAm6IGHnyymipQ/GEUBPzhKLPeWbX GX8lP/4ECm3yxKvAXL0K4s3W0pBCvOelQx1OxRvLvQyfZn3/9vmek2gfObG8 01VLg1LUs1zx315xrdxebcFnyCdjEPFd7Ve8IbVhcplm33sfIPR9Fzcwq7Sd xaj0XR/NPJ2aVyHnFOvQOkYys8ttsDhmgcTYbUrLUmgbklBlZe5YbEkNrXaF LFel4bGJMzZR3ZETzcE2iqF2uiiyFORIrMoJFVtwZiIydU4OioPjoOTRYgCc s6e9QXN7oUSb2j9VVjn0yeKeFuuMFV/aEVvnrOLHscqRfrY3qi73Ii3jZvRw FJeb49y1DCeWSx2/XBTbqi8PZENpuEqGmJkXg57Plrx4M9oIxZYDRWLGpq+W jgphtDu6n3YNYjq0Rlb/UCzGda++6cIypk1Ts59zgWizc2nauz07uh2dJZNL FM880ZbMbXmcJXcHgtMzf9kgBiRnJVztnU7EkEgKFXxXDrKObQcmhebSOSyp 2rwl6cMpKtOs31mB53r03nqNrnjKeDGONU6POcbyzlrUnvCwMLWkYGC5C9Bp 75ZH2h0XjrM1Xkjicmtr0pgVyAKcjiQ6Kv7oWWbUW3ZJYa+OkSeQRtUHuYGH xsRE/FaFmqWdJ2H6E9qdqj4/8RPFSsbXUk9v0ZgfCFnHQFsB57omMx04fvMp ms5Y/793c7tdl05+uYXu4WDWUdX8hDIRPl0wqRpn61oqyxj2BoneLwRgEsmZ WwkXvZPIKmY4aYKNC5j6mpO/ky7Gb6TVGPEAyAqSKVobVEtJ4xuwA4ZpFxjT 3geW+4GXSCaeD0dxuXl/Wywzx6eDos9QZNAk9VyLYFNI1PP0vYw9VBlMaHI3 bRXGhT4Ly3Izw1dPuzz2dOjn03s2oFpj79nxW8ZwKaqOoej9JLsAmfaOLsos D9uFHpIPQ/EDj/SOg6WbP10Ue8qOEkJEgaq3i3Da/S1JxYLeDGqXAISVZSi6 3Rc4gZrwibUtMx5xwLQrGpgO/UKhEMTwce1M+HGucom2IIjv1h8g5E0NuwCZ 9m5YPpS9vfEaLVE89H5l9mtm6vml6smuDjmjKO9f7pl58OR24+c96NrCZSUL IbdSiQCxP6zRc9n9ZUNbaNXHPatk/ZHvUTil0QJHxVVtqVu3Plhdu7doQcPv 6ubGIE0wPoW0Crvc0COVQapbH9rUrdfbyej0wOZoL+NfPt9VAdjl24XtsGmv yilsnr9OJKUY8LERonczV8Revuly+YdWelvlNFN/kbb33liu6XUsbbtmHbmf thn7XVnJ1nVY8t1wlapUK1nisl2vGBJzcFMhWm8p9nacAc967wYSTTqCidD2 +Nsy60l8WmKYIZt217vxnvfA7Ok+QR90xbiDgjgYvtyC+QJTLzXuz9mpi4KF 8qlr2hXcn63jeVU0hDcW+nhoimmLj21klqt7wTIzqWInb1cRZAKN5VHy3Orx 06Gb17t01lvqNq9bOnS9e0XsprrH4ls1a8NGeXzis9xWNw7Tri/T8+9vJ3o7 JSwxZbaJUX8fg1HqzwXbIdGfmu5FuX7rjxkRDWsgsmFqQo16PRRVsyOYK4CX zBo+nLF7evsXbKhg+VW4LGu4QwwOkoXVB9fqtXmjzKHr9oOH9IFcULSsPlae GYhNu3CbjnyULTU1bRYRWEmgej8PzfC9v9pKbHqbDIhYo/5uKpGTuhKB9uMs p6bVNWG/zSXfP5OqouIa0cJTi6EsRs9RbS8o9NwVa/MkTK+EEaubNu+BOXTt fuqlrd4602pefmTe7THtrjcJn7UuzOm/fUr6tUGmamiLO1SgwklvmIQRcWkZ Ab+iCuKi3fnp32lTcHzyQy3X6QOG7ZBTHK8k0ItNirsWluZh+Mxvo5wOYnol cFjduHnX+6Fr97PO2nDUh3mrQLmIWOYHKZ734bZOFH+6XntkySqtsV80E5Oh qM+rqUSTo97Rylw53zNq+jc3pZdklScQl5hTsavr4SO7olp4gUHqlA/fxmaO A4afGrQ6ugZo867wQ9ft59WLHXqS8NGxef76ARjyzJExRa7Dh9OKCMoxPAl+ FXUVvyyHiibJE/NNdmAjHeeJxEX4NFctyjhqn+z4nQkiL8ydQrHfzIux9G4k fGyZmw/2BlOwjEsOum51wxqjDTwHj4GEKhHDwsgeFu11e8u6ZfvJ59DxzPV2 8Wfdl1NbLq8u96s2e5rWHWvCOiiGsSA4YzEgQkssi/LLrjMMktijDaTI7LGS vTev3O0RpOIk59OBG953iqYz/L9639pXzYp0rJOGSFDa0REipYSPVMXtyYMN JM+4b7m+3xJK9bsMUzWU7conARKaFKJwEvonoCBVge1JGe0ZjzGCpLfNPZIg DHYOPToU64hvs8P20A2aSmcIBzjK1lDZyHZ5tdwCCLtrKM65L3tcblHyXvjT KhmbI/QJrqLIisPF7fpzLz1RmCYZ7Ln7298JziTuUaC4oQzN9D8Jk9OBtduf aTrD/yuueHX9jMvJSHgbm5RnWY5Zikml51O4fPZ9LbcUMbfzpK0Qc/izs45+ nnbSJC2XwXoGtPTOpS2FBWMbWcBYGp9bWLiWk5BgaSjAQVowHTjpXQZNZ/h/ 9WOXXHLJ6pI5grmVjuZ52q6UAqFlJWB7wWnekjAj8qz7UqbsSfajRyWXBcLt x/ZaGKquVgnJNZms5WJNsf1SWT4wU3DMUFw7e5GDZn06cM1Vp2g6w/+rq4aJ Xv3gHPMe70V1Tm3DoskS0mW5Y/n2sVOQPPO+pcVdBH0n166qOpfkV1cOlq5t RbwtS9VpKzUkCbPJPKkcCzN6Eo55Z9p0aK0mB378vadoOsP/q/cOq7W6dH6l xfUFbjBJVFIgtHxzWgFvYjKv7M94PPG+5a6eVs7aX5E9ThzCYfy849z0hJNb i7ay3k1h8ODxJbcLXUgArmlzrnP9DoQ5/DqIu+nA1VeeoukM/6+uXCvO5rmP Q1MngZL+LC2uyVgCkt4k90sBWW686Xmanq/IKi/3r81/2/5k/r/cRBX7sY62 oohtnbhmG6q2LULi0KPjsbaqmwh/9f8Ab2diXQ==\ \>"], "Graphics", ImageSize->{90, 110}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, CellTags->"Mathematician: Joseph Henry Maclagen Wedderburn"], Cell[TextData[{ "Born:", StyleBox[" 2 Feb 1882 in Forfar, Angus, Scotland \n", FontColor->RGBColor[0, 0.500008, 0]], "Died:", StyleBox[" 9 Oct 1948 in Princeton, New Jersey, USA", FontColor->RGBColor[0.500008, 0, 0.500008]] }], "Text"], Cell[TextData[{ StyleBox["Joseph Wedderburn", FontWeight->"Bold"], " made important advances in the theory of rings, algebras and matrix \ theory." }], "Text"], Cell[TextData[{ "He entered Edinburgh University in 1898, obtaining a degree in mathematics \ in 1903. Wedderburn then pursued postgraduate studies in Germany spending \ 1903-1904 at the University of Leipzig and then a semester at the University \ of Berlin. \nHe was awarded a Carnegie Scholarship to study in the USA and he \ spent 1904-1905 at the University of Chicago where he did joint work with \ Veblen. Returning to Scotland he worked for 4 years at Edinburgh as assistant \ to George Chrystal. From 1906 to 1908 he served as editor of the Proceedings \ of the Edinburgh Mathematical Society. \n\nIn 1909 Wedderburn was appointed a \ Preceptor in Mathematics at Princeton where he joined Veblen. However World \ War I saw Wedderburn volunteer for the British Army and he served, partly in \ France, until the end of the war. \n\nOn his return to Princeton he was soon \ promoted obtaining permanent tenure in 1921. He served as Editor of the \ Annals of Mathematics from 1912 to 1928. From about the end of this period \ Wedderburn seemed to suffer a mild nervous breakdown and became an \ increasingly solitary figure. By 1945 the Priceton gave him early retirement \ in his own best interests. \n\nWedderburn's best mathematical work was done \ before his war service. In 1905 he showed that a non-commutatiove finite \ field could not exist. This had as a corollary the complete structure of all \ finite projective geometries, showing that in all these geometries Pascal's \ theorem is a consequence of Desargues' theorem. \n\nIn 1907 he published what \ is perhaps his most famous paper on the classification of semisimple \ algebras. He showed that every semisimple algebra is a direct sum of simple \ algebras and that a simple algebra was a matrix algebra over a division ring. \ \n\nIn total he published around 40 works mostly on rings and matrices. His \ most famous book is ", StyleBox["Lectures on Matrices", FontSlant->"Italic"], " (1934)." }], "Text"], Cell[TextData[{ "The source of this information is the following webpage:\n", ButtonBox["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/\ Wedderburn.html", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www-history.mcs.st-and.ac.uk/history/Mathematicians/\ Wedderburn.html"], None}] }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Appendix D\tNew Functions", "Chapter", CellTags->"Chap New Functions"], Cell[CellGroupData[{ Cell["AddTwoLetters", "Subsubsection"], Cell[TextData[{ "AddTwoLetters adds two letters modulo 26, where ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"a", "=", "0"}], ",", " ", RowBox[{"b", "=", "1"}], ",", "\[Ellipsis]", ",", RowBox[{"z", "=", "25"}]}], TraditionalForm]]], "." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"AddTwoLetters", "[", 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", CellChangeTimes->{{3.4233913005900044`*^9, 3.4233913018712626`*^9}}], Cell["Example:", "Text"], Cell[BoxData[ RowBox[{"AddTwoLetters", "[", RowBox[{"\"\\"", ",", "\"\\""}], "]"}]], "Input", GeneratedCell->True], Cell[BoxData["\<\"d\"\>"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["CaesarCipher", "Subsubsection"], Cell[TextData[{ "Applies the ", ButtonBox["Caesar cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Caesar Cipher"], " with a given key to a given plaintext of small letters." }], "Text", GeneratedCell->True], 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], Cell["Example:", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"plaintext", "=", "\"\\""}], ";"}], "\n", RowBox[{ RowBox[{"key", "=", "24"}], ";"}], "\n", RowBox[{"CaesarCipher", "[", RowBox[{"plaintext", ",", "key"}], "]"}]}], "Input", GeneratedCell->True, CellTags->"DefClass Caesar"], Cell[BoxData["\<\"rwncfcpcwmspnjyglrcvrglqkyjjjcrrcpq\"\>"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["ColumnSwap", "Subsubsection"], Cell[TextData[{ "ColumnSwap interchanges columns ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " in matrix ", Cell[BoxData[ FormBox["B", TraditionalForm]]], "." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"ColumnSwap", "[", RowBox[{"B_", ",", "i_", ",", "j_"}], "]"}], ":=", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"U", ",", "V"}], "}"}], ",", RowBox[{ RowBox[{"U", "=", RowBox[{"Transpose", "[", "B", "]"}]}], ";", RowBox[{"V", "=", RowBox[{"U", "[", RowBox[{"[", "i", "]"}], "]"}]}], ";", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "i", "]"}], "]"}], "=", RowBox[{"U", "[", RowBox[{"[", "j", "]"}], "]"}]}], ";", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "j", "]"}], "]"}], "=", "V"}], ";", RowBox[{"Transpose", "[", "U", "]"}]}]}], "]"}]}]], "Input"], Cell["Example:", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", RowBox[{ "a", ",", "b", ",", "c", ",", "d", ",", "e", ",", "f", ",", "g", ",", "h", ",", "i", ",", "j", ",", "k", ",", "l"}], "]"}], ";", RowBox[{"A", "=", RowBox[{"(", GridBox[{ {"a", "b", "c", "d"}, {"e", "f", "g", "h"}, {"i", "j", "k", "l"} }], ")"}]}], ";", RowBox[{"AA", "=", RowBox[{"ColumnSwap", "[", RowBox[{"A", ",", "1", ",", "4"}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "AA", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"d", "b", "c", "a"}, {"h", "f", "g", "e"}, {"l", "j", "k", "i"} }], ")"}], MatrixForm[#]& ]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["ContinuedFractionForm", "Subsubsection", CellChangeTimes->{3.423369496942769*^9}], Cell[TextData[{ "ContinuedFractionForm maps a sequence ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["a", "o"], ",", " ", SubscriptBox["a", "1"], ",", " ", "\[Ellipsis]", ",", " ", SubscriptBox["a", "m"]}], "}"}], TraditionalForm]]], " of positive integers to the corresponding ", ButtonBox["continued fraction", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Cont Frac"], ":" }], "Text", CellChangeTimes->{{3.4233695572388725`*^9, 3.4233696630543785`*^9}, 3.42336981152978*^9}], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "0"], "+", FractionBox["1", RowBox[{ SubscriptBox["a", "1"], "+", FractionBox["1", RowBox[{ SubscriptBox["a", "2"], "+", FractionBox["1", RowBox[{"\[Ellipsis]", " ", "+", FractionBox["\[Ellipsis]", RowBox[{ SubscriptBox["a", RowBox[{"m", "-", "1"}]], "+", FractionBox["1", SubscriptBox["a", "m"]]}]]}]]}]]}]]}], TraditionalForm]]] }], "Text", CellChangeTimes->{{3.4233697595587015`*^9, 3.4233697696529036`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"ContinuedFractionForm", "[", "c_List", "]"}], ":=", RowBox[{"DisplayForm", "[", RowBox[{"StyleBox", "[", RowBox[{ RowBox[{"Fold", "[", RowBox[{ RowBox[{ RowBox[{"RowBox", "[", RowBox[{"{", RowBox[{ RowBox[{"ToString", "[", "#2", "]"}], ",", "\"\<+\>\"", ",", RowBox[{"FractionBox", "[", RowBox[{"\"\<1\>\"", ",", "#1"}], "]"}]}], "}"}], "]"}], "&"}], ",", RowBox[{"Last", "[", "c", "]"}], ",", RowBox[{"Reverse", "[", RowBox[{"Most", "[", "c", "]"}], "]"}]}], "]"}], ",", RowBox[{"ScriptSizeMultipliers", "\[Rule]", "1"}]}], "]"}], "]"}]}]], "Input", InitializationCell->True, CellChangeTimes->{{3.4210585566887493`*^9, 3.421058598581251*^9}, { 3.4210586651154823`*^9, 3.4210586711001253`*^9}, {3.4210587022890224`*^9, 3.4210587059141846`*^9}, {3.421058739025043*^9, 3.4210587521818824`*^9}, { 3.421058796902151*^9, 3.421058817074542*^9}, {3.4210591443614473`*^9, 3.4210591703305297`*^9}, {3.421399418627346*^9, 3.421399419142971*^9}}, CellTags->"CFF"], Cell["Example:", "Text", CellChangeTimes->{{3.4233698267648373`*^9, 3.423369829030564*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContinuedFractionForm", "[", RowBox[{"{", RowBox[{"5", ",", "6", ",", "7", ",", "8", ",", "9"}], "}"}], "]"}]], "Input", InitializationCell->True, CellChangeTimes->{{3.4210585566887493`*^9, 3.421058598581251*^9}, { 3.4210586651154823`*^9, 3.4210586711001253`*^9}, {3.4210587022890224`*^9, 3.4210587059141846`*^9}, {3.421058739025043*^9, 3.4210587521818824`*^9}, { 3.421058796902151*^9, 3.421058817074542*^9}, {3.4210591443614473`*^9, 3.4210591703305297`*^9}, {3.421399418627346*^9, 3.421399419142971*^9}, { 3.4233695270048847`*^9, 3.423369535473526*^9}, {3.423369837530945*^9, 3.423369837812207*^9}}, CellTags->"CFF"], Cell[BoxData[ TagBox[ StyleBox[ RowBox[{"5", "+", FractionBox["1", RowBox[{"6", "+", FractionBox["1", RowBox[{"7", "+", FractionBox["1", RowBox[{"8", "+", FractionBox["1", "9"]}]]}]]}]]}], ScriptSizeMultipliers->1], DisplayForm]], "Output", CellChangeTimes->{3.4233695367703843`*^9, 3.4233698385309896`*^9}, CellTags->"CFF"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["CoPrimeQ", "Subsubsection", CellTags->"NewFunction CoPrimeQ"], Cell[TextData[{ "CoPrime test if two integers are coprime, i.e. have ", ButtonBox["gcd", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Alter GCD/LCM"], " 1." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"CoPrimeQ", "[", RowBox[{"n_Integer", ",", " ", "m_Integer"}], "]"}], " ", ":=", " ", RowBox[{ RowBox[{"GCD", "[", RowBox[{"n", ",", " ", "m"}], "]"}], " ", "==", " ", "1"}]}]], "Input", CellTags->"InputAppA CoPrimeQ"], Cell["Example:", "Text"], Cell[BoxData[{ RowBox[{"CoPrimeQ", "[", RowBox[{"35", ",", "91"}], "]"}], "\n", RowBox[{"CoPrimeQ", "[", RowBox[{"36", ",", "91"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["False"], "Output"], Cell[BoxData["True"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["CoPrimes", "Subsubsection"], Cell[TextData[{ "CoPrimes generates a list of all integers in between 1 and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " that are coprime with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". In other words, it generates a ", ButtonBox["reduced residue system", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Reduced RS"], " modulo ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ".\nCoprimes makes use of the function ", ButtonBox["CoPrimeQ", BaseStyle->"Hyperlink", ButtonData:>"InputAppA CoPrimeQ"], " defined earlier." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"CoPrimes", "[", RowBox[{"n_Integer", "?", "Positive"}], "]"}], " ", ":=", " ", RowBox[{"Select", "[", " ", RowBox[{ RowBox[{"Range", "[", "n", "]"}], ",", " ", RowBox[{ RowBox[{"CoPrimeQ", "[", RowBox[{"n", ",", " ", "#"}], "]"}], "&"}]}], " ", "]"}]}]], "Input", CellChangeTimes->{3.4234637547682357`*^9}], Cell["Example:", "Text"], Cell[BoxData[ RowBox[{"CoPrimes", "[", "15", "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "2", ",", "4", ",", "7", ",", "8", ",", "11", ",", "13", ",", "14"}], "}"}]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["DivisorProduct", "Subsubsection"], Cell[TextData[{ "DivisorProduct calculates ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Product]", RowBox[{"d", "|", "n"}]], RowBox[{"f", "[", "d", "]"}]}], TraditionalForm]]], "." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"DivisorProduct", "[", RowBox[{"f_", ",", "n_"}], "]"}], ":=", " ", RowBox[{"Times", " ", "@@", " ", RowBox[{"(", RowBox[{"f", " ", "/@", " ", RowBox[{"Divisors", "[", "n", "]"}]}], ")"}]}]}]], "Input"], Cell["Example:", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"f", "[", "n_", "]"}], ":=", "n"}], "\n", RowBox[{"DivisorProduct", "[", RowBox[{"f", ",", " ", "25"}], "]"}]}], "Input", GeneratedCell->True, CellTags->"FunctAppA Divisor sum"], Cell[BoxData["125"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["DivisorSum", "Subsubsection", CellTags->"NewFunctions DivisorSum"], Cell[TextData[{ "DivisorSum calculates ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"d", "|", "n"}]], RowBox[{"f", "[", "d", "]"}]}], TraditionalForm]]], "." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"DivisorSum", "[", RowBox[{"f_", ",", "n_"}], "]"}], ":=", " ", RowBox[{"Plus", " ", "@@", " ", RowBox[{"(", RowBox[{"f", " ", "/@", " ", RowBox[{"Divisors", "[", "n", "]"}]}], ")"}]}]}]], "Input"], Cell["Example:", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"f", "[", "n_", "]"}], ":=", "n"}], "\n", RowBox[{"DivisorSum", "[", RowBox[{"f", ",", " ", "15"}], "]"}]}], "Input", GeneratedCell->True, CellTags->"FunctAppA Divisor sum"], Cell[BoxData["24"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["EllipticAdd", "Subsubsection"], Cell[TextData[{ "EllipticAdd evaluates the sum of the points ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Q", TraditionalForm]]], " on an elliptic curve over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], " given by the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["x", "3"], "+", RowBox[{"a", ".", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", ".", "x"}], "+", "c"}]}], TraditionalForm]]], ". Here ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is prime, ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "2"}], TraditionalForm]]], "." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"EllipticAdd", "[", RowBox[{ "p_", ",", "a_", ",", "b_", ",", "c_", ",", "P_List", ",", "Q_List"}], "]"}], ":=", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"lam", ",", "x3", ",", "y3", ",", "P3"}], "}"}], ",", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{"P", "==", RowBox[{"{", "O", "}"}]}], ",", RowBox[{"R", "=", "Q"}], ",", RowBox[{"If", "[", RowBox[{ RowBox[{"Q", "==", RowBox[{"{", "O", "}"}]}], ",", RowBox[{"R", "=", "P"}], ",", "\t", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "!=", RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}]}], ",", "\t\t\t\t\t\t\t", RowBox[{"{", RowBox[{ RowBox[{"lam", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Q", "[", RowBox[{"[", "2", "]"}], "]"}], "-", RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}]}], ")"}], "*", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{ RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}], "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}]}], ",", RowBox[{"p", "-", "2"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}]}], ";", "\t\t\t\t\t\t\t", RowBox[{"x3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["lam", "2"], "-", "a", "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "-", RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}]}], ",", "p"}], "]"}]}], ";", "\t\t\t\t\t\t\t", RowBox[{"y3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"-", RowBox[{"(", RowBox[{ RowBox[{"lam", RowBox[{"(", RowBox[{"x3", "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}]}], ")"}]}], "+", RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}]}], ")"}]}], ",", "p"}], "]"}]}], ";", "\t\t\t\t\t\t\t", RowBox[{"R", "=", RowBox[{"{", RowBox[{"x3", ",", "y3"}], "}"}]}]}], "}"}], ",", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"P", "==", "Q"}], ")"}], "\[And]", RowBox[{"(", RowBox[{"P", "!=", RowBox[{"{", "O", "}"}]}], ")"}]}], ",", "\t\t\t\t\t\t\t", RowBox[{"{", RowBox[{ RowBox[{"lam", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"3", "*", SuperscriptBox[ RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "2"]}], "+", RowBox[{"2", "a", "*", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}]}], "+", "b"}], ")"}], "*", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"2", RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}]}], ",", RowBox[{"p", "-", "2"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}]}], ";", "\t\t\t\t\t\t\t", RowBox[{"x3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ SuperscriptBox["lam", "2"], "-", "a", "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "-", RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}]}], ",", "p"}], "]"}]}], ";", "\t\t\t\t\t\t\t", RowBox[{"y3", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"-", RowBox[{"(", RowBox[{ RowBox[{"lam", RowBox[{"(", RowBox[{"x3", "-", RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}]}], ")"}]}], "+", RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}]}], ")"}]}], ",", "p"}], "]"}]}], ";", "\t\t\t\t\t\t\t", RowBox[{"R", "=", RowBox[{"{", RowBox[{"x3", ",", "y3"}], "}"}]}]}], "}"}], ",", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"P", "[", RowBox[{"[", "1", "]"}], "]"}], "==", RowBox[{"Q", "[", RowBox[{"[", "1", "]"}], "]"}]}], ")"}], "\[And]", RowBox[{"(", RowBox[{ RowBox[{"P", "[", RowBox[{"[", "2", "]"}], "]"}], "!=", RowBox[{"Q", "[", RowBox[{"[", "2", "]"}], "]"}]}], ")"}]}], ",", RowBox[{"R", "=", RowBox[{"{", "O", "}"}]}]}], "]"}]}], "]"}]}], "]"}]}], "]"}]}], "]"}], ";", "R"}]}], "]"}]}]], "Input", GeneratedCell->True, CellTags->"InputEllip addition"], Cell["Example:", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "11"}], ";", RowBox[{"a", "=", "0"}], ";", RowBox[{"b", "=", "6"}], ";", RowBox[{"c", "=", "3"}], ";"}], "\n", RowBox[{"EllipticAdd", "[", RowBox[{"p", ",", "a", ",", "b", ",", "c", ",", RowBox[{"{", RowBox[{"4", ",", "6"}], "}"}], ",", RowBox[{"{", RowBox[{"9", ",", "4"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"3", ",", "9"}], "}"}]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["Entropy", "Subsubsection"], Cell[TextData[{ "Computes the entropy ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"-", RowBox[{"p", ".", SubscriptBox["log", "2"]}]}], "p"}], "-", RowBox[{ RowBox[{"(", RowBox[{"1", "-", "p"}], ")"}], ".", RowBox[{ SubscriptBox["log", "2"], "(", RowBox[{"1", "-", "p"}], ")"}]}]}], TraditionalForm]]], " function." }], "Text"], Cell[BoxData[ RowBox[{ 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"], Cell["Example:", "Text"], Cell[BoxData[ RowBox[{"Entropy", "[", RowBox[{"1", "/", "2"}], "]"}]], "Input"], Cell[BoxData["1"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["KnapsackForSuperIncreasingSequence", "Subsubsection"], Cell[TextData[{ "KnapsackForSuperIncreasingSequence finds the ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], "-solution of the knapsack problem ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["x", "i"], ".", SubscriptBox["a", "i"]}]}], "=", "S"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["a", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " is a ", ButtonBox["superincreasing", BaseStyle->"Hyperlink", ButtonData:>"DefKnap superincreasing"], " sequence. " }], "Text", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"KnapsackForSuperIncreasingSequence", "[", RowBox[{"a_List", ",", "S_"}], "]"}], ":=", "\t", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"n", ",", "x", ",", "X", ",", "T"}], "}"}], ",", "\t\t", RowBox[{ RowBox[{"n", "=", RowBox[{"Length", "[", "a", "]"}]}], ";", RowBox[{"X", "=", RowBox[{"{", "}"}]}], ";", RowBox[{"T", "=", "S"}], ";", "\t\t", RowBox[{"While", "[", RowBox[{ RowBox[{"n", "\[GreaterEqual]", "1"}], ",", "\t\t\t\t", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{"T", "\[GreaterEqual]", RowBox[{"a", "[", RowBox[{"[", "n", "]"}], "]"}]}], ",", RowBox[{"x", "=", "1"}], ",", RowBox[{"x", "=", "0"}]}], "]"}], ";", "\t\t\t\t", RowBox[{"T", "=", RowBox[{"T", "-", RowBox[{"x", "*", RowBox[{"a", "[", RowBox[{"[", "n", "]"}], "]"}]}]}]}], ";", "\t\t\t\t", RowBox[{"X", "=", RowBox[{"Join", "[", RowBox[{ RowBox[{"{", "x", "}"}], ",", "X"}], "]"}]}], ";", RowBox[{"n", "=", RowBox[{"n", "-", "1"}]}]}]}], "]"}], ";", "\t\t", RowBox[{"If", "[", RowBox[{ RowBox[{"T", "!=", "0"}], ",", RowBox[{"Print", "[", "\"\\"", "]"}], ",", "X"}], "]"}]}]}], "]"}]}]], "Input", GeneratedCell->True, CellTags->"NewFunction Knapsack"], Cell["Example:", "Text", CellTags->"NewFunction Knapsack"], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", RowBox[{"{", RowBox[{ "22", ",", "89", ",", "345", ",", "987", ",", "4567", ",", "45678"}], "}"}]}], ";", RowBox[{"S", "=", "5665"}], ";"}], "\n", RowBox[{"X", "=", RowBox[{"KnapsackForSuperIncreasingSequence", "[", RowBox[{"a", ",", "S"}], "]"}]}]}], "Input", GeneratedCell->True, CellTags->"NewFunction Knapsack"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0"}], "}"}]], "Output", CellTags->"NewFunction Knapsack"] }, Closed]], Cell[CellGroupData[{ Cell["ListQuadRes", "Subsubsection"], Cell[TextData[{ "ListQuadRes gives a listing of all the ", ButtonBox["quadratic residues", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"ListQuadRes", "[", "p_", "]"}], ":=", " ", RowBox[{"Select", "[", RowBox[{ RowBox[{"Range", "[", "p", "]"}], ",", RowBox[{ RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"#1", ",", "p"}], "]"}], "==", "1"}], "&"}]}], "]"}]}]], "Input"], Cell["Example:", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"p", "=", "17"}], ";"}], "\n", " "}], "\n", RowBox[{"ListQuadRes", "[", "p", "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "2", ",", "4", ",", "8", ",", "9", ",", "13", ",", "15", ",", "16"}], "}"}]], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["MultiEntropy", "Subsubsection", CellTags->"NewFunction MultiEntropy"], Cell[TextData[{ "MultiEntropy evaluates ", Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], SubscriptBox["log", "2"], SubscriptBox["p", "i"]}]}]}], TraditionalForm]]], " for a list ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "n"]}], "}"}], TraditionalForm]]], "." }], "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"], Cell["Example:", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", RowBox[{"{", RowBox[{ RowBox[{"1", "/", "4"}], ",", RowBox[{"1", "/", "4"}], ",", RowBox[{"1", "/", "4"}], ",", RowBox[{"1", "/", "4"}]}], "}"}]}], ";"}], "\n", RowBox[{"MultiEntropy", "[", "p", "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["2"], "Output"] }, Closed]], Cell[CellGroupData[{ Cell["RowSwap", "Subsubsection"], Cell[TextData[{ "RowSwaps interchanges rows ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " in matrix ", Cell[BoxData[ FormBox["B", TraditionalForm]]], "." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"RowSwap", "[", RowBox[{"B_", ",", "i_", ",", "j_"}], "]"}], ":=", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"U", ",", "V"}], "}"}], ",", RowBox[{ RowBox[{"U", "=", "B"}], ";", RowBox[{"V", "=", RowBox[{"U", "[", RowBox[{"[", "i", "]"}], "]"}]}], ";", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "i", "]"}], "]"}], "=", RowBox[{"U", "[", RowBox[{"[", "j", "]"}], "]"}]}], ";", RowBox[{ RowBox[{"U", "[", RowBox[{"[", "j", "]"}], "]"}], "=", "V"}], ";", "U"}]}], "]"}]}]], "Input"], Cell["Example:", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", RowBox[{ "a", ",", "b", ",", "c", ",", "d", ",", "e", ",", "f", ",", "g", ",", "h", ",", "i", ",", "j", ",", "k", ",", "l"}], "]"}], ";", RowBox[{"A", "=", RowBox[{"(", GridBox[{ {"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}, {"j", "k", "l"} }], ")"}]}], ";", RowBox[{"AA", "=", RowBox[{"RowSwap", "[", RowBox[{"A", ",", "1", ",", "4"}], "]"}]}], ";", RowBox[{"MatrixForm", "[", "AA", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ TagBox[ RowBox[{"(", GridBox[{ {"j", "k", "l"}, {"d", "e", "f"}, {"g", "h", "i"}, {"a", "b", "c"} }], ")"}], MatrixForm[#]& ]], "Output", PageBreakBelow->Automatic] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["References", "Chapter", CellTags->"Chap References"], Cell[TextData[{ "[Adle79] ", StyleBox["Adleman, L.M.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A subexponential algorithm for the discrete logarithm problem with \ applications to cryptography", FontSlant->"Italic"], ", in Proc. IEEE 20-th Annual Symp. on Found. of Comp. Science, pp. 55-60, \ 1979." }], "Text", CellTags->"RefAdle79"], Cell[TextData[{ "[Adle83] ", StyleBox["Adleman, L.M.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["On breaking the iterated Merkle-Hellman public key cryptosystem", FontSlant->"Italic"], ", in Proc. 15-th Annual ACM Symp. Theory of Computing, pp. 402-412, 1983." }], "Text", CellTags->"RefAdle83"], Cell[TextData[{ "[Adle94] ", StyleBox["Adleman, L.M.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The function field sieve", FontSlant->"Italic"], ", Lecture Notes in Computer Science 877, Springer Verlag, Berlin, etc., pp. \ 108-121, 1995." }], "Text", CellTags->"RefAdle94"], Cell[TextData[{ "[AdDM93] ", StyleBox["Adleman, L.M. and J. DeMarrais", FontColor->RGBColor[0, 0.500008, 0]], ", A subexponential algorithm for discrete logarithms over all finite \ fields, Mathematics of Computation, 61, pp. 1-15, 1993." }], "Text", CellTags->"RefAdlD93"], Cell[TextData[{ "[AdPR83] ", StyleBox["Adleman, L.M., C. Pomerance, and R. Rumely", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["On distinguishing prime numbers from composite numbers", FontSlant->"Italic"], ", Annals of Math. 17, pp. 173-206, 1983." }], "Text", CellTags->"RefAdPR83"], Cell[TextData[{ "[Aign79] ", StyleBox["Aigner, M", FontColor->RGBColor[0, 0.500008, 0]], "., ", StyleBox["Combinatorial Theory", FontSlant->"Italic"], ", Springer Verlag, Berlin, etc., 1979." }], "Text", CellTags->"RefAig79"], Cell[TextData[{ "[BaKT99] ", StyleBox["Barg, A., E. Korzhik and H.C.A. van Tilborg", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["On the complexity of minimum distance decoding of long linear \ codes", FontSlant->"Italic"], ", to appear in the IEEE Transactions on Information Theory." }], "Text", CellTags->"RefBaKvT99"], Cell[TextData[{ "[Baue97] ", StyleBox["Bauer, F.L.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Decrypted Secrets; Methods and Maxims of Cryptology", FontSlant->"Italic"], ", Springer Verlag, Berlin, etc., 1997. " }], "Text", CellTags->"RefBau97"], Cell[TextData[{ "[BekP82] ", StyleBox["Beker, H. and F. Piper", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Cipher Systems, the Protection of Communications", FontSlant->"Italic"], ", Northwood Books, London, 1982." }], "Text", CellTags->"RefBek82"], Cell[TextData[{ "[Berl68] ", StyleBox["Berlekamp, E.R", FontColor->RGBColor[0, 0.500008, 0]], "., ", StyleBox["Algebraic Coding Theory", FontSlant->"Italic"], ", McGraw-Hill Book Company, New York, etc., 1968" }], "Text", CellTags->"RefBer68"], Cell[TextData[{ "[BeMT78] ", StyleBox["Berlekamp, E.R., R.J. McEliece and H.C.A. van Tilborg", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["On the inherent intractability of certain coding problems", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-24, pp. 384-386, May 1978." }], "Text", CellTags->"RefBerMT78"], Cell[TextData[{ "[BeJL86] ", StyleBox["Beth, T., D. Jungnickel, and H. Lenz", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Design Theory", FontSlant->"Italic"], ", Cambridge University Press, Cambridge, etc., 1986." }], "Text", CellTags->"RefBeJL86"], Cell[TextData[{ "[BihS93], ", StyleBox["Biham E. and A. Shamir", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Differential Cryptanalysis of the Data Encryption Standard", FontSlant->"Italic"], ", Spinger Verlag, New York etc., 1993. " }], "Text", CellTags->"RefBihS93"], Cell[TextData[{ "[BoDML97] ", StyleBox["Boneh, D., R.A. DeMillo, and R.J. Lipton", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["On the importance of checking cryptographic protocols for faults", FontSlant->"Italic"], ", Advances in Cryptology: Proc. of Eurocrypt'97, W. Fumy, Ed., Lecture \ Notes in Computer Science 1233, Springer Verlag, Berlin, etc., pp. 37-51, \ 1997." }], "Text", CellTags->"RefBoDML97"], Cell[TextData[{ "[Bos92] ", StyleBox["Bos, J.N.E.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Practical privacy", FontSlant->"Italic"], ", Ph.D. Thesis, Eindhoven University of Technology, the Netherlands, 1992." }], "Text", CellTags->"RefBos92"], Cell[TextData[{ "[Bric85] ", StyleBox["Brickell, E.F.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Breaking iterated knapsacks", FontSlant->"Italic"], ", in Advances in Cryptography: Proc. of Crypto '84, G.R. Blakley and D. \ Chaum, Eds., Lecture Notes in Computer Science 196, Springer Verlag, Berlin \ etc., pp. 342-358, 1985." }], "Text", CellTags->"RefBric85"], Cell[TextData[{ "[Bric89] ", StyleBox["Brickell, E.F.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Some ideal secret sharing schemes", FontSlant->"Italic"], ", The Journal of Combinatorial Mathematics and Combinatorial Computing, \ Vol. 6, pp. 105-113, 1989. " }], "Text", CellTags->"RefBric89"], Cell[TextData[{ "[CanS98] ", StyleBox["Canteaut, A. and N. Sendrier", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Cryptanalysis of the original McEliecese cryptosystem", FontSlant->"Italic"], ", Advances in Cryptology: Proc. AsiaCrypt'98, K. Ohta and D. Pei, Eds., \ Lecture Notes in Computer Science 1514, Springer, Berlin etc., pp. 187-199, \ 1998." }], "Text", CellTags->"RefCanS98"], Cell[TextData[{ "[ChoR85] ", StyleBox["Chor, B. and R.L. Rivest", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A knapsack type public key cryptosystem based on arithmetic in \ finite fields", FontSlant->"Italic"], ", in Advances in Cryptography: Proc. of Crypto '84, G.R. Blakley and D. \ Chaum, Eds., Lecture Notes in Computer Science 196, Springer Verlag, Berlin \ etc., pp. 54-65, 1985." }], "Text", CellTags->"RefChoR85"], Cell[TextData[{ "[CohL82] ", StyleBox["Cohen, H. and H.W. Lenstra Jr.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Primality testing and Jacobi sums", FontSlant->"Italic"], ", Report 82-18, Math. Inst., Univ. of Amsterdam, Oct. 1982." }], "Text", CellTags->"RefCohL82"], Cell[TextData[{ "[Cohn77] ", StyleBox["Cohn, P.M.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Algebra Vol.2", FontSlant->"Italic"], ", John Wiley & Sons, London, etc., 1977." }], "Text", CellTags->"RefCohn77"], Cell[TextData[{ "[Copp84] ", StyleBox["Coppersmith, D.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Fast evaluation of logarithms in fields of characteristic two", FontSlant->"Italic"], ", IEEE Transactions on Infprmation Theory, IT-30, pp. 587-594, July 1984." }], "Text", CellTags->"RefCopp84"], Cell[TextData[{ "[CopFPR96] ", StyleBox["Coppersmith, D., M. Franklin, J. Patarin, and M. Reiter", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Low-exponent RSA with Related Messages", FontSlant->"Italic"], ", Advances in Cryptology: Proc. of Eurocrypt'96, U. Maurer, Ed., Lecture \ Notes in Computer Science 1070, Springer Verlag, Berlin, etc., pp. 1-9, \ 1996." }], "Text", CellTags->"RefCopFPR96"], Cell[TextData[{ "[CovM67] ", StyleBox["Coveyou, R.R. and R.D. McPherson", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Fourier analysis of uniform random number generators", FontSlant->"Italic"], ", J. Assoc. Comput. Mach., ", StyleBox["14", FontVariations->{"Underline"->True}], ", pp. 100-119, 1967." }], "Text", CellTags->"RefCov67"], Cell[TextData[{ "[Demy94] ", StyleBox["Demytko, N.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A new elliptic curve based analogue of RSA", FontSlant->"Italic"], ", Advances in Cryptology: Proc. of Eurocrypt'93, T. Helleseth, Ed., \ Lecture Notes in Computer Science 765, Springer Verlag, Berlin, etc., pp. \ 40-49, 1994." }], "Text", CellTags->"RefDemy94"], Cell[TextData[{ "[Denn82] ", StyleBox["Denning, D.E.R.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Cryptography and Data Security", FontSlant->"Italic"], ", Addison-Wesley publ. Comp., Reading Ma, etc., 1982." }], "Text", CellTags->"RefDen82"], Cell[TextData[{ "[DifH76] ", StyleBox["Diffie, W. and M.E. Hellman", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["New directions in cryptography", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-22, pp. 644-654, Nov. 1976." }], "Text", CellTags->"RefDifH76"], Cell[TextData[{ "[Dijk97] ", StyleBox["Dijk, M. van", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Secret Key Sharing and Secret Key Generation", FontSlant->"Italic"], ", Ph.D. Thesis, Eindhoven University of Technology, the Netherlands, 1997." }], "Text", CellTags->"RefDijk97"], Cell[TextData[{ "[ElGa85] ", StyleBox["ElGamal, T", FontColor->RGBColor[0, 0.500008, 0]], "., ", StyleBox["A public-key cryptosystem and a signature scheme based on discrete \ logarithms", FontSlant->"Italic"], ", Advances in Cryptology: Proc. of Crypto'84, G.R. Blakley and D. Chaum, \ Eds., Lecture Notes in Computer Science 196, Springer Verlag, Berlin, etc., \ pp. 10-18, 1985." }], "Text", CellTags->"RefElGa85"], Cell[TextData[{ "[FiaS87] ", StyleBox["Fiat, A. and A. Shamir", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["How to prove yourself: Practical solutions to identification and \ signature problems", FontSlant->"Italic"], ", Advances in Cryptology: Proc. of Crypto'86, A.M. Odlyzko, Ed., Lecture \ Notes in Computer Science 263, Springer Verlag, Berlin, etc., pp. 186-194, \ 1987." }], "Text", CellTags->"RefFiaS87"], Cell[TextData[{ "[FIPS94] ", StyleBox["FIPS 186", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Digital Signature Standard", FontSlant->"Italic"], ", Federal Information Processing Standards Publication 186, U.S. Department \ of Commerce/N.I.S.T., National Technical Information Service, Springfield, \ Virginia, 1994." }], "Text", CellTags->"RefFips94"], Cell[TextData[{ "[Frie73] ", StyleBox["Friedman, W.F.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Cryptology", FontSlant->"Italic"], ", in Encyclopedia Brittanica, p. 848, 1973. " }], "Text", CellTags->"RefFrie73"], Cell[TextData[{ "[GarJ79] ", StyleBox["Garey, M.R. and D.S. Johnson", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Computers and Intractability: A Guide to the Theory of \ NP-Completeness", FontSlant->"Italic"], ", W.H. Freeman and Co., San Fransisco, 1979." }], "Text", CellTags->"RefGarJ79"], Cell[TextData[{ "[GilMS74] ", StyleBox["Gilbert, E.N., F.J. MacWilliams, and N.J.A. Sloane", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Codes which detect deception", FontSlant->"Italic"], ", Bell System Technical Journal, Vol. 53, pp. 405-424, 1974." }], "Text", CellTags->"RefGilMS74"], Cell[TextData[{ "[Golo67] ", StyleBox["Golomb, S.W.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Shift Register Sequences", FontSlant->"Italic"], ", Holden-Day, San Fransisco, 1967." }], "Text", CellTags->"RefGol67"], Cell[TextData[{ "[Hall67] ", StyleBox["Hall, Jr., M.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Combinatorial Theory", FontSlant->"Italic"], ", Blaisdell Publishing Company, Waltham, Ma., 1967 " }], "Text", CellTags->"RefHall67"], Cell[TextData[{ "[HarW45] ", StyleBox["Hardy, G.H. and E.M. Wright", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["An Introduction to the Theory of Numbers", FontSlant->"Italic"], ", Clarendon Press, Oxford, 1945. " }], "Text", CellTags->"RefHar45"], Cell[TextData[{ "[H\[ARing]st88] ", StyleBox["H\[ARing]stad, J.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Solving simultaneous modular equations of low degree", FontSlant->"Italic"], ", SIAM Journal on Computing, 17, pp. 336-341, 1988." }], "Text", CellTags->"RefHast88"], Cell[TextData[{ "[HelR83] ", StyleBox["Hellman, M.E. and J.M. Reyneri", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Fast computation of discrete logarithms over GF(q),", FontSlant->"Italic"], " in Advances in Cryptography: Proc. of Crypto '82, D. Chaum, R. Rivest \ and A. Sherman, Eds., Plenum Publ. Comp., New York, pp. 3-13, 1983." }], "Text", CellTags->"RefHelR83"], Cell[TextData[{ "[Huff52] ", StyleBox["Huffman, D.A.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A method for the construction of minimum-redundancy codes", FontSlant->"Italic"], ", Proc. IRE, 14, pp. 1098-1101, 1952." }], "Text", CellTags->"RefHuff52"], Cell[TextData[{ "[Joha94a] ", StyleBox["Johansson, T.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A shift register of unconditionally secure authentication codes", FontSlant->"Italic"], ", Designs, Codes and Cryptography, 4, pp. 69-81, 1994." }], "Text", CellTags->"RefJoha94a"], Cell[TextData[{ "[Joha94b] ", StyleBox["Johansson, T.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Contributions to Unconditionally Secure Authentication", FontSlant->"Italic"], ", KF Sigma, Lund, 1994." }], "Text", CellTags->"RefJoha94b"], Cell[TextData[{ "[JohKS93] ", StyleBox["Johansson, T., G. Kabatianskii, and B. Smeets", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["On the relation between A-codes and codes correcting independent \ errors", FontSlant->"Italic"], ", Advances in Cryptography: Proc. of Eurocrypt '93, T. Helleseth, Edt., \ Lecture Notes in Computer Science 765, Springer Verlag, Berlin etc., pp. \ 1-10, 1993." }], "Text", CellTags->"RefJohKS93"], Cell[TextData[{ "[Kahn67] ", StyleBox["Kahn, D.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The Codebreakers, the Story of Secret Writing", FontSlant->"Italic"], ", Macmillan Company, New York, 1967. " }], "Text", CellTags->"RefKahn67"], Cell[TextData[{ "[Khin57] ", StyleBox["Khinchin. A.I.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Mathematical Foundations of Information Theory", FontSlant->"Italic"], ", Dover Publications, New York, 1957." }], "Text", CellTags->"RefKhin57"], Cell[TextData[{ "[Knud94] ", StyleBox["Knudsen, L.R.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Block Ciphers", FontSlant->"Italic"], Cell[BoxData[ FormBox["-", TraditionalForm]], FontSlant->"Italic"], StyleBox["Analysis, Designs and Applications", FontSlant->"Italic"], ", PhD Thesis, Computer Science Department, Aarhus University, Denmark, \ 1994." }], "Text", CellTags->"RefKnud94"], Cell[TextData[{ "[Knut69] ", StyleBox["Knuth, D.E.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The Art of Computer Programming, Vol.2, Semi-numerical Algorithms", FontSlant->"Italic"], ", Addison-Wesley, Reading, MA., 1969." }], "Text", CellTags->"RefKnut69"], Cell[TextData[{ "[Knut73] ", StyleBox["Knuth, D.E.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The Art of Computer Programming, Vol.3, Sorting and searching", FontSlant->"Italic"], ", Addison-Wesley, Reading, M.A., 1973." }], "Text", CellTags->"RefKnut73"], Cell[TextData[{ "[Knut81] ", StyleBox["Knuth, D.E.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The Art of Computer Programming, Vol.2, Semi-Numerical Algorithms", FontSlant->"Italic"], ", Second Edition, Addison-Wesley, Reading, MA., 1981." }], "Text", CellTags->"RefKnut81"], Cell[TextData[{ "[Koch96] ", StyleBox["Kocher, P.C.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Timing attacks on implementations of Diffie-Hellman, RSA, DSS, and \ Other Systems", FontSlant->"Italic"], ", Advances in Cryptology: Proc. of Crypto'96, N. Koblitz, Ed., Lecture \ Notes in Computer Science 1109, Springer Verlag, Berlin etc., pp. 104-113 , \ 1996." }], "Text", CellTags->"RefKoch96"], Cell[TextData[{ "[Konh81] ", StyleBox["Konheim, A.G.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Cryptography, a Primer", FontSlant->"Italic"], ", John Wiley & Sons, New York, etc., 1981." }], "Text", CellTags->"RefKonh81"], Cell[TextData[{ "[Kraf49] ", StyleBox["Kraft, L.G.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A Device for Quantizing, Grouping and Coding Amplitude Modulated \ Pulses", FontSlant->"Italic"], ", MS Thesis, Dept. of EE, MIT, Cambridge, Mass., 1949. " }], "Text", CellTags->"RefKraf49"], Cell[TextData[{ "[LagO83] ", StyleBox["Lagarias, J.C. and A.M. Odlyzko", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Solving low-density subset problems,", FontSlant->"Italic"], " Proc. 24th Annual IEEE Symp. on Found. of Comp. Science, pp. 1-10, 1983." }], "Text", CellTags->"RefLagO83"], Cell[TextData[{ "[Lai92] ", StyleBox["Lai, X", FontColor->RGBColor[0, 0.500008, 0]], "., ", StyleBox["On the design and security of block ciphers", FontSlant->"Italic"], ", ETH Series in Information Processing, J.J. Massey, Ed., vol. 1, \ Hartung-Gorre Verlag, Konstantz, 1992)" }], "Text", CellTags->"RefLai92"], Cell[TextData[{ "[LeeB88] ", StyleBox["Lee, P.J. and E.F. Brickell", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["An observation on the security of McEliece's public-key \ cryptosystem", FontSlant->"Italic"], ", in Advances in Cryptography: Proc. of Eurocrypt'88, C.G. \ G\[UDoubleDot]nther, Ed., Lecture Notes in Computer Science 330, Springer \ Verlag, Berlin etc., pp. 275-280, 1988." }], "Text", CellTags->"RefLeeB88"], Cell[TextData[{ "[Lehm76] ", StyleBox["Lehmer, D.H.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Strong Carmichael numbers", FontSlant->"Italic"], ", J. Austral. Math. Soc., Ser. A 21, pp. 508-510, 1976." }], "Text", CellTags->"RefLehm76"], Cell[TextData[{ "[LensA96] ", StyleBox["Lenstra, A.K.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Memo on RSA signature generation in the presence of faults", FontSlant->"Italic"], ", Sept. 1996." }], "Text", CellTags->"RefLenstA96"], Cell[TextData[{ "[LenLL82] ", StyleBox["Lenstra, A.K., H.W. Lenstra, Jr., and L. Lov\[AAcute]sz", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Factoring polynomials with rational coefficients", FontSlant->"Italic"], ", Math. Annalen, 261, pp. 515-534, 1982." }], "Text", CellTags->"RefLenLL82"], Cell[TextData[{ "[LensH83] ", StyleBox["Lenstra, H.W. Jr", FontColor->RGBColor[0, 0.500008, 0]], StyleBox[".", FontColor->RGBColor[0, 1, 0]], ", ", StyleBox["Fast prime number tests", FontSlant->"Italic"], ", Nieuw Archief voor Wiskunde (4) 1, pp. 133-144, 1983." }], "Text", CellTags->"RefLens83"], Cell[TextData[{ "[LensH86] ", StyleBox["Lenstra, H.W. Jr.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Factoring integers with elliptic curves", FontSlant->"Italic"], ", Report 86-16, Dept. of Mathematics, University of Amsterdam, Amsterdam, \ the Netherlands." }], "Text", CellTags->"RefLens86"], Cell[TextData[{ "[Liu68] ", StyleBox["Liu, C.L.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Introduction to combinatorial mathematics", FontSlant->"Italic"], ", McGraw-Hill, New York, 1968." }], "Text", CellTags->"RefLiu68"], Cell[TextData[{ "[L\[UDoubleDot]ne87] ", StyleBox["L\[UDoubleDot]neberg H.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["On the Rational Normal Form of Endomorphisms; a Primer to \ Constructive Algebra", FontSlant->"Italic"], ", BI Wissenschaftsverlag, Mannheim etc., 1987." }], "Text", CellTags->"RefLune87"], Cell[TextData[{ "[MacWS77] ", StyleBox["MacWilliams, F.J. and N.J.A. Sloane", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The Theory of Error-Correcting Codes", FontSlant->"Italic"], ", North-Holland Publ. Comp., Amsterdam, etc., 1977." }], "Text", CellTags->"RefMacW77"], Cell[TextData[{ "[Mass69] ", StyleBox["Massey, J.L", FontColor->RGBColor[0, 0.500008, 0]], "., ", StyleBox["Shift-register synthesis and BCH decoding", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-15, pp. 122-127, Jan. 1969." }], "Text", CellTags->"RefMas69"], Cell[TextData[{ "[MatY93] ", StyleBox["Matsui, M. and A. Yamagishi", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A new method for known plaintext attack of FEAL cipher", FontSlant->"Italic"], ", Advances in Cryptology: Proc. Eurocrypt'92, R.A. Rueppel, Ed., Lecture \ Notes in Computer Science 658, Springer, Berlin etc., pp. 81-91, 1993." }], "Text", CellTags->"RefMatY93"], Cell[TextData[{ "[Maur92] ", StyleBox["Maurer, U.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A universal statistical test for random bit generators", FontSlant->"Italic"], ", Journal of Cryptology, 5, pp. 89-105, 1992." }], "Text", CellTags->"RefMaur92"], Cell[TextData[{ "[McEl78] ", StyleBox["McEliece, R.J.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A public-key cryptosystem based on algebraic coding theory", FontSlant->"Italic"], ", JPL DSN Progress Report 42-44, pp. 114-116, Jan-Febr. 1978." }], "Text", CellTags->"RefMcEl78"], Cell[TextData[{ "[McEl81] ", StyleBox["McEliece, R.J. and D.V. Sarwate", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["On sharing secrets and Reed-Solomon codes", FontSlant->"Italic"], ", Comm. ACM, vol. 24, pp. 583-584, Sept. 1981." }], "Text", CellTags->"RefMcEl81"], Cell[TextData[{ "[McMi56] ", StyleBox["McMillan, B.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Two inequalities implied by unique decipherability", FontSlant->"Italic"], ", IEEE Trans. Inf. Theory, IT-56, pp. 115-116, Dec. 1956." }], "Text", CellTags->"RefMcMi56"], Cell[TextData[{ "[Mene93] ", StyleBox["Menezes, A.J.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Elliptic Curve Public Key Cryptosystems, ", FontSlant->"Italic"], "Kluwer Academic Publishers, Boston etc., MA, 1993." }], "Text", CellTags->"RefMene98"], Cell[TextData[{ "[MeOkV93] ", StyleBox["Menezes, A.J., T. Okamoto, and S.A. Vanstone", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Reducing elliptic curve logarithms to logarithms in a finite \ filed, ", FontSlant->"Italic"], "IEEE Transactions on Information Theory, IT-39, 1639-1646, 1993." }], "Text", CellTags->"RefMeOkV93"], Cell[TextData[{ "[MeOoV97] ", StyleBox["Menezes, A.J., P.C. van Oorschot, and S.A. Vanstone", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Handbook of Applied Cryptography, ", FontSlant->"Italic"], "CRC Press, Boca Raton, etc. 1997." }], "Text", CellTags->"RefMeOV97"], Cell[TextData[{ "[MerH78] ", StyleBox["Merkle, R.C. and M.E. Hellman", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Hiding information and signatures in trapdoor knapsacks", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-24, pp. 525-530, Sept. 1978." }], "Text", CellTags->"RefMerH78"], Cell[TextData[{ "[MeyM82] ", StyleBox["Meyer, C.H. and S.M. Matyas", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Cryptography: a New Dimension in Computer Data Security", FontSlant->"Italic"], ", John Wiley & Sons, New York, etc., 1982" }], "Text", CellTags->"RefMey82"], Cell[TextData[{ "[Mill76] ", StyleBox["Miller, G.L.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Riemann's hypothesis and tests for primality", FontSlant->"Italic"], ", Journal of Computer and System Sciences, 13, pp. 300-317, 1976." }], "Text", CellTags->"RefMill76"], Cell[TextData[{ "[Mill86] ", StyleBox["Miller, G.L.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Use of elliptic curves in cryptography", FontSlant->"Italic"], ", Advances in Cryptology: Proc. Crypto'85, H.C. Williams, Ed., Lecture \ Notes in Computer Science 218, Springer, Berlin etc., pp. 417-426, 1986." }], "Text", CellTags->"RefMill86"], Cell[TextData[{ "[Moni80] ", StyleBox["Monier, L.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Evaluation and comparison of two efficient probabilistic primality \ testing algorithms", FontSlant->"Italic"], ", Theoretical Computer Science, 12, pp. 97-108, 1980" }], "Text", CellTags->"RefMoni80"], Cell[TextData[{ "[MorB75] ", StyleBox["Morrison, M.A. and J. Brillhart", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A method of factoring and the factorization of ", FontSlant->"Italic"], Cell[BoxData[ FormBox[ SubscriptBox["F", "7"], TraditionalForm]], FontSlant->"Italic"], ", Math. Comp. 29, pp. 183-205, 1975." }], "Text", CellTags->"RefMorB75"], Cell[TextData[{ "[Nied86] ", StyleBox["Niederreiter, H.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Knapsack type cryptosystems and algebraic coding theory", FontSlant->"Italic"], ", Problems of Control and Information Theory, 15, pp. 159-166, 1986." }], "Text", CellTags->"RefNied86"], Cell[TextData[{ "[NybR93] ", StyleBox["Nyberg, K. and R.A. Rueppel", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A new signature scheme based on the DSA giving message recovery", FontSlant->"Italic"], ", 1st ACM Conference on Computer and Communications Security, ACM Press, \ 1993, pp. 58-61." }], "Text", CellTags->"RefNybR93"], Cell[TextData[{ "[Odly85] ", StyleBox["Odlyzko, A.M.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Discrete logarithms in finite fields and their cryptographic \ significance", FontSlant->"Italic"], ", Advances in Cryptology: Proc. Eurocrypt '84, T. Beth, N. Cot and I. \ Ingemarsson, Eds., Lecture Notes in Computer Science 209, Springer, Berlin \ etc., pp. 224-314, 1985." }], "Text", CellTags->"RefOdly85"], Cell[TextData[{ "[Patt75] ", StyleBox["Patterson N.J.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The algebraic decoding of Goppa codes", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-21, pp. 203-207, Mar. 1975." }], "Text", CellTags->"RefPatt75"], Cell[TextData[{ "[Pera86] ", StyleBox["Peralta, R.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A simple and fast probablistic algorithm for computing square \ roots modulo a prime number", FontSlant->"Italic"], ", presented at Eurocrypt'86, J.L. Massey, Ed., no proceedings published." }], "Text", CellTags->"RefPera86"], Cell[TextData[{ "[PohH78] ", StyleBox["Pohlig, S.C. and M.E. Hellman", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["An improved algorithm for computing logarithms over ", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]], FontSlant->"Italic"], StyleBox[" and its cryptographic significance", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-24, pp. 106-110, Jan. 1978." }], "Text", CellTags->"RefPohH78"], Cell[TextData[{ "[Poll75] ", StyleBox["Pollard, J.M.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A Monte Carlo method for factoring", FontSlant->"Italic"], ", BIT-15, pp. 331-334, 1975." }], "Text", CellTags->"RefPoll75"], Cell[TextData[{ "[Poll78] ", StyleBox["Pollard, J.M.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Monte Carlo methods for index computations (mod p)", FontSlant->"Italic"], ", Mathematics of Computations 32, pp. 918-924, 1978." }], "Text", CellTags->"RefPoll78"], Cell[TextData[{ "[Rabi79] ", StyleBox["Rabin, M.O.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Digitalized signatures and public-key functions as intractable as \ factorization", FontSlant->"Italic"], ", MIT/LCS/TR-212, MIT Lab. for Comp. Science, Cambridge, Mass., Jan. 1979." }], "Text", CellTags->"RefRabi79"], Cell[TextData[{ "[Rabi80a] ", StyleBox["Rabin, M.O.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Probabilistic algorithms for testing primality", FontSlant->"Italic"], ", Journal of Number Theory, 12, pp. 128-138, 1980." }], "Text", CellTags->"RefRabi80a"], Cell[TextData[{ "[Rabi80b] ", StyleBox["Rabin, M.O.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Probabilistic algorithms in finite fields", FontSlant->"Italic"], ", SIAM J. Comput. 80, pp. 273-280, 1980." }], "Text", CellTags->"RefRabi80b"], Cell[TextData[{ "[RisL79] ", StyleBox["Rissanen, J. and G. Langdon", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Arithmetic coding", FontSlant->"Italic"], ", IBM Journal of Research and Development, 23, pp. 149-162, 1979." }], "Text", CellTags->"RefRisL79"], Cell[TextData[{ "[RivSA78] ", StyleBox["Rivest, R.L., A. Shamir and L. Adleman", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A method for obtaining digital signatures and public-key \ cryptosystems", FontSlant->"Italic"], ", Comm. ACM, Vol. 21, pp. 120-126, Febr. 1978." }], "Text", CellTags->"RefRivSA78"], Cell[TextData[{ "[Rose84] ", StyleBox["Rosen, K.H.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Elementary Number Theory", FontSlant->"Italic"], ", Addison-Wesley Publ. Comp., Reading, Mass, 1984." }], "Text", CellTags->"RefRose84"], Cell[TextData[{ "[Ruep86] ", StyleBox["Rueppel, R.A.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Analysis and Design of Streamciphers", FontSlant->"Italic"], ", Springer-Verlag, Berlin etc., 1986." }], "Text", CellTags->"RefRuep86"], Cell[TextData[{ "[SatA98] ", StyleBox["T. Satoh and K. Araki", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Fermat quotients and the polynomial time discrete log \ algorithm for anomalous elliptic curves", FontSlant->"Italic"], ", Commentarii Mathematici Universitatis Sancti Pauli 47, pp. 81-92, 1998." }], "Text", CellTags->"RefSatA98"], Cell[TextData[{ "[Schne96] ", StyleBox["Schneier, B.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Applied Cryptography, 2nd Edition", FontSlant->"Italic"], ", John Wiley & Sons, New York, etc., 1996." }], "Text", CellTags->"RefSchne96"], Cell[TextData[{ "[Schno90] ", StyleBox["Schnorr, C.P.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Efficient identification and signatures for smart cards", FontSlant->"Italic"], ", In: Advances in Cryptology-Crypto'89, Ed. G. Brassard, Lecture Notes in \ Computer Science 435, Springer Verlag, Berlin, etc., pp.239-252, 1990." }], "Text", CellTags->"RefSchno90"], Cell[TextData[{ "[Schno91] ", StyleBox["Schnorr, C.P.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Efficient signature generation by smart cards", FontSlant->"Italic"], ", Journal of Cryptology ", StyleBox["4", FontVariations->{"Underline"->True}], ", pp. 161-174, 1991." }], "Text", CellTags->"RefSchno91"], Cell[TextData[{ "[Scho95] ", StyleBox["Schoof, R.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Counting points on elliptic curves over finite fields", FontSlant->"Italic"], ", Journal de Th\[EAcute]orie des Nombres de Bordeaux, 7, pp. 219-254, \ 1995." }], "Text", CellTags->"RefScho95"], Cell[TextData[{ "[Sham79] ", StyleBox["Shamir, A.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["How to share a secret", FontSlant->"Italic"], ", Communications of the A.C.M., Vol. 22, pp. 612-613, Nov. 1979." }], "Text", CellTags->"RefSham79"], Cell[TextData[{ "[Sham82] ", StyleBox["Shamir, A.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A polynomial time algorithm for breaking the basic Merkle-Hellman \ cryptosystem", FontSlant->"Italic"], ", in Proc. 23-rd IEEE Symp. Found. Computer Sci., pp. 145-152, 1982." }], "Text", CellTags->"RefSham82"], Cell[TextData[{ "[Sham49] ", StyleBox["Shannon, C.E.", FontColor->RGBColor[0, 0.500008, 0]], ", Communication Theory and Secrecy Systems, B.S.T.J. ", StyleBox["28", FontVariations->{"Underline"->True}], ", pp. 656-715, Oct. 1949." }], "Text", CellTags->"RefShan49"], Cell[TextData[{ "[Shap83] ", StyleBox["Shapiro, H.N.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Introduction to the Theory of Numbers", FontSlant->"Italic"], ", John Wiley & Sons, New York, etc., 1983." }], "Text", CellTags->"RefShap83"], Cell[TextData[{ "[Silv86] ", StyleBox["Silverman, J.H.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The Arithmetic of Elliptic Curves", FontSlant->"Italic"], ", Springer Verlag, Berlin, etc., 1986." }], "Text", CellTags->"RefSilv86"], Cell[TextData[{ "[Silv98] ", StyleBox["Silverman, J.H.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The XEDNI calculus and the elliptic curve discrete logarithm \ problem", FontSlant->"Italic"], ", preprint." }], "Text", CellTags->"RefSilv98"], Cell[TextData[{ "[SilT92] ", StyleBox["Silverman J.H. and J. Tate", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Rational Points on Elliptic Curves", FontSlant->"Italic"], ", Undergraduate Texts in Mathematics, Springer-Verlag New York Inc.,1992. " }], "Text", CellTags->"RefSilT92"], Cell[TextData[{ "[Simm92] ", StyleBox["Simmons, G.J.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A survey of information authentication", FontSlant->"Italic"], ", in Contemporary Cryptology: the Science of Information Integrity, G.J. \ Simmons, Ed., IEEE Press, New York, pp. 379-419, 1992." }], "Text", CellTags->"RefSimm92"], Cell[TextData[{ "[Smar98] ", StyleBox["N. Smart", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["The discrete logarithm problem on elliptic curves of trace one", FontSlant->"Italic"], ", Journal of Cryptology, to appear." }], "Text", CellTags->"RefSmar98"], Cell[TextData[{ "[SolS77] ", StyleBox["Solovay, R. and V. Strassen", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A fast Monte-Carlo test for primality", FontSlant->"Italic"], ", SIAM J. Comput 6, pp. 84-85, March 1977." }], "Text", CellTags->"RefSolS77"], Cell[TextData[{ "[Stin95] ", StyleBox["Stinson, D.R", FontColor->RGBColor[0, 0.500008, 0]], "., ", StyleBox["Cryptography: Theory and Practice", FontSlant->"Italic"], ", CRC Press, Inc., Boca Raton, 1995." }], "Text", CellTags->"RefStin95"], Cell[TextData[{ "[SugK76] ", StyleBox["Sugiyama, Y., M. Kashara, S. Hirasawa and T. Namekawa", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["An erasures-and-errors decoding algorithm for Goppa codes", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-22, pp. 238-241, Mar. 1976." }], "Text", CellTags->"RefSugK76"], Cell[TextData[{ "[vTbu88] ", StyleBox["van Tilburg, H", FontColor->RGBColor[0, 0.500008, 0]], "., ", StyleBox["On the McEliece public-key cryptosystem", FontSlant->"Italic"], ", Advances in Cryptography: Proc. of Crypto '88, S. Goldwasser, Ed., \ Lecture Notes in Computer Science 403, Springer Verlag, Berlin etc., pp. \ 119-131, 1989." }], "Text", CellTags->"RefvTbu88"], Cell[TextData[{ "[Vaud98] ", StyleBox["Vaudenay, S.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Cryptanalysis of the Chor-Rivest cryptosystem", FontSlant->"Italic"], ", Advances in Cryptography: Proc. of Crypto '98, H. Krawczyk, Ed., Lecture \ Notes in Computer Science 1462, Springer Verlag, Berlin etc., pp. 243-256, \ 1998." }], "Text", CellTags->"RefVaud98"], Cell[TextData[{ "[VerT97] ", StyleBox["Verheul, E.R. and H.C.A. van Tilborg", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Constructions and properties of ", FontSlant->"Italic"], Cell[BoxData[ FormBox["k", TraditionalForm]], FontSlant->"Italic"], StyleBox[" out of ", FontSlant->"Italic"], Cell[BoxData[ FormBox["n", TraditionalForm]], FontSlant->"Italic"], StyleBox[" visual secret sharing shemes", FontSlant->"Italic"], ", Designs, Codes and Cryptography, Vol. 11, No. 2, pp.179-196, May 1997." }], "Text", CellTags->"RefVerT97"], Cell[TextData[{ "[Well99] ", StyleBox["Wells, R.B.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Applied Coding and Information Theory", FontSlant->"Italic"], ", Prentice Hall, Upper Saddle River NJ, 1999." }], "Text", CellTags->"RefWell99"], Cell[TextData[{ "[Wien90] ", StyleBox["Wiener, M.J.", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Cryptanalysis of Short RSA Secret Exponents", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-36, pp. 553-558, May 1990." }], "Text", CellTags->"RefWien90"], Cell[TextData[{ "[ZivL77] ", StyleBox["Ziv, J. and A. Lempel", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["A universal algorithm for sequential data compression", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-23, pp. 337-343, 1977. " }], "Text", CellTags->"RefZivL77"], Cell[TextData[{ "[ZivL78] ", StyleBox["Ziv, J. and A. Lempel", FontColor->RGBColor[0, 0.500008, 0]], ", ", StyleBox["Compression of individual sequences by variable rate coding", FontSlant->"Italic"], ", IEEE Transactions on Information Theory, IT-24, pp. 530-536, 1978. " }], "Text", CellTags->"RefZivL78"] }, Closed]], Cell[CellGroupData[{ Cell["Symbols and Notations", "Chapter", CellTags->"Chap Notations"], Cell[TextData[{ Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppA GCD"], TraditionalForm]]], "\tgreatest common divisor,\n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"[", RowBox[{"a", ",", "b"}], "]"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppA LCM"], TraditionalForm]]], "\tleast common multiple, \n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"(", FractionBox["u", "m"], ")"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], TraditionalForm]]], "\tJacobi symbol, \n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"R", "/", "S"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppB Res Class Ring"], TraditionalForm]]], "\tresidue class ring, \n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"(", RowBox[{"s", "(", "x", ")"}], ")"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppB gen ideal"], TraditionalForm]]], "\tideal generated by ", Cell[BoxData[ FormBox[ RowBox[{"s", "(", "x", ")"}], TraditionalForm]]], ", \n", ButtonBox["\[Congruent]", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Congr Rel"], "\tcongruent, \n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"||", "v", "||"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppB pos def"], TraditionalForm]]], "\tlength of vector, \n", Cell[BoxData[ FormBox[ ButtonBox[ SuperscriptBox[ StyleBox["U", FontWeight->"Plain", FontSlant->"Italic", FontTracking->"Plain", FontVariations->{"Outline"->False, "Shadow"->False, "Underline"->False}], "\[UpTee]"], BaseStyle->"Hyperlink", ButtonData:>"DefAppB orth compl"], TraditionalForm]]], "\torthogonal complement, \n\n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"\[CapitalGamma]", "(", RowBox[{ RowBox[{ SubscriptBox["p", "U"], "(", "x", ")"}], ",", RowBox[{"GF", "(", SuperscriptBox["2", "m"], ")"}]}], ")"}], BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], TraditionalForm]]], " Goppa code, \n", ButtonBox["\[Mu]", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Mobius function"], "\tM\[ODoubleDot]bius function, \n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"\[Pi]", "(", "x", ")"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppA Pi(x)"], TraditionalForm]]], "\tnumber of primes ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", "x"}], TraditionalForm]]], ", \n", ButtonBox["\[CurlyPhi]", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], "\tEuler totient function, \n", ButtonBox["\[Chi]", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"], "\tLegendre symbol, \n", StyleBox[ButtonBox["\[CapitalOmega](f)", BaseStyle->"Hyperlink", ButtonData:>"DefShift Omega"], FontSlant->"Italic"], "\toutput space of LFSR, \n\n", StyleBox[ButtonBox["AC(k)", BaseStyle->"Hyperlink", ButtonData:>"FormShift AC(k)"], FontSlant->"Italic"], "\tauto-correlation, \n", Cell[BoxData[ FormBox[ ButtonBox[ SubscriptBox["D", "n"], BaseStyle->"Hyperlink", ButtonData:>"DefShann redundancy"], TraditionalForm]]], "\tredundancy, \n", StyleBox[ButtonBox["d(u)", BaseStyle->"Hyperlink", ButtonData:>"DefKnap density"], FontSlant->"Italic"], "\tdensity of a knapsack, \n", ButtonBox["\[ScriptCapitalE]", BaseStyle->"Hyperlink", ButtonData:>"DefEllip elliptic curve"], "\telliptic curve, \n", ButtonBox["gcd\t", BaseStyle->"Hyperlink", ButtonData:>"DefAppA GCD"], "greatest common divisor, , \n", Cell[BoxData[ FormBox[ StyleBox[ ButtonBox[ SuperscriptBox["f", "*"], BaseStyle->"Hyperlink", ButtonData:>"FormShift Rec pol"], FontSlant->"Italic"], TraditionalForm]]], "\tminimal characteristic polynomial, \n", Cell[BoxData[ FormBox[ ButtonBox[ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], BaseStyle->"Hyperlink", ButtonData:>"DefShift Lk and fk"], TraditionalForm]]], "\tlinear complexity, \n", StyleBox[ButtonBox["F[x]", BaseStyle->"Hyperlink", ButtonData:>"DefAppB polyn"], FontSlant->"Italic"], "\tring of polynomials over ", Cell[BoxData[ FormBox["F", TraditionalForm]]], ", \n", Cell[BoxData[ FormBox[ ButtonBox[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm], BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], TraditionalForm]], FontSlant->"Italic"], "\tfinite field of ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " elements, \n", ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], "\tGalois field, " }], "Text", PageBreakBelow->True, CellChangeTimes->{{3.4233889155483294`*^9, 3.4233889163920794`*^9}}], Cell[TextData[{ Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"h", "(", "p", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShann entropy n=2"], TraditionalForm]]], "\tentropy, ", "\n", ButtonBox["H(X)", BaseStyle->"Hyperlink", ButtonData:>"FormShann entropy"], "\tentropy, ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShann H(X|Y)"], TraditionalForm]]], " conditional entropy, ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{ SubscriptBox["I", "q"], "(", "n", ")"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppB Iq(n)"], TraditionalForm]]], "\tnumber of irreducible polynomials of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "q"], TraditionalForm]]], ", ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"I", "(", "n", ")"}], BaseStyle->"Hyperlink", ButtonData:>"DefAppB Iq(n)"], TraditionalForm]]], "\tnumber of binary, irreducible polynomials of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", ", "\n", ButtonBox["I(X,Y)", BaseStyle->"Hyperlink", ButtonData:>"DefShann mutual inf"], " mutual information, ", "\n", ButtonBox["lcm", BaseStyle->"Hyperlink", ButtonData:>"DefAppA LCM"], "\tleast common multiple , ", ", ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ SubscriptBox["L", "k"], BaseStyle->"Hyperlink", ButtonData:>"DefShift Lk and fk"], TraditionalForm]]], "\tlinear complexity, ", "\n", ButtonBox["\[ScriptCapitalN]", BaseStyle->"Hyperlink", ButtonData:>"DefSecret minimal el"], "\tnon-privileged set (of an access system), ", "\n", ButtonBox["NQR", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], "\tquadratic non-residue , ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ SubscriptBox["P", "D"], BaseStyle->"Hyperlink", ButtonData:>"DefAuth P_D"], TraditionalForm]]], "\tprobability of a successful deception, ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ SubscriptBox["P", "I"], BaseStyle->"Hyperlink", ButtonData:>"DefAuth P_I"], TraditionalForm]]], "\tprobability of a successful impersonation attack, ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ SubscriptBox["P", "S"], BaseStyle->"Hyperlink", ButtonData:>"DefAuth P_S"], TraditionalForm]]], "\tprobability of a successful substitution attack, ", "\n", ButtonBox["\[ScriptCapitalP]", BaseStyle->"Hyperlink", ButtonData:>"DefSecret minimal el"], "\tprivileged set (of an access system), ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ FormBox[ SuperscriptBox["Q", RowBox[{"(", "d", ")"}]], TraditionalForm], BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cycl Pol"], TraditionalForm]]], "\tcyclotomic polynomial, ", "\n", ButtonBox["QR", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], ButtonBox["\t", BaseStyle->"Hyperlink", ButtonData:>"DefAppA GCD"], "quadratic residue , ", "\n", ButtonBox["Tr", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Trace"], "\ttrace function, ", "\n", ButtonBox["V(n,q)", BaseStyle->"Hyperlink", ButtonData:>"DefAuth V(n q)"], "\t", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-dimensional vectorspace over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", ", "\n", StyleBox[ButtonBox["w(x)", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl weight"], FontSlant->"Italic"], "\tweight of a vector, ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], BaseStyle->"Hyperlink", ButtonData:>"DefAppB Zm"], TraditionalForm]]], "\tintegers modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", " }], "Text", GeneratedCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Index", "Chapter", CellTags->"Chap Index"], Cell["A", "Section"], Cell[TextData[{ ButtonBox["Abelian", BaseStyle->"Hyperlink", ButtonData:>"DefAppB additive group"], " group, ", "\n", ButtonBox["access structure", BaseStyle->"Hyperlink", ButtonData:>"DefSecret access struc"], ", ", "\n\t", ButtonBox["complete", BaseStyle->"Hyperlink", ButtonData:>"DefSecret perfect SSS"], ", ", "\n\t", ButtonBox["perfect", BaseStyle->"Hyperlink", ButtonData:>"DefSecret perfect SSS"], " , ", "\n", ButtonBox["A-code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth A-code"], " (for message authentication), ", "\n\t", ButtonBox["Johansson", BaseStyle->"Hyperlink", ButtonData:>"SubsAuth EC AC"], "'s construction of A-code from EC-code, ", "\n\tfrom ", ButtonBox["orthogonal array", BaseStyle->"Hyperlink", ButtonData:>"DefAuth OA"], ", ", "\n", ButtonBox["active", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cryptanalist active"], " cryptanalist, ", "\n", ButtonBox["addition", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Addition"], " of points on an elliptic curve, ", "\n", ButtonBox["addition chain", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr addition chain"], ", ", "\n", ButtonBox["additive", BaseStyle->"Hyperlink", ButtonData:>"DefAppB additive group"], " group, ", "\n", ButtonBox["address", BaseStyle->"Hyperlink", ButtonData:>"DefHuff dictionary"], ", ", "\n", ButtonBox["alphabet", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Alphabet"], ", ", "\nalgorithm\n\t", ButtonBox["addition", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Addition"], " of points on an elliptic curve , ", "\n\t", ButtonBox["Baby-step Giant-step", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Baby Giant"], " (for taking discrete logarithms), ", "\n\t", ButtonBox["Berlekamp-Massey", BaseStyle->"Hyperlink", ButtonData:>"AlgShift Ber-Mas"], ", ", "\n\t", ButtonBox["bit swapping", BaseStyle->"Hyperlink", ButtonData:>"AlgMcEl Bit Swap"], ", ", "\n\t", ButtonBox["Cohen and Lenstra", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Lenstra small"], " (deterministic primality test 1), ", "\n\t", ButtonBox["continued fraction", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA CF"], ", ", "\n\t", ButtonBox["conversion", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap conversion"], " from integer to binary weight ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " vector, ", "\n\t", ButtonBox["decryption of Chor-Rivest", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap decrypt ChorR"], ", ", "\n\tEuclid \t(", ButtonBox["simple", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA Simple Euclid"], " version), ", "\n\t\t(", ButtonBox["extended", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], " version), ", "\n\tfactoring algorithms\n\t\t", ButtonBox["Pollard p-1", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard p-1"], ", ", "\n\t\t", ButtonBox["Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], ButtonBox["\[CurlyRho]", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], ", ", "\n\t\t", ButtonBox["quadratic sieve", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Q Sieve"], ", ", "\n\t\t", ButtonBox["random squares method", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Random Square"], ", ", "\n\t\t", ButtonBox["Gauss", BaseStyle->"Hyperlink", ButtonData:>"ProbAppB Gauss"], " (to find a primitive element), ", "\n\t", ButtonBox["Gram-Schmidt", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap Gram-Schmidt"], " (for orthogonalization process), ", "\n\t", ButtonBox["Huffman", BaseStyle->"Hyperlink", ButtonData:>"AlgHuff Huffman"], " (for data compression), ", "\n\t", ButtonBox["index-calculus", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Index Calc"], " (for taking discrete logarithms), ", "\n\t", ButtonBox["Floyd's cycle-finding", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Floyd"], " algorithm, ", "\n\t", ButtonBox["knapsack problem", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap solve superincr"], " for superincreasing sequences, " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell[TextData[{ "\t", Cell[BoxData[ FormBox[ ButtonBox[ SuperscriptBox["L", "3"], BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 reduction"], TraditionalForm]]], " (for a lattice basis reduction), ", "\n\t", ButtonBox["Lempel-Ziv", BaseStyle->"Hyperlink", ButtonData:>"SectHuff Lempel-Ziv"], " (for data compression) , ", "\n\t", ButtonBox["message authentication code", BaseStyle->"Hyperlink", ButtonData:>"AlgAuth MAC on DES"], " based on DES, ", "\n\t", ButtonBox["Miller-Rabin", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Miller-Rabin"], " primality test, ", "\n\t", ButtonBox["Pohlig-Hellman", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Pohlig Hellman"], ", ", "\n\t", ButtonBox["Pollard p-1", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard p-1"], " (for factoring), ", "\n\t", ButtonBox["Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], ButtonBox["\[CurlyRho]", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], " (for factoring), ", "\n\t", ButtonBox["Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"], ButtonBox["\[Rho]", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"], " (for taking discrete logarithms), ", "\n \tprimality tests\n\t\t", ButtonBox["Cohen and Lenstra", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Lenstra small"], " (deterministic primality test 1), ", "\n\t\t", ButtonBox["Miller-Rabin", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Miller-Rabin"], " (probabilistic primality test), ", "\n\t\t", ButtonBox["Solovay and Strassen", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Solovay"], " (probabilistic primality test), ", "\n\t", ButtonBox["quadratic sieve", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Q Sieve"], " factoring algorithm, ", "\n\t", ButtonBox["Secure Hash", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr SHA"], " (SHA), ", "\n\t", ButtonBox["Solovay and Strassen", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Solovay"], " (probabilistic primality test), ", "\n\t", ButtonBox["taking square roots", BaseStyle->"Hyperlink", ButtonData:>"SubSRSA Rabin decr"], " modulo a prime number, ", "\n", ButtonBox["anomalous", BaseStyle->"Hyperlink", ButtonData:>"DefEllip anomalous"], " curve, ", "\n", ButtonBox["associative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], " (operation), ", "\nattack\n\t", ButtonBox["chosen plaintext", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Chosen Pl. Att."], ", ", "\n\t", ButtonBox["ciphertext only", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cipher Only Att."], ", ", "\n\t", ButtonBox["Coppersmith", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Copper"], " (on RSA with related messages), ", "\n\t", ButtonBox["exhaustive", BaseStyle->"Hyperlink", ButtonData:>"DefClass exh key search"], " key search, ", "\n\t", ButtonBox["impersonation", BaseStyle->"Hyperlink", ButtonData:>"DefAuth imp attack"], ", ", "\n\t", ButtonBox["incidence of coincidences", BaseStyle->"Hyperlink", ButtonData:>"SubSClass incid of coinc"], " (of Vigen\[EGrave]re cryptosystem), ", "\n\t", ButtonBox["known plaintext", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Known Pl. Att."], ", ", "\n\t", ButtonBox["Kasiski's method", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Kasiski"], " (of Vigen\[EGrave]re cryptosystem), ", "\n\t", ButtonBox["known plaintext", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Known Pl. Att."], ", ", "\n\t", Cell[BoxData[ FormBox[ ButtonBox[ SuperscriptBox["L", "3"], BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 attack"], TraditionalForm]]], " (on the knapsack system), ", "\n\t", ButtonBox["Lagarias and Odlyzko", BaseStyle->"Hyperlink", ButtonData:>"SectKnap L3-attack"], ", ", "\n\t", ButtonBox["microwave attack", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Microwave"], " (physical attack of RSA), ", "\n\t", ButtonBox["substitution", BaseStyle->"Hyperlink", ButtonData:>"DefAuth subs attack"], ", ", "\n\t", ButtonBox["timing", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Timing"], " (physical attack of RSA), ", "\n\t", ButtonBox["Wiener", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Wiener attack"], " (of RSA with small ", Cell[BoxData[ FormBox["d", TraditionalForm]]], "), ", "\n", ButtonBox["authentication", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Authen"], ", ", "\n\t", ButtonBox["code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth auth code"], ", ", "\n\t\tfrom ", ButtonBox["error-correcting codes", BaseStyle->"Hyperlink", ButtonData:>"SubsAuth EC AC"], ", ", "\n\t\tfrom ", ButtonBox["orthogonal array", BaseStyle->"Hyperlink", ButtonData:>"DefAuth OA"], ", ", "\n\t\tfrom ", ButtonBox["projective plane", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAuth PG A-code"], ", ", "\n\t", ButtonBox["matrix", BaseStyle->"Hyperlink", ButtonData:>"DefAuth scheme"], ", ", "\n\t", ButtonBox["message authentication code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth MAC"], ", ", "\n", ButtonBox["authenticator", BaseStyle->"Hyperlink", ButtonData:>"DefAuth A-code"], ", ", "\n", ButtonBox["auto-correlation", BaseStyle->"Hyperlink", ButtonData:>"DefShift AC(k)"], ", ", "\n\t", ButtonBox["in-phase", BaseStyle->"Hyperlink", ButtonData:>"DefShift AC in/out"], ", ", "\n\t", ButtonBox["out-of-phase", BaseStyle->"Hyperlink", ButtonData:>"DefShift AC in/out"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["B", "Section"], Cell[TextData[{ ButtonBox["Baby-step Giant-step", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Baby Giant"], " (for taking discrete logarithms), ", "\n", ButtonBox["basis", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Basis"], ", ", "\n", "\t", ButtonBox["lattice", BaseStyle->"Hyperlink", ButtonData:>"DefKnap basis"], ", ", "\n", "\t", ButtonBox["self-orthogonal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB self orth"], ", ", "\n", "\t", ButtonBox["self-orthonormal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB self orth"], ", ", "\n", "\t", ButtonBox["standard", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Standard basis"], ", ", "\n", "\t", ButtonBox["y-reduced", BaseStyle->"Hyperlink", ButtonData:>"DefKnap reduced"], " (of a lattice), ", "\n", ButtonBox["Berlekamp-Massey", BaseStyle->"Hyperlink", ButtonData:>"AlgShift Ber-Mas"], " algorithm, ", "\n", ButtonBox["bi-gram", BaseStyle->"Hyperlink", ButtonData:>"DefIntro bigram"], ", ", "\n", ButtonBox["binary symmetric channel", BaseStyle->"Hyperlink", ButtonData:>"DefShann BSC"], ", ", "\n", ButtonBox["bit", BaseStyle->"Hyperlink", ButtonData:>"DefShann information"], " (unit of information), ", "\n", ButtonBox["bit swapping", BaseStyle->"Hyperlink", ButtonData:>"AlgMcEl Bit Swap"], " algorithm, ", "\n", ButtonBox["block", BaseStyle->"Hyperlink", ButtonData:>"DefShift Gap Block"], ", ", "\n", ButtonBox["block cipher", BaseStyle->"Hyperlink", ButtonData:>"DefBlock block"], ", ", "\n", "\t", ButtonBox["Data Encryption Standard", BaseStyle->"Hyperlink", ButtonData:>"DefBlock DES"], ", ", "\n", "\t", ButtonBox["DES", BaseStyle->"Hyperlink", ButtonData:>"DefBlock DES"], ", ", "\n", "\t", ButtonBox["IDEA", BaseStyle->"Hyperlink", ButtonData:>"DefBlock IDEA"], ", ", "\n", "\t", ButtonBox["RC5", BaseStyle->"Hyperlink", ButtonData:>"DefBlock RC5"], ", ", "\n", "\t", ButtonBox["Triple DES", BaseStyle->"Hyperlink", ButtonData:>"DefBlock Triple DES"], ", ", "\n", ButtonBox["bound", BaseStyle->"Hyperlink", ButtonData:>"DefAuth square root"], " (square root), ", "\n", ButtonBox["branch point", BaseStyle->"Hyperlink", ButtonData:>"DefShift branch point"], ", ", "\nbuffer", "\n", "\t", ButtonBox["look-ahead", BaseStyle->"Hyperlink", ButtonData:>"DefHuff sliding"], ", ", "\n", "\t", ButtonBox["search", BaseStyle->"Hyperlink", ButtonData:>"DefHuff sliding"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["C", "Section"], Cell[TextData[{ ButtonBox["Caesar cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Caesar Cipher"], ", ", "\n", ButtonBox["Carmichael number", BaseStyle->"Hyperlink", ButtonData:>"DefRSA Carmichael"], ", ", "\n", ButtonBox["chain rule", BaseStyle->"Hyperlink", ButtonData:>"TheoShann chain rule"], " for conditional entropy, ", "\nchallenge in\n\t", ButtonBox["Fiat-Shamir protocol", BaseStyle->"Hyperlink", ButtonData:>"DefProt challenge"], ", ", "\n\t", ButtonBox["block cipher based", BaseStyle->"Hyperlink", ButtonData:>"DefBlock challenge"], " identity verification protocol, ", "\n", ButtonBox["channel", BaseStyle->"Hyperlink", ButtonData:>"DefIntro secure channel"], " (secure), ", "\n", ButtonBox["characteristic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB characteristic"], " (of a field), ", "\n", ButtonBox["characteristic polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefShift Char Pol"], ", ", "\n", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], ", ", "\n", ButtonBox["Chor-Rivest", BaseStyle->"Hyperlink", ButtonData:>"SectKnap ChorR"], " cryptosytem, ", "\n", ButtonBox["chosen plaintext attack", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Chosen Pl. Att."], ", ", "\ncipher (see cryptosystem)\n\t", ButtonBox["block", BaseStyle->"Hyperlink", ButtonData:>"DefBlock block"], ", ", "\n\t", ButtonBox["stream", BaseStyle->"Hyperlink", ButtonData:>"DefClass stream cipher"], ", ", "\n", ButtonBox["cipher block chaining", BaseStyle->"Hyperlink", ButtonData:>"DefBlock CBC"], ", ", "\n", ButtonBox["cipher feedback mode", BaseStyle->"Hyperlink", ButtonData:>"DefBlock CFM"], ", ", "\n", ButtonBox["ciphertext", BaseStyle->"Hyperlink", ButtonData:>"DefIntro plaintext"], ", ", "\n", ButtonBox["ciphertext only attack", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cipher Only Att."], ", ", "\ncode\n\t", ButtonBox["A-", BaseStyle->"Hyperlink", ButtonData:>"DefAuth A-code"], " (for message authentication), ", "\n\t", ButtonBox["authentication", BaseStyle->"Hyperlink", ButtonData:>"DefAuth auth code"], ", ", "\n\t", ButtonBox["Goppa", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], ", ", "\n\t", ButtonBox["hash", BaseStyle->"Hyperlink", ButtonData:>"DefAuth hash"], ", ", "\n\t", ButtonBox["instantaneous", BaseStyle->"Hyperlink", ButtonData:>"DefHuff prefix code"], ", ", "\n\t", ButtonBox["message authentication", BaseStyle->"Hyperlink", ButtonData:>"DefAuth MAC"], ", ", "\n\t", ButtonBox["prefix", BaseStyle->"Hyperlink", ButtonData:>"DefHuff prefix code"], ", ", "\n\t", ButtonBox["source", BaseStyle->"Hyperlink", ButtonData:>"DefHuff code"], ", ", "\n\t", ButtonBox["uniquely decodable", BaseStyle->"Hyperlink", ButtonData:>"DefHuffman U.D."], ", ", "\n\t", ButtonBox["U.D.", BaseStyle->"Hyperlink", ButtonData:>"DefHuffman U.D."], ", ", "\n", ButtonBox["codebook", BaseStyle->"Hyperlink", ButtonData:>"DefBlock codebook"], " mode, ", "\n", ButtonBox["codeword", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], ", ", "\n", ButtonBox["Cohen and Lenstra", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Lenstra small"], " (deterministic primality test; version1), ", "\ncollision resistant\n\t", ButtonBox["strong", BaseStyle->"Hyperlink", ButtonData:>"DefAuth strong col res"], ", ", "\n\t", ButtonBox["weak", BaseStyle->"Hyperlink", ButtonData:>"DefAuth weak col res"], ", ", "\n", ButtonBox["column transposition", BaseStyle->"Hyperlink", ButtonData:>"DefClass Column Transp"], " (cipher), ", "\n", ButtonBox["commutative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB operation"], " (operation), ", "\ncomplete\n\t", ButtonBox["access structure", BaseStyle->"Hyperlink", ButtonData:>"DefSecret perfect SSS"], ", ", "\n\t", ButtonBox["residue system", BaseStyle->"Hyperlink", ButtonData:>"DefAppA compl resid"], ", ", "\n", ButtonBox["computationally secure", BaseStyle->"Hyperlink", ButtonData:>"DefAuth comp secure"], ", ", "\nconditional\n\t", ButtonBox["entropy", BaseStyle->"Hyperlink", ButtonData:>"DefShann cond entropy"], ", ", "\n\t", ButtonBox["probability", BaseStyle->"Hyperlink", ButtonData:>"DefShann cond prob"], ", ", "\n", ButtonBox["confidentiality", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Privacy"], ", ", "\ncongruence relation\n\t", ButtonBox["linear", BaseStyle->"Hyperlink", ButtonData:>"DefAppA linear CR"], ", ", "\n\t", ButtonBox["quadratic", BaseStyle->"Hyperlink", ButtonData:>"DefAppA quadratic CR"], ", ", "\n", ButtonBox["congruent", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Congr Rel"], ", ", "\n", ButtonBox["conjugate", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Numb Conj"], ", ", "\n", ButtonBox["consistency condition", BaseStyle->"Hyperlink", ButtonData:>"PropIntro Kolmogorov"], " (of Kolmogorov), ", "\n", ButtonBox["continued fraction", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Cont Frac"], ", ", "\n", ButtonBox["conventional", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], " cryptosystem, ", "\n", ButtonBox["convergent", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Cont Frac Appr"], ", ", "\n", ButtonBox["Coppersmith's attack", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Copper"], " on RSA with related messages, ", "\n", ButtonBox["coprime", BaseStyle->"Hyperlink", ButtonData:>"DefAppA coprime"], ", ", "\n", ButtonBox["cryptanalist", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cryptanalist"], ", ", "\n\t", ButtonBox["active", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cryptanalist active"], ", ", "\n\t", ButtonBox["passive", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cryptanalist passive"], ", ", "\n", ButtonBox["cryptanalysis", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cryptology"], " , ", "\n\t", ButtonBox["differential", BaseStyle->"Hyperlink", ButtonData:>"DefBlock lin and diff crypt"], " (for block ciphers), ", "\n\t", ButtonBox["incidence of coincidences", BaseStyle->"Hyperlink", ButtonData:>"SubSClass incid of coinc"], ", ", "\n\t", ButtonBox["Kasiski's method", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Kasiski"], ", ", "\n\t", ButtonBox["linear", BaseStyle->"Hyperlink", ButtonData:>"DefBlock lin and diff crypt"], " (for block ciphers), ", "\n\tthe method of the ", ButtonBox["probable world", BaseStyle->"Hyperlink", ButtonData:>"DefClass Prob Word"], ", ", "\n", ButtonBox["cryptographic transformation", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Transf"], ", ", "\n", ButtonBox["cryptography", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cryptology"], ", ", "\n", ButtonBox["cryptology", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cryptology"], ", ", "\ncryptosystem\n\t", ButtonBox["Caesar", BaseStyle->"Hyperlink", ButtonData:>"DefClass Caesar Cipher"], ", ", "\n\t", ButtonBox["Chor-Rivest", BaseStyle->"Hyperlink", ButtonData:>"SectKnap ChorR"], ", ", "\n\t", ButtonBox["column transposition", BaseStyle->"Hyperlink", ButtonData:>"DefClass Column Transp"], " , ", "\n\t", ButtonBox["conventional", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], ", ", "\n\t", ButtonBox["Data Encryption Standard", BaseStyle->"Hyperlink", ButtonData:>"DefBlock DES"], ", ", "\n\t", ButtonBox["DES", BaseStyle->"Hyperlink", ButtonData:>"DefBlock DES"], ", ", "\n\t", ButtonBox["Diffie-Hellman key exchange protocol", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], ", ", "\n\t", ButtonBox["Diffie-Hellman key exchange protocol", BaseStyle->"Hyperlink", ButtonData:>"TableEllip Diffie Hellman"], " over elliptic curves, ", "\n\t", ButtonBox["ElGamal", BaseStyle->"Hyperlink", ButtonData:>"SubsDiscr ElGamal"], " public key cryptosystems, ", "\n\t\t", ButtonBox["secrecy scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal secrecy"], ", ", "\n\t\t", ButtonBox["signature scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal signature"], ", ", "\n\t", ButtonBox["Enigma", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Enigma"], ", ", "\n\t", ButtonBox["Hagelin", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Hagelin"], ", ", "\n\t", ButtonBox["IDEA", BaseStyle->"Hyperlink", ButtonData:>"DefBlock IDEA"], ", ", "\n\t", ButtonBox["knapsack", BaseStyle->"Hyperlink", ButtonData:>"TableKnap knapsack"], ", ", "\n\t", ButtonBox["LFSR", BaseStyle->"Hyperlink", ButtonData:>"DefShift LFSR"], ", ", "\n\t", ButtonBox["linear feedback shift register", BaseStyle->"Hyperlink", ButtonData:>"DefShift LFSR"], ", ", "\n\t", ButtonBox["logarithm system", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], " (key exchange), ", "\n\t", ButtonBox["McEliece", BaseStyle->"Hyperlink", ButtonData:>"TableMcEl McEliece"], " (secrecy scheme), ", "\n\t", ButtonBox["Niederreiter", BaseStyle->"Hyperlink", ButtonData:>"TableMcEl Niederreiter"], " (secrecy scheme, ", "\n\t", ButtonBox["one-time pad", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vernam"], ", ", "\n\t", ButtonBox["Playfair, ", BaseStyle->"Hyperlink", ButtonData:>"DefClass Playfair"], "\n\t", ButtonBox["polyalphabetic substitution", BaseStyle->"Hyperlink", ButtonData:>"DefClass Poly Subst"], ", ", "\n\t", ButtonBox["product", BaseStyle->"Hyperlink", ButtonData:>"DefClass product cipher"], ", ", "\n\t", ButtonBox["public key", BaseStyle->"Hyperlink", ButtonData:>"DefPubl Public Key"], ", ", "\n\t", ButtonBox["Rabin", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Rabin"], " (variant to RSA), ", "\n\t", ButtonBox["RC5", BaseStyle->"Hyperlink", ButtonData:>"DefBlock RC5"], "\n\tRSA, ", "\n\t\t", ButtonBox["secrecy", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Privacy"], ", ", "\n\t\t", ButtonBox["signature", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Signature"], ", ", "\n\t\t", ButtonBox["signature and privacy", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Secr+Sign"], ", ", "\n\t", ButtonBox["simple substitution", BaseStyle->"Hyperlink", ButtonData:>"DefClass SimpleSubst"], ", ", "\n\t", ButtonBox["symmetric", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], ", ", "\n\t", ButtonBox["transposition", BaseStyle->"Hyperlink", ButtonData:>"DefClass Transp cipher"], ", ", "\n\t", ButtonBox["Triple DES", BaseStyle->"Hyperlink", ButtonData:>"DefBlock Triple DES"], ", ", "\n\t", ButtonBox["unconditionally secure", BaseStyle->"Hyperlink", ButtonData:>"DefShann uncond secure"], ", ", "\n\t", ButtonBox["Vernam", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vernam"], ", ", "\n\t", ButtonBox["Vigen\[EGrave]re", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], ", ", "\ncurve\n\t", ButtonBox["anomalous", BaseStyle->"Hyperlink", ButtonData:>"DefEllip anomalous"], ", ", "\n\t", ButtonBox["elliptic", BaseStyle->"Hyperlink", ButtonData:>"DefEllip elliptic curve"], ", ", "\n\t", ButtonBox["singular", BaseStyle->"Hyperlink", ButtonData:>"DefEllip singular"], ", ", "\n\t", ButtonBox["supersingular", BaseStyle->"Hyperlink", ButtonData:>"DefEllip supersingular"], ", ", "\n", ButtonBox["cyclic group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], ", ", "\n", ButtonBox["cyclotomic polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cycl Pol"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["D", "Section"], Cell[TextData[{ ButtonBox["data compression", BaseStyle->"Hyperlink", ButtonData:>"DefHuff data compress"], ", ", "\n", "\t", ButtonBox["Huffman", BaseStyle->"Hyperlink", ButtonData:>"AlgHuff Huffman"], ", ", "\n", "\t", ButtonBox["Lempel-Ziv", BaseStyle->"Hyperlink", ButtonData:>"SectHuff Lempel-Ziv"], ", ", "\n", "\t", ButtonBox["universal data compression", BaseStyle->"Hyperlink", ButtonData:>"DefHuff univ data comp"], ", ", "\n", ButtonBox["Data Encryption Standard", BaseStyle->"Hyperlink", ButtonData:>"DefBlock DES"], ", ", "\n", ButtonBox["deception", BaseStyle->"Hyperlink", ButtonData:>"DefAuth deception"], ", ", "\ndecoding", "\n", "\t", ButtonBox["algorithm", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], ", ", "\n", "\t", ButtonBox["information set", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl Inf Set Dec"], ", ", "\n", ButtonBox["decryption", BaseStyle->"Hyperlink", ButtonData:>"DefIntro encryption"], ", ", "\ndegree of\n\t ", ButtonBox["field element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB degree of element"], ", ", "\n", "\t", ButtonBox["polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB degree"], ", ", "\n", ButtonBox["density", BaseStyle->"Hyperlink", ButtonData:>"DefKnap density"], " of a knapsack, ", "\n", ButtonBox["dependent", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear Dep"], " (linearly), ", "\n", ButtonBox["depth", BaseStyle->"Hyperlink", ButtonData:>"DefAuth OA"], " (of an orthogonal array), ", "\n", ButtonBox["derivative", BaseStyle->"Hyperlink", ButtonData:>"DefEllip derivative"], ", ", "\n", ButtonBox["DES", BaseStyle->"Hyperlink", ButtonData:>"DefBlock DES"], ", ", "\n", ButtonBox["dictionary", BaseStyle->"Hyperlink", ButtonData:>"DefHuff dictionary"], ", ", "\n", ButtonBox["differential cryptanalysis", BaseStyle->"Hyperlink", ButtonData:>"DefBlock lin and diff crypt"], " (for block ciphers), ", "\n", ButtonBox["Diffie-Hellman key exchange protocol", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], ", ", "\n", ButtonBox["Diffie-Hellman key exchange protocol", BaseStyle->"Hyperlink", ButtonData:>"TableEllip Diffie Hellman"], " over elliptic curves, ", "\ndigital signature schemes", "\n", "\t", ButtonBox["Digital Signature Standard", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr DSS"], ", ", "\n", "\t", ButtonBox["ElGamal", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal signature"], ", ", "\n", "\t", ButtonBox["Nyberg-Rueppel", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Nyberg-R"], ", ", "\n", "\t", ButtonBox["RSA", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Signature"], ", ", "\n", "\t", ButtonBox["Schnorr", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Schnorr"], ", ", "\n", ButtonBox["Digital Signature Standard", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr DSS"], ", ", "\ndimension of ", "\n", "\t", ButtonBox["linear code", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], ", ", "\n", "\t", ButtonBox["vector space", BaseStyle->"Hyperlink", ButtonData:>"DefAppB dimension"], ", ", "\n", ButtonBox["discrete logarithm", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr dis log prob"], " problem, ", "\n", ButtonBox["discrete logarithm", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Discr Log Prob"], " problem over elliptic curves, ", "\ndistance", "\n", "\t", ButtonBox["Hamming", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], " (between codewords), ", "\n", "\t", ButtonBox["minimum", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl Goppa code"], " (of a code), ", "\n", "\t", ButtonBox["unicity", BaseStyle->"Hyperlink", ButtonData:>"DefShann unicity dist"], " (of a cryptosystem), ", "\n", ButtonBox["distributive", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ring"], ", ", "\ndivide", "\n", "\t", ButtonBox["integer", BaseStyle->"Hyperlink", ButtonData:>"DefAppA divide"], ", ", "\n", "\t", ButtonBox["polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], ", " }], "Text", PageBreakBelow->True, GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["E", "Section"], Cell[TextData[{ ButtonBox["ElGamal", BaseStyle->"Hyperlink", ButtonData:>"SubsDiscr ElGamal"], " public key cryptosystems, ", "\n\t", ButtonBox["secrecy scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal secrecy"], ", ", "\n\t", ButtonBox["signature scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal signature"], ", ", "\n", ButtonBox["elliptic curve", BaseStyle->"Hyperlink", ButtonData:>"DefEllip elliptic curve"], ", ", "\n", ButtonBox["encryption", BaseStyle->"Hyperlink", ButtonData:>"DefIntro encryption"], ", ", "\n", ButtonBox["Enigma", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Enigma"], ", ", "\n", ButtonBox["entropy", BaseStyle->"Hyperlink", ButtonData:>"DefShann entropy"], ", ", "\n\t", ButtonBox["conditional", BaseStyle->"Hyperlink", ButtonData:>"DefShann cond entropy"], ", ", "\nequivalence\n\t", ButtonBox["class", BaseStyle->"Hyperlink", ButtonData:>"DefAppB equiv class"], ", ", "\n\t", ButtonBox["relation", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Equiv Rel"], ", ", "\n", ButtonBox["equivocation", BaseStyle->"Hyperlink", ButtonData:>"DefShann cond entropy"], " (conditional entropy), ", "\n", ButtonBox["error-correcting capability", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], ", ", "\nEuclid\n\t", ButtonBox["algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA Simple Euclid"], " (simple version), ", "\n\t", ButtonBox["algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], " (extended version), ", "\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Euclid of Alexandria"], ", ", "\n\t", ButtonBox["theorem of", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euclid"], ", ", "\nEuler\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Leonhard Euler"], ", ", "\n\t", ButtonBox["theorem of", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler"], ", ", "\n\t", ButtonBox["totient function", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], ", ", "\n", ButtonBox["exhaustive", BaseStyle->"Hyperlink", ButtonData:>"DefClass exh key search"], " key search, ", "\n", ButtonBox["expansion factor", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Expansion factor"], " (of a visual secret sharing scheme), ", "\n", ButtonBox["extension field", BaseStyle->"Hyperlink", ButtonData:>"DefAppB ext field"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["F", "Section", ParagraphSpacing->{0, 0}, TabSpacings->2], Cell[TextData[{ "factorization algorithms\n\t", ButtonBox["Pollard p-1", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard p-1"], ", ", "\n\t", ButtonBox["Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], ButtonBox["\[CurlyRho]", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], ", ", "\n\t", ButtonBox["quadratic sieve", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Q Sieve"], ", ", "\n\t", ButtonBox["random squares method", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Random Square"], ", ", "\n", ButtonBox["Fano plane", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Fano"], ", ", "\nfeedback\n\t", ButtonBox["coefficients", BaseStyle->"Hyperlink", ButtonData:>"DefShift feedb coeff"], ", ", "\n\t", ButtonBox["function", BaseStyle->"Hyperlink", ButtonData:>"DefShift State"], ", ", "\n\t", Cell[BoxData[ FormBox[ ButtonBox["mode", BaseStyle->"Hyperlink", ButtonData:>"FigBlock CFM"], TraditionalForm]]], ", ", "\n\t", ButtonBox["shift register", BaseStyle->"Hyperlink", ButtonData:>"DefShift State"], ", ", "\nFermat\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Pierre de Fermat"], ", ", "\n\t", ButtonBox["theorem of", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], ", ", "\n", ButtonBox["Fibonacci", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Fibonnaci"], " numbers, ", "\n", ButtonBox["field", BaseStyle->"Hyperlink", ButtonData:>"DefAppB field"], ", ", "\n\t", ButtonBox["extension", BaseStyle->"Hyperlink", ButtonData:>"DefAppB ext field"], ", ", "\n\t", ButtonBox["ground", BaseStyle->"Hyperlink", ButtonData:>"DefAppB ext field"], ", ", "\n\t", ButtonBox["sub-", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subfield"], ", ", "\n", ButtonBox["finite", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], ", ", "\n", ButtonBox["Floyd's cycle-finding", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Floyd"], " algorithm, ", "\nfunction\n\t", ButtonBox["feedback", BaseStyle->"Hyperlink", ButtonData:>"DefShift State"], ", ", "\n\t", ButtonBox["generating", BaseStyle->"Hyperlink", ButtonData:>"DefShift power series"], ", ", "\n\t", ButtonBox["hash", BaseStyle->"Hyperlink", ButtonData:>"DefAuth hash"], ", ", "\n\t", ButtonBox["M\[ODoubleDot]bius", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Mobius function"], ", ", "\n\t", ButtonBox["multiplicative", BaseStyle->"Hyperlink", ButtonData:>"DefAppA multiplicative"], ", ", "\n\t", ButtonBox["one-way", BaseStyle->"Hyperlink", ButtonData:>"DefPubl one-way"], ", ", "\n\t\t", ButtonBox["one-way", BaseStyle->"Hyperlink", ButtonData:>"DefAuth one-way"], " function for hash functions, ", "\n\t\t", ButtonBox["trapdoor", BaseStyle->"Hyperlink", ButtonData:>"DefPubl trapdoor"], ", ", "\n", ButtonBox["Fundamental Theorem of Number Theory", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fundamental"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["G", "Section", ParagraphSpacing->{0, 0}, TabSpacings->2], Cell[TextData[{ "Galois\n\t", ButtonBox["field", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], ", ", "\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Evariste Galois"], ", ", "\n", ButtonBox["gap, ", BaseStyle->"Hyperlink", ButtonData:>"DefShift Gap Block"], "\nGauss \n\t", ButtonBox["algorithm", BaseStyle->"Hyperlink", ButtonData:>"ProbAppB Gauss"], " (to find a primitive element), ", "\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Johann Carl Friedrich Gauss"], ", ", "\n\t", ButtonBox["quadratic reciprocity law", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Quad Reci Gauss"], ", ", "\ngcd, see greatest common divisor\ngenerate a\n\t", ButtonBox["group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], ", ", "\n\t", ButtonBox["ideal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB gen ideal"], ", ", "\n", ButtonBox["generating function", BaseStyle->"Hyperlink", ButtonData:>"DefShift power series"], ", ", "\n", ButtonBox["generator", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " of finite field, ", "\n", ButtonBox["generator matrix", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], " of a linear code, ", "\n", ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], ", ", "\n", ButtonBox["Golomb's randomness postulates", BaseStyle->"Hyperlink", ButtonData:>"PostShift Golomb"], ", ", "\n", ButtonBox["Goppa code", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], ", ", "\n", ButtonBox["Gram-Schmidt algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgKnap Gram-Schmidt"], " (for orthogonalization process), ", "\ngreatest common divisor of\n\t", ButtonBox["integers", BaseStyle->"Hyperlink", ButtonData:>"DefAppA GCD"], ", ", "\n\t", ButtonBox["polynomials", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], ", ", "\n", ButtonBox["ground field", BaseStyle->"Hyperlink", ButtonData:>"DefAppB ext field"], ", ", "\n", ButtonBox["group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], ", ", "\n\t", ButtonBox["Abelian", BaseStyle->"Hyperlink", ButtonData:>"DefAppB additive group"], ", ", "\n\t", ButtonBox["additive", BaseStyle->"Hyperlink", ButtonData:>"DefAppB additive group"], ", ", "\n\t", ButtonBox["cyclic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], ", ", "\n\t", ButtonBox["multiplicative", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], ", ", "\n\t", ButtonBox["sub-", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subgroup"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["H", "Section"], Cell[TextData[{ ButtonBox["Hagelin", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Hagelin"], " rotor machine, ", "\n", ButtonBox["Hamming distance", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], " (between codewords), ", "\n", ButtonBox["hash", BaseStyle->"Hyperlink", ButtonData:>"DefAuth hash"], " code/function, ", "\n", ButtonBox["Hasse", BaseStyle->"Hyperlink", ButtonData:>"TheoEllip Hasse"], " (theorem on the number of points on a curve), ", "\n", ButtonBox["homogenize", BaseStyle->"Hyperlink", ButtonData:>"DefEllip homogenize"], ", ", "\n", ButtonBox["Huffman", BaseStyle->"Hyperlink", ButtonData:>"AlgHuff Huffman"], " algorithm (for data compression)", ", " }], "Text", PageBreakBelow->False, GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["I", "Section", PageBreakAbove->True, PageBreakBelow->Automatic], Cell[TextData[{ ButtonBox["IDEA", BaseStyle->"Hyperlink", ButtonData:>"DefBlock IDEA"], ", ", "\n", ButtonBox["ideal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ideal"], ", ", "\n", ButtonBox["ideal secret sharing scheme", BaseStyle->"Hyperlink", ButtonData:>"DefSecret ideal SSS"], ", ", "\nidentity verification protocol", "\n", "\t", ButtonBox["based on a block cipher", BaseStyle->"Hyperlink", ButtonData:>"FigBlock identity ver"], ", ", "\n", "\t", ButtonBox["Fiat-Shamir", BaseStyle->"Hyperlink", ButtonData:>"FigProt Fiat-Shamir"], ", ", "\n", "\t", ButtonBox["Schnorr", BaseStyle->"Hyperlink", ButtonData:>"FigProt Schnorr"], ", ", "\n", ButtonBox["impersonation", BaseStyle->"Hyperlink", ButtonData:>"DefAuth imp attack"], " attack, ", "\n", ButtonBox["incidence matrix", BaseStyle->"Hyperlink", ButtonData:>"DefAuth incid matr"], ", ", "\n", ButtonBox["incidence of coincidences", BaseStyle->"Hyperlink", ButtonData:>"SubSClass incid of coinc"], ", ", "\n", ButtonBox["inclusion and exclusion", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Incl-Excl"], ", principle of, ", "\n", ButtonBox["independent", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear Dep"], " (linearly), ", "\n", ButtonBox["index", BaseStyle->"Hyperlink", ButtonData:>"DefAuth OA"], " (of an orthogonal array), ", "\n", ButtonBox["index-calculus", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Index Calc"], " method (for taking discrete logarithms), ", "\ninequality", "\n", "\t", ButtonBox["Kraft", BaseStyle->"Hyperlink", ButtonData:>"FormHuff Kraft"], ", ", "\n", "\t", ButtonBox["MacMillan", BaseStyle->"Hyperlink", ButtonData:>"TheoHuff McMillan"], ", ", "\n", ButtonBox["information", BaseStyle->"Hyperlink", ButtonData:>"DefShann information"], ", ", "\n", "\t", ButtonBox["mutual", BaseStyle->"Hyperlink", ButtonData:>"DefShann mutual inf"], ", ", "\n", "\t", ButtonBox["rate", BaseStyle->"Hyperlink", ButtonData:>"DefSecret ideal SSS"], " (of a secret sharing scheme), ", "\n", "\t", ButtonBox["set decoding", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl Inf Set Dec"], " (of a linear code), ", "\n", ButtonBox["inner product", BaseStyle->"Hyperlink", ButtonData:>"DefAppB inner product"], ", ", "\n", "\t", ButtonBox["standard", BaseStyle->"Hyperlink", ButtonData:>"DefAppB pos def"], ", ", "\n", ButtonBox["in-phase autocorrelation", BaseStyle->"Hyperlink", ButtonData:>"DefShift AC in/out"], ", ", "\n", ButtonBox["instantaneous code", BaseStyle->"Hyperlink", ButtonData:>"DefHuff prefix code"], ", ", "\n", ButtonBox["integrity", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Integrity"], ", ", "\ninverse ", ButtonBox["(in general)", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], ", ", "\n", "\t", ButtonBox["multiplicative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB mult inverse"], ", ", "\n", ButtonBox["inversion formula", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Moebius Inv"], " of M\[ODoubleDot]bius", ", ", "\n", ButtonBox["irreducible", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], " (polynomial), ", "\n", ButtonBox["isomorphic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB isomorphic"], " (of two fields)", ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["J", "Section"], Cell[TextData[{ "Jacobi\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Karl Gustav Jacob Jacobi"], ", ", "\n\t", ButtonBox["symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], ", ", "\n", ButtonBox["joint distribution", BaseStyle->"Hyperlink", ButtonData:>"DefShann joint dis"], ", ", "\n", ButtonBox["Johansson", BaseStyle->"Hyperlink", ButtonData:>"SubsAuth EC AC"], " construction of A-code from EC-code, " }], "Text", PageBreakBelow->False, GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["K", "Section", PageBreakAbove->False], Cell[TextData[{ ButtonBox["Kasiski's method", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Kasiski"], ", ", "\n", ButtonBox["key", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], ", ", "\n\t", ButtonBox["exhaustive search", BaseStyle->"Hyperlink", ButtonData:>"DefClass exh key search"], " , ", "\n\t", ButtonBox["space", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], ", ", "\n\t", ButtonBox["exchange system", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr key exch"], ", ", "\n\t\t", ButtonBox["Diffie-Hellman", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], " (modular arithmetic), ", "\n\t\t", ButtonBox["Diffie-Hellman", BaseStyle->"Hyperlink", ButtonData:>"TableEllip Diffie Hellman"], " over elliptic curves, ", "\nknapsack\n\t", ButtonBox["cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"TableKnap knapsack"], ", ", "\n\t", ButtonBox["problem", BaseStyle->"Hyperlink", ButtonData:>"DefKnap knapsack"], ", ", "\n", ButtonBox["known plaintext attack", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Known Pl. Att."], ", ", "\n", ButtonBox["Kolmogorov's consistency condition", BaseStyle->"Hyperlink", ButtonData:>"PropIntro Kolmogorov"], ", ", "\n", ButtonBox["Kraft", BaseStyle->"Hyperlink", ButtonData:>"FormHuff Kraft"], " inequality, " }], "Text", PageBreakBelow->False, GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["L", "Section", PageBreakAbove->False], Cell[TextData[{ Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{ FormBox[ SuperscriptBox["L", "3"], TraditionalForm], "-", "algorithm"}], BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 reduction"], TraditionalForm]]], " (for a lattice basis reduction), ", "\n", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{ FormBox[ SuperscriptBox["L", "3"], TraditionalForm], "-", "attack"}], BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 attack"], TraditionalForm]]], " (on the knapsack system), ", "\n", ButtonBox["Lagarias and Odlyzko", BaseStyle->"Hyperlink", ButtonData:>"SectKnap L3-attack"], " attack, ", "\n", ButtonBox["LaGrange", BaseStyle->"Hyperlink", ButtonData:>"FormThresh LaGrange"], " interpolation formula, ", "\n", ButtonBox["language", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Language"], ", ", "\n", ButtonBox["lattice", BaseStyle->"Hyperlink", ButtonData:>"DefKnap lattice"], ", ", "\nlcm, see least common multiple\nleast common multiple\n\t", ButtonBox["for integers", BaseStyle->"Hyperlink", ButtonData:>"DefAppA LCM"], ", ", "\n\t", ButtonBox["for polynomials", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], ", ", "\nLegendre\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Adrien-Marie Legendre"], ", ", "\n\t", ButtonBox["symbol", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"], ", ", "\n", ButtonBox["Lempel-Ziv", BaseStyle->"Hyperlink", ButtonData:>"SectHuff Lempel-Ziv"], " data compression technique, ", "\nlength of\n\t", ButtonBox["addition chain", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr addition chain"], ", ", "\n\t", ButtonBox["code", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], ", ", "\n\t", ButtonBox["feedback shift register", BaseStyle->"Hyperlink", ButtonData:>"DefShift State"], ", ", "\n\t", ButtonBox["vector", BaseStyle->"Hyperlink", ButtonData:>"DefAppB pos def"], ", ", "\n", ButtonBox["LFSR", BaseStyle->"Hyperlink", ButtonData:>"DefShift LFSR"], ", ", "\n", ButtonBox["line", BaseStyle->"Hyperlink", ButtonData:>"DefAuth point and line"], " (in projective plane), ", "\nlinear\n\t", ButtonBox["combination", BaseStyle->"Hyperlink", ButtonData:>"DefAppB span"], ", ", "\n\t", ButtonBox["complexity", BaseStyle->"Hyperlink", ButtonData:>"DefShift Lin Compl"], ", ", "\n\t", ButtonBox["congruence relation", BaseStyle->"Hyperlink", ButtonData:>"DefAppA linear CR"], ", ", "\n\t", ButtonBox["cryptanalysis", BaseStyle->"Hyperlink", ButtonData:>"DefBlock lin and diff crypt"], " (for block ciphers), ", "\n\t", ButtonBox["equivalence", BaseStyle->"Hyperlink", ButtonData:>"DefShift Lin Compl"], ", ", "\n\t", ButtonBox["feedback shift register", BaseStyle->"Hyperlink", ButtonData:>"DefShift LFSR"], ", ", "\n\t", ButtonBox["(sub-)space", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear S S"], ", ", "\nlinearly\n\t", ButtonBox["dependent", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear Dep"], ", ", "\n\t", ButtonBox["independent", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear Dep"], ", ", "\n", ButtonBox["linked list", BaseStyle->"Hyperlink", ButtonData:>"DefHuff dictionary"], ", ", "\n", ButtonBox["logarithm system", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], ", ", "\n", ButtonBox["log table", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Log Table"], ", ", "\n", ButtonBox["look-ahead buffer", BaseStyle->"Hyperlink", ButtonData:>"DefHuff sliding"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["M", "Section"], Cell[TextData[{ ButtonBox["MAC", BaseStyle->"Hyperlink", ButtonData:>"DefAuth MAC"], " (message authentication code), ", "\n", ButtonBox["MacMillan inequality", BaseStyle->"Hyperlink", ButtonData:>"TheoHuff McMillan"], ", ", "\n", ButtonBox["Markov process", BaseStyle->"Hyperlink", ButtonData:>"ExamIntro Markov"], ", ", "\nmatrix\n\t", ButtonBox["authentication", BaseStyle->"Hyperlink", ButtonData:>"DefAuth scheme"], ", ", "\n\t", ButtonBox["incidence", BaseStyle->"Hyperlink", ButtonData:>"DefAuth incid matr"], ", ", "\n\t", ButtonBox["generator", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl codeword"], ", ", "\n\t", ButtonBox["parity check", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl parity ch ma"], ", ", "\n", ButtonBox["maximal element", BaseStyle->"Hyperlink", ButtonData:>"DefSecret minimal el"], " (of an access structure), ", "\n", ButtonBox["message authentication code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth MAC"], ", ", "\n", ButtonBox["microwave attack", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Microwave"], " (physical attack of RSA), ", "\n", ButtonBox["Miller-Rabin", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Miller-Rabin"], " (probabilistic primality test), ", "\nminimal\n\t", ButtonBox["characteristic polynomial", BaseStyle->"Hyperlink", ButtonData:>"TheoShift Min Char Pol"], ", ", "\n\t", ButtonBox["distance", BaseStyle->"Hyperlink", ButtonData:>"TheoMcEl Goppa"], " (of a code), ", "\n\t", ButtonBox["element", BaseStyle->"Hyperlink", ButtonData:>"DefSecret minimal el"], " (of an access structure), ", "\n\t", ButtonBox["polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], ", ", "\n", ButtonBox["minimum distance", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl Goppa code"], " (of a code), ", "\nM\[ODoubleDot]bius\n", ButtonBox["\tfunction", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Mobius function"], ", ", "\n\t", ButtonBox["inversion formula", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Moebius Inv"], ", ", "\n\t", ButtonBox["multiplicative inversion formula", BaseStyle->"Hyperlink", ButtonData:>"CorAppA Mult Moebius"], ", ", "\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: August Ferdinand M\[ODoubleDot]bius"], ", ", "\nmodes of encryption of a block cipher\n\t", ButtonBox["cipher block chaining", BaseStyle->"Hyperlink", ButtonData:>"DefBlock CBC"], ", ", "\n\t", ButtonBox["cipher feedback mode", BaseStyle->"Hyperlink", ButtonData:>"DefBlock CFM"], ", ", "\n\t", ButtonBox["codebook", BaseStyle->"Hyperlink", ButtonData:>"DefBlock codebook"], ", ", "\n", ButtonBox["modulo", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Congr Rel"], ", ", "\n", ButtonBox["monic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB monic"], " (polynomial), ", "\nmultiplicative\n\t", ButtonBox["function", BaseStyle->"Hyperlink", ButtonData:>"DefAppA multiplicative"], ", ", "\n\t", ButtonBox["group", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], ", ", "\n\t", ButtonBox["inverse", BaseStyle->"Hyperlink", ButtonData:>"DefAppB mult inverse"], ", ", "\n\t", ButtonBox["inversion formula", BaseStyle->"Hyperlink", ButtonData:>"CorAppA Mult Moebius"], " of M\[ODoubleDot]bius, ", "\n\t", ButtonBox["order", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " of a group element, ", "\n", ButtonBox["mutual information", BaseStyle->"Hyperlink", ButtonData:>"DefShann mutual inf"], ", " }], "Text", PageBreakBelow->False, GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["N", "Section"], Cell[TextData[{ ButtonBox["n-gram", BaseStyle->"Hyperlink", ButtonData:>"DefIntro bigram"], ", ", "\n", ButtonBox["Niederreiter", BaseStyle->"Hyperlink", ButtonData:>"TableMcEl Niederreiter"], " encryption scheme, ", "\n", ButtonBox["non-privileged subset", BaseStyle->"Hyperlink", ButtonData:>"DefSecret access struc"], " of an access structure, ", "\n", ButtonBox["non-singular curve", BaseStyle->"Hyperlink", ButtonData:>"DefEllip singular"], ", ", "\n", ButtonBox["NP-complete", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl NP-complete"], " problem, ", "\n", ButtonBox["NQR", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], ", ", "\n", ButtonBox["n-th root of unity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], ", ", "\n\t ", ButtonBox["primitive", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], ", ", "\n", ButtonBox["Nyberg-Rueppel", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Nyberg-R"], " signature scheme", ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["O", "Section", PageBreakAbove->False, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell[TextData[{ ButtonBox["one-time pad", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vernam"], ", ", "\none-way function for\n\t", ButtonBox["hash codes", BaseStyle->"Hyperlink", ButtonData:>"DefAuth one-way"], ", ", "\n\t", ButtonBox["public key cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"DefPubl one-way"], ", ", "\n", ButtonBox["operation(s)", BaseStyle->"Hyperlink", ButtonData:>"DefAppB operation"], ", ", "\n\t", ButtonBox["Abelian", BaseStyle->"Hyperlink", ButtonData:>"DefAppB additive group"], ", ", "\n\t", ButtonBox["associative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], ", ", "\n\t", ButtonBox["commutative,", BaseStyle->"Hyperlink", ButtonData:>"DefAppB operation"], " \n\t", ButtonBox["distributive", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ring"], ", ", "\norder of\n\t", ButtonBox["cyclic group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], ", ", "\n\t", ButtonBox["element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " in a group, ", "\n\t", ButtonBox["finite field", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], ", ", "\n\t", ButtonBox["multiplicative", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " (of a group element), ", "\n\t", ButtonBox["projective plane", BaseStyle->"Hyperlink", ButtonData:>"DefAuth order PG2"], ", ", "\n", ButtonBox["orthogonal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB orthogonal"], ", ", "\n\t", ButtonBox["array", BaseStyle->"Hyperlink", ButtonData:>"DefAuth OA"], ", ", "\n\t", ButtonBox["complement", BaseStyle->"Hyperlink", ButtonData:>"DefAppB orth compl"], ", ", "\n\t", ButtonBox["self-", BaseStyle->"Hyperlink", ButtonData:>"DefAppB self orth"], ", ", "\n", ButtonBox["out-of-phase autocorrelation", BaseStyle->"Hyperlink", ButtonData:>"DefShift AC in/out"], ", " }], "Text", PageBreakBelow->False, GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["P", "Section", PageBreakAbove->False], Cell[TextData[{ ButtonBox["parity check matrix", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl parity ch ma"], " of a linear code, ", "\n", ButtonBox["passive", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Cryptanalist passive"], " cryptanalist, ", "\nperfect\n\t", ButtonBox["access structure", BaseStyle->"Hyperlink", ButtonData:>"DefSecret perfect SSS"], ", ", "\n\t", ButtonBox["authentication code", BaseStyle->"Hyperlink", ButtonData:>"DefAuth square root"], ", ", "\n\t", ButtonBox["secrecy", BaseStyle->"Hyperlink", ButtonData:>"DefShann uncond secure"], ", ", "\nperiod of\n\t", ButtonBox["polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefShift period pol"], ", ", "\n\t", ButtonBox["sequence", BaseStyle->"Hyperlink", ButtonData:>"DefShift Period"], ", ", "\n", ButtonBox["periodic", BaseStyle->"Hyperlink", ButtonData:>"DefShift Period"], " sequence, ", "\n", ButtonBox["plaintext", BaseStyle->"Hyperlink", ButtonData:>"DefIntro plaintext"], ", ", "\n\t", ButtonBox["source", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Plaint Source"], ", ", "\nplane\n\t", ButtonBox["Fano", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Fano"], ", ", "\n\t", ButtonBox["projective", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], ", ", "\n", ButtonBox["Playfair cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Playfair"], ", ", "\n", ButtonBox["PN sequence", BaseStyle->"Hyperlink", ButtonData:>"DefShift PN Seq"], ", ", "\n", ButtonBox["Pohlig-Hellman", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Pohlig Hellman"], " algorithm, ", "\n", ButtonBox["point", BaseStyle->"Hyperlink", ButtonData:>"DefAuth point and line"], " (in projective plane), ", "\n", ButtonBox["point at infinity", BaseStyle->"Hyperlink", ButtonData:>"DefEllip elliptic curve"], ", ", "\n", ButtonBox["Pollard p-1", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard p-1"], " method for factoring integers, ", "\n", ButtonBox["Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], ButtonBox["\[CurlyRho]", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], " method for factoring integers, ", "\n", ButtonBox["Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"], ButtonBox["\[Rho]", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"], " method for taking discrete logarithms, ", "\n", ButtonBox["polyalphabetic substitution", BaseStyle->"Hyperlink", ButtonData:>"DefClass Poly Subst"], ", ", "\n", ButtonBox["polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB polyn"], ", ", "\n\t", ButtonBox["characteristic", BaseStyle->"Hyperlink", ButtonData:>"DefShift Char Pol"], ", ", "\n\t", ButtonBox["cyclotomic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cycl Pol"], ", ", "\n\t", ButtonBox["minimal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Min Pol"], ", ", "\n\t", ButtonBox["minimal characteristic", BaseStyle->"Hyperlink", ButtonData:>"TheoShift Min Char Pol"], ", ", "\n\t", ButtonBox["monic", BaseStyle->"Hyperlink", ButtonData:>"DefAppB monic"], ", ", "\n\t", ButtonBox["primitive", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim Pol"], ", ", "\n\t", ButtonBox["reciprocal", BaseStyle->"Hyperlink", ButtonData:>"FormShift Reciprocal"], ", ", "\n", ButtonBox["positive definite", BaseStyle->"Hyperlink", ButtonData:>"DefAppB pos def"], ", ", "\n", ButtonBox["power series", BaseStyle->"Hyperlink", ButtonData:>"DefShift power series"], ", ", "\n", ButtonBox["prefix code", BaseStyle->"Hyperlink", ButtonData:>"DefHuff prefix code"], ", ", "\n", ButtonBox["prime", BaseStyle->"Hyperlink", ButtonData:>"DefAppA prime"], ", ", "\n\t", ButtonBox["number theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Prime Numb Th"], ", ", "\n\t", ButtonBox["safe", BaseStyle->"Hyperlink", ButtonData:>"DefRSA Strong prime"], ", ", "\nprimality test\n\t", ButtonBox["Cohen and Lenstra", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Lenstra small"], " (deterministic; version1), ", "\n\t", ButtonBox["Miller-Rabin", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Miller-Rabin"], " (probabilistic test), ", "\n\t", ButtonBox["Solovay and Strassen", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Solovay"], " (probabilistic), ", "\nprimitive\n\t", ButtonBox["element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], ", ", "\n\t", ButtonBox["n-th root of unity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], ", ", "\n\t", ButtonBox["polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim Pol"], ", ", "\n", ButtonBox["principal ideal ring, ", BaseStyle->"Hyperlink", ButtonData:>"DefAppB princ ideal"], "\nPrinciple of ", ButtonBox["inclusion and exclusion", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Incl-Excl"], ", ", "\n", ButtonBox["privacy", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Privacy"], ", ", "\n", ButtonBox["privileged subset", BaseStyle->"Hyperlink", ButtonData:>"DefSecret access struc"], " of an access structure, ", "\n", ButtonBox["product cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass product cipher"], ", ", "\n", ButtonBox["projective plane", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Proj Plane"], ", ", "\n\t", ButtonBox["authentication code", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAuth PG A-code"], ", ", "\n", ButtonBox["protocol", BaseStyle->"Hyperlink", ButtonData:>"DefProt protocol"], ", ", "\n\t", ButtonBox["Diffie-Hellman key exchange", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Diffie Hellman"], ", ", "\n\t", ButtonBox["Diffie-Hellman key exchange", BaseStyle->"Hyperlink", ButtonData:>"TableEllip Diffie Hellman"], " over elliptic curves, ", "\n\t", ButtonBox["identity verification", BaseStyle->"Hyperlink", ButtonData:>"FigBlock identity ver"], " (based on a block cipher), ", "\n\t", ButtonBox["Fiat-Shamir", BaseStyle->"Hyperlink", ButtonData:>"FigProt Fiat-Shamir"], " identity verification, ", "\n\t", ButtonBox["Schnorr's", BaseStyle->"Hyperlink", ButtonData:>"FigProt Schnorr"], " identification, ", "\n\t", ButtonBox["zero-knowledge", BaseStyle->"Hyperlink", ButtonData:>"DefProt zero-know"], ", ", "\n", ButtonBox["pseudo-random", BaseStyle->"Hyperlink", ButtonData:>"DefShift pseudo random"], ", ", "\n", ButtonBox["public key", BaseStyle->"Hyperlink", ButtonData:>"DefPubl Public Key"], " cryptosystem, " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["Q", "Section"], Cell[TextData[{ ButtonBox["QR", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], ", ", "\nquadratic\n\t", ButtonBox["congruence relation", BaseStyle->"Hyperlink", ButtonData:>"DefAppA quadratic CR"], ", ", "\n\t ", ButtonBox["non-residue", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], ", ", "\n\t ", ButtonBox["reciprocity law of Gauss", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Quad Reci Gauss"], ", ", "\n\t ", ButtonBox["residue", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], ", ", "\n\t ", ButtonBox["sieve", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Q Sieve"], " factoring algorithm, " }], "Text", PageBreakBelow->False, GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["R", "Section", PageBreakAbove->True], Cell[TextData[{ ButtonBox["Rabin cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Rabin"], ", ", "\n", ButtonBox["randomness postulates of Golomb", BaseStyle->"Hyperlink", ButtonData:>"PostShift Golomb"], ", ", "\n", ButtonBox["random squares method", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Random Square"], " for factoring, ", "\n", ButtonBox["RC5", BaseStyle->"Hyperlink", ButtonData:>"DefBlock RC5"], ", ", "\n", ButtonBox["reciprocal polynomial", BaseStyle->"Hyperlink", ButtonData:>"FormShift Reciprocal"], ", ", "\nreduced\n\t", ButtonBox["basis", BaseStyle->"Hyperlink", ButtonData:>"DefKnap reduced"], " (of a lattice), ", "\n\t", ButtonBox["residue system", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Reduced RS"], ", ", "\n", ButtonBox["reducible", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], " (polynomial), ", "\n", ButtonBox["reduction", BaseStyle->"Hyperlink", ButtonData:>"DefHuff reduction"], " process (in Huffman's algorithm), ", "\n", ButtonBox["redundancy", BaseStyle->"Hyperlink", ButtonData:>"DefShann redundancy"], " (in plaintext), ", "\n", ButtonBox["reflexivity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Equiv Rel"], " (of a relation), ", "\n", ButtonBox["relation", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Equiv Rel"], ", ", "\n\t", ButtonBox["equivalence", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Equiv Rel"], ", ", "\nresidue\n \t", ButtonBox["class ring", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Res Class Ring"], ", ", "\n \t", ButtonBox["complete", BaseStyle->"Hyperlink", ButtonData:>"DefAppA compl resid"], ", ", "\t\n \t", ButtonBox["quadratic", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], ", ", "\n\t", ButtonBox["quadratic non", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], ", ", "\nresponse in, ", "\n\t", ButtonBox["Fiat-Shamir protocol", BaseStyle->"Hyperlink", ButtonData:>"DefProt response"], ", ", "\n\t", ButtonBox["block cipher based", BaseStyle->"Hyperlink", ButtonData:>"DefBlock challenge"], " identity verification protocol, ", "\n", ButtonBox["ring", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Ring"], ", (in general), ", "\n\t", ButtonBox["principal ideal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB princ ideal"], ", ", "\n\t", ButtonBox["residue class", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Res Class Ring"], ", ", "\n\t", ButtonBox["sub-", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subring"], ", ", "\n", ButtonBox["root of unity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], "\nRSA, ", "\n\t", ButtonBox["privacy", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Privacy"], ", ", "\n\t", ButtonBox["signature", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Signature"], ", ", "\n\t", ButtonBox["signature and privacy", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Secr+Sign"], ", ", "\n", ButtonBox["run", BaseStyle->"Hyperlink", ButtonData:>"DefShift run"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["S", "Section"], Cell[TextData[{ ButtonBox["safe prime", BaseStyle->"Hyperlink", ButtonData:>"DefRSA Strong prime"], ", ", "\n", ButtonBox["scalar multiple", BaseStyle->"Hyperlink", ButtonData:>"DefEllip order"], " of point on an elliptic curve, ", "\nscheme\n\t ", ButtonBox["secrecy", BaseStyle->"Hyperlink", ButtonData:>"TablePubl Secrecy"], ", ", "\n\t\t", ButtonBox["ElGamal", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal secrecy"], ", ", "\n\t\t", ButtonBox["McEliece", BaseStyle->"Hyperlink", ButtonData:>"TableMcEl McEliece"], ", ", "\n\t\t", ButtonBox["RSA", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Privacy"], ", ", "\n\t", ButtonBox["secret sharing", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], ", ", "\n\t", ButtonBox["signature", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal signature"], " (ElGamal), ", "\n\t", ButtonBox["threshold", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Threshold"], ", ", "\n", ButtonBox["Schnorr's identification protocol", BaseStyle->"Hyperlink", ButtonData:>"FigProt Schnorr"], ", ", "\n", ButtonBox["search buffer", BaseStyle->"Hyperlink", ButtonData:>"DefHuff sliding"], ", ", "\n", ButtonBox["secret sharing", BaseStyle->"Hyperlink", ButtonData:>"DefSecret SSS"], " scheme, ", "\n\t", ButtonBox["ideal", BaseStyle->"Hyperlink", ButtonData:>"DefSecret ideal SSS"], ", ", "\n\t", ButtonBox["visual", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Visual SSS"], ", ", "\n", ButtonBox["secure channel", BaseStyle->"Hyperlink", ButtonData:>"DefIntro secure channel"], ", ", "\n", ButtonBox["Secure Hash Algorithm", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr SHA"], ", ", "\nsecurity\n\t", ButtonBox["computational", BaseStyle->"Hyperlink", ButtonData:>"DefAuth comp secure"], ", ", "\n\t", ButtonBox["unconditional", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Uncond secure"], ", ", "\n", ButtonBox["self-orthogonal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB self orth"], " (basis), ", "\n", ButtonBox["self-orthonormal", BaseStyle->"Hyperlink", ButtonData:>"DefAppB self orth"], " (basis), ", "\n", ButtonBox["Schnorr", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Schnorr"], " signature scheme, ", "\n", ButtonBox["Schnorr's Idenitification Protocol", BaseStyle->"Hyperlink", ButtonData:>"FigProt Schnorr"], ", ", "\n", ButtonBox["SHA", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr SHA"], " (Secure Hash Algorithm), ", "\n", ButtonBox["share", BaseStyle->"Hyperlink", ButtonData:>"DefSecret share"], ", ", "\n", ButtonBox["signature equation", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr sign eq."], ", ", "\n", ButtonBox["signature scheme", BaseStyle->"Hyperlink", ButtonData:>"TablePubl Signature"], ", ", "\n\t", ButtonBox["Digital Signature Standard", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr DSS"], ", ", "\n\t", ButtonBox["ElGamal", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal signature"], ", ", "\n\t", ButtonBox["Nyberg-Rueppel", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Nyberg-R"], ", ", "\n\t", ButtonBox["RSA", BaseStyle->"Hyperlink", ButtonData:>"TableRSA RSA Signature"], ", ", "\n\t", ButtonBox["Schnorr", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr Schnorr"], ", ", "\n", ButtonBox["simple substitution", BaseStyle->"Hyperlink", ButtonData:>"DefClass SimpleSubst"], ", ", "\nsingular\n\t", ButtonBox["curve", BaseStyle->"Hyperlink", ButtonData:>"DefEllip singular"], ", ", "\n\t", ButtonBox["point", BaseStyle->"Hyperlink", ButtonData:>"DefEllip singular"], ", ", "\n", ButtonBox["sliding window", BaseStyle->"Hyperlink", ButtonData:>"DefHuff sliding"], ", ", "\n", ButtonBox["smooth", BaseStyle->"Hyperlink", ButtonData:>"DefDiscr factor base"], " number, ", "\n", ButtonBox["Solovay and Strassen", BaseStyle->"Hyperlink", ButtonData:>"AlgRSA Solovay"], " probabilistic primality test, ", "\n", ButtonBox["source", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Plaint Source"], " (of plaintext), ", "\n", ButtonBox["source coding", BaseStyle->"Hyperlink", ButtonData:>"DefHuff data compress"], ", ", "\nspace\n \t", ButtonBox["linear sub-", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear S S"], ", ", "\n \t", ButtonBox["trivial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB trivial vs"], ", ", "\n \t", ButtonBox["vector", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Vector space"], ", ", "\n", ButtonBox["span", BaseStyle->"Hyperlink", ButtonData:>"DefAppB span"], ", ", "\n", ButtonBox["splitting", BaseStyle->"Hyperlink", ButtonData:>"DefHuff Splitting"], " process (in Huffman's algorithm), ", "\n", ButtonBox["square root", BaseStyle->"Hyperlink", ButtonData:>"SubSRSA Rabin decr"], " (taking them modulo a prime number), ", "\n", ButtonBox["square root bound", BaseStyle->"Hyperlink", ButtonData:>"DefAuth square root"], ", ", "\n", ButtonBox["standard basis", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Standard basis"], ", ", "\n", ButtonBox["standard inner product", BaseStyle->"Hyperlink", ButtonData:>"DefAppB pos def"], ", ", "\n", ButtonBox["state", BaseStyle->"Hyperlink", ButtonData:>"DefShift State"], ", ", "\n", ButtonBox["stationary", BaseStyle->"Hyperlink", ButtonData:>"DefIntro stationary"], ", ", "\n", ButtonBox["stream cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass stream cipher"], ", ", "\nstrong\n\t", ButtonBox["collision resistant", BaseStyle->"Hyperlink", ButtonData:>"DefAuth strong col res"], ", ", "\n\t", ButtonBox["liar", BaseStyle->"Hyperlink", ButtonData:>"DefRSA strong liar"], " (for primality), ", "\n\t", ButtonBox["witness", BaseStyle->"Hyperlink", ButtonData:>"DefRSA strong witness"], " (for compositeness), ", "\n", ButtonBox["subfield", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subfield"], ", ", "\n", ButtonBox["subgroup", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subgroup"], ", ", "\n", ButtonBox["subring", BaseStyle->"Hyperlink", ButtonData:>"DefAppB subring"], ", ", "\n", ButtonBox["subspace", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Linear S S"], " (linear), ", "\nsubstitution\n\t", ButtonBox["attack", BaseStyle->"Hyperlink", ButtonData:>"DefAuth subs attack"], ", ", "\n\t", ButtonBox["polyalphabetic", BaseStyle->"Hyperlink", ButtonData:>"DefClass Poly Subst"], ", ", "\n\t", ButtonBox["simple", BaseStyle->"Hyperlink", ButtonData:>"DefClass SimpleSubst"], ", ", "\n", ButtonBox["superincreasing", BaseStyle->"Hyperlink", ButtonData:>"DefKnap superincreasing"], " (sequence), ", "\n", ButtonBox["supersingular", BaseStyle->"Hyperlink", ButtonData:>"DefEllip supersingular"], " curve, ", "\nsymbol\n\t", ButtonBox["Jacobi", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Jacobi S"], ", ", "\n\t", ButtonBox["Legendre", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Legendre S"], ", ", "\n", ButtonBox["symmetric", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], " cryptosystem, ", "\n", ButtonBox["symmetry", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Equiv Rel"], " (of a relation), ", "\n", ButtonBox["syndrome", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl Syndrome"], " (of a received vector), " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["T", "Section"], Cell[TextData[{ "table\n\t", ButtonBox["log", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Log Table"], ", ", "\n\t", ButtonBox["Vigen\[EGrave]re", BaseStyle->"Hyperlink", ButtonData:>"TableClass Vigenere"], ", ", "\n", ButtonBox["tangent", BaseStyle->"Hyperlink", ButtonData:>"DefEllip tangent"], ", ", "\n", ButtonBox["text", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Language"], ", ", "\ntheorem\n\t", ButtonBox["Chinese Remainder", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], ", ", "\n\t", ButtonBox["Euclid, ", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euclid"], "\n\t", ButtonBox["Euler, ", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Euler"], "\n\t", ButtonBox["Fermat", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], ", ", "\n\t", ButtonBox["fundamental", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fundamental"], " (in number theory), ", "\n\t", ButtonBox["Wedderburn", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Wedderburn"], ", ", "\n", ButtonBox["threshold", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Threshold"], " scheme, ", "\n", ButtonBox["timing attack", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Timing"], " (physical attack of RSA), ", "\n", ButtonBox["trace", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Trace"], ", ", "\n", ButtonBox["transitivity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Equiv Rel"], " (of a relation), ", "\n", ButtonBox["transposition cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Transp cipher"], ", ", "\n", ButtonBox["trapdoor", BaseStyle->"Hyperlink", ButtonData:>"DefPubl trapdoor"], " function, ", "\n", ButtonBox["tri-gram", BaseStyle->"Hyperlink", ButtonData:>"DefIntro bigram"], ", ", "\n", ButtonBox["Triple DES", BaseStyle->"Hyperlink", ButtonData:>"DefBlock Triple DES"], ", ", "\n", ButtonBox["trivial vectorspace", BaseStyle->"Hyperlink", ButtonData:>"DefAppB trivial vs"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["U", "Section"], Cell[TextData[{ ButtonBox["U.D.", BaseStyle->"Hyperlink", ButtonData:>"DefHuffman U.D."], " code, ", "\nunconditionally secure", "\n", "\t", ButtonBox["cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"DefShann uncond secure"], ", ", "\n", "\t", ButtonBox["signature scheme", BaseStyle->"Hyperlink", ButtonData:>"DefAuth Uncond secure"], ", ", "\n", ButtonBox["unicity distance", BaseStyle->"Hyperlink", ButtonData:>"DefShann unicity dist"], ", ", "\n", ButtonBox["unique factorization theorem", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], ", ", "\n", ButtonBox["uniquely decodable", BaseStyle->"Hyperlink", ButtonData:>"DefHuffman U.D."], " code, ", "\n", ButtonBox["unit-element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB unit element"], ", ", "\n", ButtonBox["universal data compression", BaseStyle->"Hyperlink", ButtonData:>"DefHuff univ data comp"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["V", "Section"], Cell[TextData[{ ButtonBox["vector", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Vector"], ", ", "\n\t", ButtonBox["space", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Vector space"], ", ", "\n", ButtonBox["Vernam cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vernam"], ", ", "\nVigen\[EGrave]re\n\t", ButtonBox["cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], ", ", "\n\t", ButtonBox["table", BaseStyle->"Hyperlink", ButtonData:>"TableClass Vigenere"], ", ", "\nvisual\n\t", ButtonBox["secret sharing scheme", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Visual SSS"], ", ", "\n\t", ButtonBox["threshold value", BaseStyle->"Hyperlink", ButtonData:>"DefSecret Expansion factor"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["W", "Section"], Cell[TextData[{ ButtonBox["weak", BaseStyle->"Hyperlink", ButtonData:>"DefAuth weak col res"], " collision resistant, ", "\nWedderburn\n\t", ButtonBox["person", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Joseph Henry Maclagen Wedderburn"], ", ", "\n\t", ButtonBox["theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Wedderburn"], ", ", "\n", ButtonBox["Weierstrass equation", BaseStyle->"Hyperlink", ButtonData:>"FormEllip Weierstrass"], ", ", "\n", ButtonBox["weight, ", BaseStyle->"Hyperlink", ButtonData:>"DefMcEl weight"], "\n", ButtonBox["Wiener attack", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Wiener attack"], ", ", "\n", ButtonBox["witness", BaseStyle->"Hyperlink", ButtonData:>"DefProt witness"], " (in Fiat-Shamir protocol), " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["X", "Section"], Cell[TextData[{ ButtonBox["Xedni", BaseStyle->"Hyperlink", ButtonData:>"DefEllip Xedni"], " (method to solve the elliptic curve discrete logarithm problem), " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["Y", "Section"], Cell[TextData[{ " ", ButtonBox["y-reduced basis", BaseStyle->"Hyperlink", ButtonData:>"DefKnap reduced"], " (of a lattice), " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2], Cell["Z", "Section"], Cell[TextData[{ "zero element of\n\t", ButtonBox["additive group", BaseStyle->"Hyperlink", ButtonData:>"DefAppB additive group"], ", ", "\n\t", ButtonBox["vector space", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Vector space"], ", ", "\n", ButtonBox["zero-divisors", BaseStyle->"Hyperlink", ButtonData:>"DefAppB zero div"], ", ", "\n", ButtonBox["zero-knowledge protocol", BaseStyle->"Hyperlink", ButtonData:>"DefProt zero-know"], ", " }], "Text", GeneratedCell->True, ParagraphSpacing->{0, 0}, TabSpacings->2] }, Closed]] }, AutoGeneratedPackage->Automatic, ScreenStyleEnvironment->"Working", WindowToolbars->"EditBar", InitializationCellWarning->False, CellGrouping->Manual, WindowSize->{1074, 926}, WindowMargins->{{1, Automatic}, {Automatic, 0}}, WindowTitle->"FUNDAMENTALS OF CRYPTOLOGY", PrintingCopies->1, PrintingStartingPageNumber->3, PrintingPageRange->{344, 344}, PageHeaders->{{ Cell[ TextData[{ CounterBox["Page"]}], "PageNumber"], Inherited, Cell[ TextData[{"APPENDICES"}], "Header"]}, { Cell[ TextData[{"Elementary Number Theory"}], "Header"], Inherited, Cell[ TextData[{ CounterBox["Page"]}], "PageNumber"]}}, ShowCellLabel->False, DefaultNewCellStyle->"Text", PrivateFontOptions->{"FontType"->"Outline"}, Magnification->1.5, FrontEndVersion->"6.0 for Microsoft Windows (32-bit) (April 20, 2007)", StyleDefinitions->Notebook[{ Cell[ CellGroupData[{ Cell["Style Definitions", "Subtitle"], Cell[ "Modify the definitions below to change the default appearance of all \ cells in a given style. Make modifications to any definition using commands \ in the Format menu.", "Text"], Cell[ CellGroupData[{ Cell["Style Environment Names", "Section"], Cell[ StyleData[All, "Working"], PageWidth -> WindowWidth, ScriptMinSize -> 9], Cell[ StyleData[All, "Presentation"], PageWidth -> WindowWidth, ScriptMinSize -> 12, FontSize -> 16], Cell[ StyleData[All, "Condensed"], PageWidth -> WindowWidth, CellBracketOptions -> {"Margins" -> {1, 1}, "Widths" -> {0, 5}}, ScriptMinSize -> 8, FontSize -> 11], Cell[ StyleData[All, "Printout"], PageWidth -> PaperWidth, ScriptMinSize -> 7, FontSize -> 11, PrivateFontOptions -> {"FontType" -> "Outline"}]}, Closed]], Cell[ CellGroupData[{ Cell["Notebook Options", "Section"], Cell[ "The options defined for the style below will be used at the \ Notebook level.", "Text"], Cell[ StyleData["Notebook"], PageHeaders -> {{ Cell[ TextData[{"BASIC CONCEPTS IN CRYPTOLOGY"}], "Header"], None, Cell[ TextData[{ CounterBox["Page", CounterFunction :> Global`RomanNumeral]}], "PageNumber"]}, { Cell[ TextData[{ CounterBox[ "Chapter", CounterFunction :> (Part[{"Contents", "Preface"}, #]& )]}], "Header"], None, Cell[ TextData[{ CounterBox["Page", CounterFunction :> Global`RomanNumeral]}], "PageNumber"]}}, PageHeaderLines -> {True, True}, PrintingOptions -> { "FacingPages" -> True, "FirstPageHeader" -> True}, CellFrameLabelMargins -> 6, StyleMenuListing -> None]}, Open]], Cell[ CellGroupData[{ Cell["Styles for Headings", "Section"], Cell[ CellGroupData[{ Cell[ StyleData["Title"], ShowCellBracket -> False, CellMargins -> {{0, 0}, {0, 0}}, PageBreakBelow -> False, LineSpacing -> {1, 0}, CounterIncrements -> "Title", CounterAssignments -> {{"Section", 0}, {"Equation", 0}, { "Figure", 0}, {"Subtitle", 0}, {"Subsubtitle", 0}}, FontSize -> 24, FontColor -> GrayLevel[1], Background -> RGBColor[0.571389, 0.19675, 0.570504]], Cell[ StyleData["Title", "Presentation"], CellMargins -> {{0, 0}, {0, 0}}, LineSpacing -> {1, 0}, FontSize -> 44], Cell[ StyleData["Title", "Condensed"], CellMargins -> {{0, 0}, {0, 0}}, FontSize -> 20], Cell[ StyleData["Title", "Printout"], CellMargins -> {{0, 0}, {0, 0}}, FontSize -> 24, FontTracking -> "Plain", FontColor -> GrayLevel[0], Background -> GrayLevel[1]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Subtitle"], ShowCellBracket -> False, CellMargins -> {{0, 0}, {0, 0}}, PageBreakBelow -> False, LineSpacing -> {1, 3}, ParagraphIndent -> -96, CounterIncrements -> "Subtitle", CounterAssignments -> {{"Section", 0}, {"Equation", 0}, { "Figure", 0}, {"Subsubtitle", 0}}, FontFamily -> "Helvetica", FontSize -> 18, FontColor -> GrayLevel[1], Background -> RGBColor[0.2, 0.700008, 0.700008]], Cell[ StyleData["Subtitle", "Presentation"], CellMargins -> {{0, 0}, {0, 0}}, LineSpacing -> {1, 6}, ParagraphIndent -> -157, FontSize -> 30], Cell[ StyleData["Subtitle", "Condensed"], CellMargins -> {{0, 0}, {0, 0}}, ParagraphIndent -> -78, FontSize -> 14], Cell[ StyleData["Subtitle", "Printout"], CellMargins -> {{0, 0}, {0, 0}}, ParagraphIndent -> -85, FontSize -> 16, FontColor -> GrayLevel[0], Background -> GrayLevel[1]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Subsubtitle"], ShowCellBracket -> False, CellMargins -> {{10, 4}, {30, 10}}, PageBreakBelow -> False, CounterIncrements -> "Subsubtitle", CounterAssignments -> {{"Section", 0}, {"Equation", 0}, { "Figure", 0}}, FontFamily -> "Helvetica", FontSize -> 14, FontSlant -> "Italic"], Cell[ StyleData["Subsubtitle", "Presentation"], CellMargins -> {{8, 10}, {40, 20}}, LineSpacing -> {1, 0}, FontSize -> 24], Cell[ StyleData["Subsubtitle", "Condensed"], CellMargins -> {{8, 10}, {12, 8}}, FontSize -> 12], Cell[ StyleData["Subsubtitle", "Printout"], CellMargins -> {{9, 10}, {50, 10}}, FontSize -> 14]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Course"], CellDingbat -> None, CellMargins -> {{12, Inherited}, {4, 12}}, CellGroupingRules -> {"SectionGrouping", 10}, PageBreakBelow -> False, CellFrameMargins -> 6, FontFamily -> "Helvetica", FontSize -> 16, FontWeight -> "Bold", FontColor -> RGBColor[0.571389, 0.19675, 0.570504]], Cell[ StyleData["Course", "Presentation"], CellMargins -> {{Inherited, 10}, {8, 32}}, LineSpacing -> {1, 2}, FontSize -> 24, FontTracking -> "Condensed"], Cell[ StyleData["Course", "Condensed"], CellMargins -> {{8, Inherited}, {2, 12}}, FontSize -> 12], Cell[ StyleData["Course", "Printout"], CellMargins -> {{9, 0}, {2, 50}}, FontSize -> 14, FontTracking -> "Plain", FontColor -> GrayLevel[0]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Chapter"], CellDingbat -> None, CellMargins -> {{12, Inherited}, {4, 12}}, CellGroupingRules -> {"SectionGrouping", 20}, PageBreakAbove -> True, PageBreakBelow -> False, CellFrameMargins -> 6, CounterIncrements -> "Chapter", CounterAssignments -> {{"Section", 0}, {"Subsection", 0}, { "Subsubsection", 0}, {"Theorem", 0}, {"Definition", 0}, { "NumberedTable", 0}, {"Example", 0}, {"Problem", 0}, { "NumberedEquation", 0}, {"NumberedFigure", 0}}, FontFamily -> "Helvetica", FontSize -> 16, FontWeight -> "Bold", FontColor -> RGBColor[0.571389, 0.19675, 0.570504]], Cell[ StyleData["Chapter", "Presentation"], CellMargins -> {{Inherited, 10}, {8, 32}}, LineSpacing -> {1, 2}, FontSize -> 24, FontTracking -> "Condensed"], Cell[ StyleData["Chapter", "Condensed"], CellMargins -> {{8, Inherited}, {2, 12}}, FontSize -> 12], Cell[ StyleData["Chapter", "Printout"], CellMargins -> {{9, 0}, {2, 50}}, FontSize -> 18, FontTracking -> "Plain", FontColor -> GrayLevel[0]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Section"], CellDingbat -> None, CellMargins -> {{12, Inherited}, {4, 12}}, CellGroupingRules -> {"SectionGrouping", 30}, PageBreakBelow -> False, CellFrameMargins -> 6, CounterIncrements -> "Section", CounterAssignments -> {{"Subsection", 0}, {"Subsubsection", 0}, { "Solution", 0}}, FontFamily -> "Helvetica", FontSize -> 13, FontWeight -> "Bold", FontColor -> RGBColor[0.571389, 0.19675, 0.570504]], Cell[ StyleData["Section", "Presentation"], CellMargins -> {{Inherited, 10}, {8, 32}}, LineSpacing -> {1, 2}, FontSize -> 24, FontTracking -> "Condensed"], Cell[ StyleData["Section", "Condensed"], CellMargins -> {{8, Inherited}, {2, 12}}, FontSize -> 12], Cell[ StyleData["Section", "Printout"], CellMargins -> {{9, 0}, {2, 10}}, FontSize -> 14, FontTracking -> "Plain", FontColor -> GrayLevel[0]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Subsection"], CellMargins -> {{12, Inherited}, {4, 12}}, CellGroupingRules -> {"SectionGrouping", 40}, PageBreakBelow -> False, CounterIncrements -> "Subsection", CounterAssignments -> {{"Subsubsection", 0}}, FontFamily -> "Helvetica", FontSize -> 13, FontWeight -> "Bold"], Cell[ StyleData["Subsection", "Presentation"], CellMargins -> {{Inherited, 10}, {8, 32}}, LineSpacing -> {1, 0}, FontSize -> 22], Cell[ StyleData["Subsection", "Condensed"], CellMargins -> {{8, Inherited}, {2, 12}}, FontSize -> 12], Cell[ StyleData["Subsection", "Printout"], CellMargins -> {{9, 0}, {4, 40}}, FontSize -> 12]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Subsubsection"], CellDingbat -> "\[Square]", CellMargins -> {{26, Inherited}, {8, 20}}, CellGroupingRules -> {"SectionGrouping", 50}, PageBreakBelow -> False, FontFamily -> "Times", FontSize -> 13, FontWeight -> "Bold"], Cell[ StyleData["Subsubsection", "Presentation"], CellMargins -> {{Inherited, 10}, {8, 26}}, LineSpacing -> {1, 0}, FontSize -> 18], Cell[ StyleData["Subsubsection", "Condensed"], CellMargins -> {{22, Inherited}, {2, 12}}, FontSize -> 10], Cell[ StyleData["Subsubsection", "Printout"], CellMargins -> {{21, 0}, {4, 20}}, FontSize -> 11]}, Closed]]}, Closed]], Cell[ CellGroupData[{ Cell["Styles for Body Text", "Section"], Cell[ CellGroupData[{ Cell[ StyleData["Text"], CellMargins -> {{12, 10}, {5, 5}}, TextAlignment -> Left, TextJustification -> 1, LineSpacing -> {1, 3}, ParagraphSpacing -> {0, 0}, CounterIncrements -> "Text", FontFamily -> "Times", FontSize -> 12, FontWeight -> "Plain", FontSlant -> "Plain", FontVariations -> { "StrikeThrough" -> False, "Underline" -> False}, FontColor -> GrayLevel[0]], Cell[ StyleData["Text", "Presentation"], CellMargins -> {{13, 10}, {8, 8}}, LineSpacing -> {1, 5}, ParagraphSpacing -> {0, 12}, FontSize -> 18], Cell[ StyleData["Text", "Condensed"], CellMargins -> {{8, 10}, {4, 4}}, LineSpacing -> {1, 1}, ParagraphSpacing -> {0, 4}], Cell[ StyleData["Text", "Printout"], CellMargins -> {{9, 0}, {4, 4}}, ParagraphSpacing -> {0, 6}]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["SmallText"], CellMargins -> {{12, 10}, {5, 5}}, LineSpacing -> {1, 3}, ParagraphSpacing -> {0, 6}, CounterIncrements -> "SmallText", FontFamily -> "Helvetica", FontSize -> 9], Cell[ StyleData["SmallText", "Presentation"], CellMargins -> {{13, 10}, {8, 8}}, LineSpacing -> {1, 5}, FontSize -> 12], Cell[ StyleData["SmallText", "Condensed"], CellMargins -> {{8, 10}, {2, 2}}, LineSpacing -> {1, 2}, FontSize -> 9], Cell[ StyleData["SmallText", "Printout"], CellMargins -> {{9, 0}, {4, 4}}, FontSize -> 7]}, Closed]]}, Closed]], Cell[ CellGroupData[{ Cell["Styles for Input/Output", "Section"], Cell[ "The cells in this section define styles used for input and output \ to the kernel. Be careful when modifying, renaming, or removing these \ styles, because the front end associates special meanings with these style \ names.", "Text"], Cell[ CellGroupData[{ Cell[ StyleData["Input"], CellFrame -> True, CellMargins -> {{52, 10}, {8, 8}}, Evaluatable -> True, CellGroupingRules -> "NormalGrouping", CellHorizontalScrolling -> True, PageBreakWithin -> False, GroupPageBreakWithin -> False, CellLabelMargins -> {{5, Inherited}, {Inherited, Inherited}}, DefaultFormatType -> DefaultInputFormatType, FormatType -> InputForm, ShowStringCharacters -> True, NumberMarks -> True, CounterIncrements -> "Input", FontFamily -> "Courier", FontSize -> 12, FontWeight -> "Bold", Background -> GrayLevel[0.849989]], Cell[ StyleData["Input", "Presentation"], CellMargins -> {{62, Inherited}, {10, 10}}, LineSpacing -> {1, 0}, FontSize -> 16], Cell[ StyleData["Input", "Condensed"], CellMargins -> {{40, 10}, {4, 4}}], Cell[ StyleData["Input", "Printout"], CellMargins -> {{44, 0}, {6, 6}}, Background -> GrayLevel[0.8]]}, Closed]], Cell[ StyleData["InlineInput"], Evaluatable -> True, CellGroupingRules -> "InputGrouping", CellHorizontalScrolling -> True, PageBreakWithin -> False, GroupPageBreakWithin -> False, DefaultFormatType -> DefaultInputFormatType, AutoItalicWords -> {}, FormatType -> InputForm, ShowStringCharacters -> True, NumberMarks -> True, CounterIncrements -> "Input", FontWeight -> "Bold"], Cell[ CellGroupData[{ Cell[ StyleData["Output"], CellMargins -> {{52, 10}, {8, 8}}, CellEditDuplicate -> True, CellGroupingRules -> "NormalGrouping", CellHorizontalScrolling -> True, PageBreakWithin -> False, GroupPageBreakWithin -> False, GeneratedCell -> True, CellAutoOverwrite -> True, CellLabelMargins -> {{3, Inherited}, {Inherited, Inherited}}, DefaultFormatType -> DefaultOutputFormatType, FormatType -> InputForm, CounterIncrements -> "Output"], Cell[ StyleData["Output", "Presentation"], CellMargins -> {{62, Inherited}, {12, 5}}, LineSpacing -> {1, 0}], Cell[ StyleData["Output", "Condensed"], CellMargins -> {{40, Inherited}, {4, 1}}], Cell[ StyleData["Output", "Printout"], CellMargins -> {{44, 0}, {6, 2}}, Background -> GrayLevel[0.900008]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Message"], CellMargins -> {{62, Inherited}, {Inherited, Inherited}}, CellGroupingRules -> "OutputGrouping", PageBreakWithin -> False, GroupPageBreakWithin -> False, GeneratedCell -> True, CellAutoOverwrite -> True, ShowCellLabel -> False, DefaultFormatType -> DefaultOutputFormatType, FormatType -> InputForm, CounterIncrements -> "Message", StyleMenuListing -> None, FontColor -> RGBColor[1, 0, 0]], Cell[ StyleData["Message", "Presentation"], CellMargins -> {{74, Inherited}, {Inherited, Inherited}}, LineSpacing -> {1, 0}], Cell[ StyleData["Message", "Condensed"], CellMargins -> {{50, Inherited}, {Inherited, Inherited}}], Cell[ StyleData["Message", "Printout"], CellMargins -> {{54, Inherited}, {Inherited, Inherited}}, FontColor -> GrayLevel[0]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Print"], CellMargins -> {{62, Inherited}, {Inherited, Inherited}}, CellGroupingRules -> "OutputGrouping", CellHorizontalScrolling -> True, PageBreakWithin -> False, GroupPageBreakWithin -> False, GeneratedCell -> True, CellAutoOverwrite -> True, ShowCellLabel -> False, DefaultFormatType -> DefaultOutputFormatType, FormatType -> InputForm, CounterIncrements -> "Print", StyleMenuListing -> None], Cell[ StyleData["Print", "Presentation"], CellMargins -> {{74, Inherited}, {Inherited, Inherited}}, LineSpacing -> {1, 0}], Cell[ StyleData["Print", "Condensed"], CellMargins -> {{50, Inherited}, {Inherited, Inherited}}], Cell[ StyleData["Print", "Printout"], CellMargins -> {{54, Inherited}, {Inherited, Inherited}}]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Graphics"], CellMargins -> {{62, Inherited}, {Inherited, Inherited}}, CellGroupingRules -> "GraphicsGrouping", CellHorizontalScrolling -> True, PageBreakWithin -> False, GeneratedCell -> True, CellAutoOverwrite -> True, ShowCellLabel -> False, DefaultFormatType -> DefaultOutputFormatType, FormatType -> InputForm, CounterIncrements -> "Graphics", StyleMenuListing -> None], Cell[ StyleData["Graphics", "Presentation"], CellMargins -> {{74, Inherited}, {Inherited, Inherited}}], Cell[ StyleData["Graphics", "Condensed"], CellMargins -> {{52, Inherited}, {Inherited, Inherited}}, ImageSize -> {175, 175}], Cell[ StyleData["Graphics", "Printout"], CellMargins -> {{54, Inherited}, {Inherited, Inherited}}, ImageSize -> {250, 250}]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["CellLabel"], StyleMenuListing -> None, FontFamily -> "Helvetica", FontSize -> 11, FontWeight -> "Bold", FontColor -> RGBColor[0.571389, 0.19675, 0.570504]], Cell[ StyleData["CellLabel", "Presentation"], FontSize -> 12], Cell[ StyleData["CellLabel", "Condensed"], FontSize -> 8], Cell[ StyleData["CellLabel", "Printout"], FontSize -> 8, FontColor -> GrayLevel[0]]}, Closed]]}, Closed]], Cell[ CellGroupData[{ Cell["Unique Styles", "Section"], Cell[ CellGroupData[{ Cell[ StyleData["Author"], ShowCellBracket -> False, CellMargins -> {{0, 0}, {0, 0}}, LineSpacing -> {1, 5}, FontSize -> 16, FontSlant -> "Italic", FontColor -> GrayLevel[1], Background -> RGBColor[0.571389, 0.19675, 0.570504]], Cell[ StyleData["Author", "Presentation"], FontSize -> 22], Cell[ StyleData["Author", "Condensed"], LineSpacing -> {1, 1}, ParagraphSpacing -> {0, 4}, FontSize -> 12], Cell[ StyleData["Author", "Printout"], ParagraphSpacing -> {0, 6}, FontSize -> 14]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Example"], CellMargins -> {{12, 10}, {5, 12}}, LineSpacing -> {1, 3}, ParagraphSpacing -> {0, 12}, CounterIncrements -> "Example", FontFamily -> "Times", FontWeight -> "Plain", FontSlant -> "Italic"], Cell[ StyleData["Example", "Presentation"], CellMargins -> {{18, 10}, {8, 20}}, LineSpacing -> {1, 5}, ParagraphSpacing -> {0, 12}], Cell[ StyleData["Example", "Condensed"], CellMargins -> {{8, 10}, {4, 8}}, LineSpacing -> {1, 1}, ParagraphSpacing -> {0, 4}], Cell[ StyleData["Example", "Printout"], CellMargins -> {{9, 0}, {4, 10}}, ParagraphSpacing -> {0, 6}]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Definition"], CellFrame -> {{3, 0}, {0, 0}}, CellMargins -> {{10, 10}, {8, 8}}, PageBreakWithin -> False, GroupPageBreakWithin -> False, CellLabelMargins -> {{23, Inherited}, {Inherited, Inherited}}, ShowStringCharacters -> True, CounterIncrements -> "Definition", FontColor -> GrayLevel[0], Background -> RGBColor[0.500008, 1, 0.900008], UnderoverscriptBoxOptions -> {LimitsPositioning -> True}], Cell[ StyleData["Definition", "Presentation"], CellMargins -> {{Inherited, Inherited}, {5, 12}}, LineSpacing -> {1, 5}, FontSize -> 18], Cell[ StyleData["Definition", "Condensed"], CellMargins -> {{40, 10}, {1, 4}}], Cell[ StyleData["Definition", "Printout"], CellMargins -> {{40, 40}, {2, 6}}, Background -> GrayLevel[0.900008]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Theorem"], CellFrame -> {{3, 0}, {0, 0}}, CellMargins -> {{10, 10}, {8, 8}}, PageBreakWithin -> False, GroupPageBreakWithin -> False, CellLabelMargins -> {{23, Inherited}, {Inherited, Inherited}}, ShowStringCharacters -> True, CounterIncrements -> "Theorem", FontColor -> GrayLevel[0], Background -> RGBColor[0.839994, 1, 0.2], UnderoverscriptBoxOptions -> {LimitsPositioning -> True}], Cell[ StyleData["Theorem", "Presentation"], CellMargins -> {{Inherited, Inherited}, {5, 12}}, LineSpacing -> {1, 5}, FontSize -> 18], Cell[ StyleData["Theorem", "Condensed"], CellMargins -> {{40, 10}, {1, 4}}], Cell[ StyleData["Theorem", "Printout"], CellMargins -> {{40, 40}, {2, 6}}, Background -> GrayLevel[0.949996]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Problem"], CellMargins -> {{13, 10}, {8, 8}}, CellGroupingRules -> {"SectionGrouping", 50}, CellHorizontalScrolling -> True, PageBreakBelow -> False, LineIndent -> 0, CounterIncrements -> "Problem", CounterAssignments -> {{"Subproblem", 0}}, FrameBoxOptions -> {FrameMargins -> {{1, 1}, {1.5, 1.5}}}, GridBoxOptions -> {GridBoxItemSize -> {"Columns" -> { Scaled[0.39], { Scaled[0.59]}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}}], Cell[ StyleData["Problem", "Presentation"], CellMargins -> {{18, 10}, {8, 32}}, LineSpacing -> {1, 2}, FontSize -> 24, FontTracking -> "Condensed"], Cell[ StyleData["Problem", "Condensed"], CellMargins -> {{8, Inherited}, {2, 12}}, FontSize -> 12], Cell[ StyleData["Problem", "Printout"], CellMargins -> {{9, 0}, {2, 10}}, FontTracking -> "Plain", FontColor -> GrayLevel[0]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Solution"], CellMargins -> {{13, 10}, {8, 8}}, CellGroupingRules -> {"SectionGrouping", 50}, CellHorizontalScrolling -> True, PageBreakBelow -> False, LineIndent -> 0, CounterIncrements -> "Solution", CounterAssignments -> {{"Subsolution", 0}}, FrameBoxOptions -> {FrameMargins -> {{1, 1}, {1.5, 1.5}}}, GridBoxOptions -> {GridBoxItemSize -> {"Columns" -> { Scaled[0.39], { Scaled[0.59]}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}}], Cell[ StyleData["Solution", "Presentation"], CellMargins -> {{18, 10}, {8, 32}}, LineSpacing -> {1, 2}, FontSize -> 24, FontTracking -> "Condensed"], Cell[ StyleData["Solution", "Condensed"], CellMargins -> {{8, Inherited}, {2, 12}}, FontSize -> 12], Cell[ StyleData["Solution", "Printout"], CellMargins -> {{9, 0}, {2, 10}}, FontTracking -> "Plain", FontColor -> GrayLevel[0]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Exercise"], CellMargins -> {{13, 10}, {8, 8}}, CellGroupingRules -> {"SectionGrouping", 50}, CellHorizontalScrolling -> True, PageBreakBelow -> False, LineIndent -> 0, CounterIncrements -> "Subsection", CounterAssignments -> {{"Subsubsection", 0}}, FrameBoxOptions -> {FrameMargins -> {{1, 1}, {1.5, 1.5}}}, GridBoxOptions -> {GridBoxItemSize -> {"Columns" -> { Scaled[0.39], { Scaled[0.59]}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}}], Cell[ StyleData["Exercise", "Presentation"], CellMargins -> {{18, 10}, {8, 32}}, LineSpacing -> {1, 2}, FontSize -> 24, FontTracking -> "Condensed"], Cell[ StyleData["Exercise", "Condensed"], CellMargins -> {{8, Inherited}, {2, 12}}, FontSize -> 12], Cell[ StyleData["Exercise", "Printout"], CellMargins -> {{9, 0}, {2, 10}}, FontTracking -> "Plain", FontColor -> GrayLevel[0]]}, Closed]]}, Closed]], Cell[ CellGroupData[{ Cell["Formulas and Programming", "Section"], Cell[ CellGroupData[{ Cell[ StyleData["DisplayFormula"], CellMargins -> {{62, 10}, {4, 4}}, CellHorizontalScrolling -> True, ScriptLevel -> 0, SingleLetterItalics -> True, UnderoverscriptBoxOptions -> {LimitsPositioning -> True}], Cell[ StyleData["DisplayFormula", "Presentation"], CellMargins -> {{Inherited, 10}, {2, 10}}, FontSize -> 18], Cell[ StyleData["DisplayFormula", "Condensed"], CellMargins -> {{52, 10}, {2, 10}}, FontSize -> 10], Cell[ StyleData["DisplayFormula", "Printout"], CellMargins -> {{54, 10}, {2, 10}}]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["ExerciseFormula"], CellMargins -> {{54, 10}, {2, 10}}, CellGroupingRules -> {"SectionGrouping", 50}, CellHorizontalScrolling -> True, ScriptLevel -> 0, SingleLetterItalics -> True, UnderoverscriptBoxOptions -> {LimitsPositioning -> True}], Cell[ StyleData["ExerciseFormula", "Presentation"], CellMargins -> {{Inherited, 10}, {2, 10}}, FontSize -> 18], Cell[ StyleData["ExerciseFormula", "Condensed"], CellMargins -> {{52, 10}, {2, 10}}, FontSize -> 10], Cell[ StyleData["ExerciseFormula", "Printout"], CellMargins -> {{54, 10}, {2, 10}}]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["Program"], CellMargins -> {{12, 10}, {Inherited, 6}}, FontFamily -> "Courier"], Cell[ StyleData["Program", "Presentation"], CellMargins -> {{13, 30}, {Inherited, 4}}, FontSize -> 9.5], Cell[ StyleData["Program", "Condensed"], CellMargins -> {{8, 10}, {Inherited, 4}}, FontSize -> 9.5], Cell[ StyleData["Program", "Printout"], CellMargins -> {{9, 0}, {Inherited, 4}}, FontSize -> 9.5]}, Closed]]}, Closed]], Cell[ CellGroupData[{ Cell["Styles for Automatic Numbering", "Section"], Cell[ "The following styles are useful for numbered equations, figures, \ etc. They automatically give the cell a FrameLabel containing a reference to \ a particular counter, and also increment that counter.", "Text"], Cell[ CellGroupData[{ Cell[ StyleData["NumberedEquation"], CellMargins -> {{62, 15}, {Inherited, Inherited}}, CellFrameLabels -> {{None, Cell[ TextData[{"(", CounterBox["Chapter"], ".", CounterBox["NumberedEquation"], ")"}]]}, {None, None}}, DefaultFormatType -> DefaultInputFormatType, CounterIncrements -> "NumberedEquation", FormatTypeAutoConvert -> False], Cell[ StyleData["NumberedEquation", "Presentation"], CellMargins -> {{74, 10}, {Inherited, Inherited}}], Cell[ StyleData["NumberedEquation", "Condensed"], CellMargins -> {{52, 10}, {Inherited, Inherited}}], Cell[ StyleData["NumberedEquation", "Printout"], CellMargins -> {{52, 20}, {Inherited, Inherited}}]}, Closed]], Cell[ StyleData["NumberedEquationAppendix"], CellMargins -> {{62, 15}, {Inherited, Inherited}}, CellFrameLabels -> {{None, Cell[ TextData[{"(", CounterBox[ "Chapter", CounterFunction :> (Part[{"A", "B", "C", "D"}, #]& )], ".", CounterBox["NumberedEquation"], ")"}]]}, {None, None}}, DefaultFormatType -> DefaultInputFormatType, CounterIncrements -> "NumberedEquation", FormatTypeAutoConvert -> False], Cell[ CellGroupData[{ Cell[ StyleData["NumberedFigure"], CellMargins -> {{62, 145}, {Inherited, Inherited}}, CellFrameLabels -> {{None, None}, { Cell[ TextData[{"Figure ", CounterBox["Chapter"], ".", CounterBox["NumberedFigure"]}]], None}}, CounterIncrements -> "NumberedFigure", ImageMargins -> {{43, Inherited}, {Inherited, 0}}, FormatTypeAutoConvert -> False], Cell[ StyleData["NumberedFigure", "Presentation"]], Cell[ StyleData["NumberedFigure", "Condensed"]], Cell[ StyleData["NumberedFigure", "Printout"]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["NumberedTable"], CellMargins -> {{62, 145}, {Inherited, Inherited}}, CellFrameLabels -> {{None, None}, { Cell[ TextData[{"Table ", CounterBox["Chapter"], ".", CounterBox["NumberedTable"]}]], None}}, TextAlignment -> Center, CounterIncrements -> "NumberedTable", FormatTypeAutoConvert -> False], Cell[ StyleData["NumberedTable", "Presentation"]], Cell[ StyleData["NumberedTable", "Condensed"]], Cell[ StyleData["NumberedTable", "Printout"]]}, Closed]]}, Closed]], Cell[ CellGroupData[{ Cell["Styles for Headers and Footers", "Section"], Cell[ StyleData["Header"], CellMargins -> {{0, 0}, {4, 1}}, StyleMenuListing -> None, FontFamily -> "Helvetica", FontSize -> 9, FontSlant -> "Italic"], Cell[ StyleData["Footer"], CellMargins -> {{0, 0}, {0, 4}}, StyleMenuListing -> None, FontFamily -> "Helvetica", FontSize -> 6], Cell[ StyleData["PageNumber"], CellMargins -> {{0, 0}, {4, 1}}, StyleMenuListing -> None, FontFamily -> "Helvetica", FontSize -> 9, FontWeight -> "Bold"]}, Closed]], Cell[ CellGroupData[{ Cell["Hyperlink Styles", "Section"], Cell[ "The cells below define styles useful for making hypertext \ ButtonBoxes. The \"Hyperlink\" style is for links within the same Notebook, \ or between Notebooks.", "Text"], Cell[ CellGroupData[{ Cell[ StyleData["Hyperlink"], StyleMenuListing -> None, ButtonStyleMenuListing -> Automatic, FontSize -> 12, FontVariations -> {"Underline" -> True}, FontColor -> RGBColor[0, 0, 1], ButtonBoxOptions -> { Active -> True, ButtonFrame -> "None", ButtonFunction :> (FrontEndExecute[{ FrontEnd`NotebookLocate[#2]}]& ), ButtonNote -> ButtonData}], Cell[ StyleData["Hyperlink", "Presentation"]], Cell[ StyleData["Hyperlink", "Condensed"]], Cell[ StyleData["Hyperlink", "Printout"], FontVariations -> {"Underline" -> False}, FontColor -> GrayLevel[0]]}, Closed]], Cell[ "The following styles are for linking automatically to the on-line \ help system.", "Text"], Cell[ CellGroupData[{ Cell[ StyleData["MainBookLink"], StyleMenuListing -> None, ButtonStyleMenuListing -> Automatic, FontVariations -> {"Underline" -> True}, FontColor -> RGBColor[0, 0, 1], ButtonBoxOptions -> { Active -> True, ButtonFrame -> "None", ButtonFunction :> (FrontEndExecute[{ FrontEnd`HelpBrowserLookup["MainBook", #]}]& )}], Cell[ StyleData["MainBookLink", "Presentation"]], Cell[ StyleData["MainBookLink", "Condensed"]], Cell[ StyleData["MainBookLink", "Printout"], FontColor -> GrayLevel[0]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["AddOnsLink"], StyleMenuListing -> None, ButtonStyleMenuListing -> Automatic, FontFamily -> "Courier", FontVariations -> {"Underline" -> True}, FontColor -> RGBColor[0, 0, 1], ButtonBoxOptions -> { Active -> True, ButtonFrame -> "None", ButtonFunction :> (FrontEndExecute[{ FrontEnd`HelpBrowserLookup["AddOns", #]}]& )}], Cell[ StyleData["AddOnsLink", "Presentation"]], Cell[ StyleData["AddOnsLink", "Condensed"]], Cell[ StyleData["AddOnLink", "Printout"], FontColor -> GrayLevel[0], Background -> GrayLevel[1]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["RefGuideLink"], StyleMenuListing -> None, ButtonStyleMenuListing -> Automatic, FontFamily -> "Courier", FontVariations -> {"Underline" -> True}, FontColor -> RGBColor[0, 0, 1], ButtonBoxOptions -> { Active -> True, ButtonFrame -> "None", ButtonFunction :> (FrontEndExecute[{ FrontEnd`HelpBrowserLookup["RefGuideLink", #]}]& )}], Cell[ StyleData["RefGuideLink", "Presentation"]], Cell[ StyleData["RefGuideLink", "Condensed"]], Cell[ StyleData["RefGuideLink", "Printout"], FontColor -> GrayLevel[0]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["GettingStartedLink"], StyleMenuListing -> None, ButtonStyleMenuListing -> Automatic, FontVariations -> {"Underline" -> True}, FontColor -> RGBColor[0, 0, 1], ButtonBoxOptions -> { Active -> True, ButtonFrame -> "None", ButtonFunction :> (FrontEndExecute[{ FrontEnd`HelpBrowserLookup["GettingStarted", #]}]& )}], Cell[ StyleData["GettingStartedLink", "Presentation"]], Cell[ StyleData["GettingStartedLink", "Condensed"]], Cell[ StyleData["GettingStartedLink", "Printout"], FontColor -> GrayLevel[0], Background -> GrayLevel[1]]}, Closed]], Cell[ CellGroupData[{ Cell[ StyleData["OtherInformationLink"], StyleMenuListing -> None, ButtonStyleMenuListing -> Automatic, FontVariations -> {"Underline" -> True}, FontColor -> RGBColor[0, 0, 1], ButtonBoxOptions -> { Active -> True, ButtonFrame -> "None", ButtonFunction :> (FrontEndExecute[{ FrontEnd`HelpBrowserLookup["OtherInformation", #]}]& )}], Cell[ StyleData["OtherInformationLink", "Presentation"]], Cell[ StyleData["OtherInformationLink", "Condensed"]], Cell[ StyleData["OtherInformationLink", "Printout"], FontColor -> GrayLevel[0], Background -> GrayLevel[1]]}, Closed]]}, Closed]]}, Open]]}, Visible -> False, FrontEndVersion -> "6.0 for Microsoft Windows (32-bit) (April 20, 2007)", StyleDefinitions -> "Default.nb"] ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{ "Chap Preface"->{ Cell[90894, 4032, 207, 7, 36, "Chapter", CellGroupingRules->{"SectionGrouping", 20}, PageBreakAbove->True, PageBreakBelow->False, CellTags->"Chap Preface"]}, "Chap Intro"->{ Cell[95908, 4139, 143, 7, 38, "Chapter", CounterAssignments->{{"Chapter", 0}}, CellTags->"Chap Intro"]}, "SectIntro Intro"->{ Cell[96076, 4150, 157, 9, 47, "Section", CellTags->"SectIntro Intro"]}, "DefIntro Cryptology"->{ Cell[96236, 4161, 759, 17, 108, "Text", CellTags->"DefIntro Cryptology"]}, "DefIntro Privacy"->{ Cell[97095, 4184, 348, 8, 59, "Text", CellTags->"DefIntro Privacy"]}, "DefIntro Authen"->{ Cell[97446, 4194, 326, 7, 59, "Text", CellTags->"DefIntro Authen"]}, "DefIntro Integrity"->{ Cell[97775, 4203, 221, 6, 34, "Text", CellTags->"DefIntro Integrity"]}, "SectIntro Shannon"->{ Cell[98749, 4233, 179, 8, 33, "Section", CellTags->"SectIntro Shannon"]}, "DefIntro Alphabet"->{ Cell[120923, 5165, 1280, 40, 89, "Text", CellTags->"DefIntro Alphabet"]}, "DefIntro bigram"->{ Cell[122206, 5207, 1332, 52, 63, "Text", CellTags->"DefIntro bigram"]}, "DefIntro Language"->{ Cell[123541, 5261, 720, 24, 61, "Text", CellTags->"DefIntro Language"]}, "DefIntro Crypto Transf"->{ Cell[124264, 5287, 887, 28, 83, "Text", CellTags->"DefIntro Crypto Transf"]}, "DefIntro plaintext"->{ Cell[125154, 5317, 1316, 46, 59, "Text", CellTags->"DefIntro plaintext"]}, "DefIntro Crypto Syst"->{ Cell[126473, 5365, 984, 42, 113, "Definition", CellTags->"DefIntro Crypto Syst"]}, "DefIntro encryption"->{ Cell[127460, 5409, 605, 24, 60, "Text", CellTags->"DefIntro encryption"]}, "DefIntro secure channel"->{ Cell[128979, 5470, 1208, 40, 109, "Text", CellTags->"DefIntro secure channel"]}, "DefIntro Cryptanalist"->{ Cell[131690, 5562, 182, 6, 34, "Text", CellTags->"DefIntro Cryptanalist"]}, "DefIntro Cryptanalist passive"->{ Cell[131875, 5570, 890, 32, 59, "Text", CellTags->"DefIntro Cryptanalist passive"]}, "DefIntro Cryptanalist active"->{ Cell[132768, 5604, 386, 9, 59, "Text", CellTags->"DefIntro Cryptanalist active"]}, "DefIntro Cipher Only Att."->{ Cell[133231, 5617, 260, 7, 34, "Text", CellTags->"DefIntro Cipher Only Att."]}, "DefIntro Known Pl. Att."->{ Cell[133494, 5626, 345, 8, 59, "Text", CellTags->"DefIntro Known Pl. Att."]}, "DefIntro Chosen Pl. Att."->{ Cell[133842, 5636, 529, 16, 59, "Text", CellTags->"DefIntro Chosen Pl. Att."]}, "SectIntro Statistical"->{ Cell[134627, 5666, 175, 8, 33, "Section", CellTags->"SectIntro Statistical"]}, "DefIntro Plaint Source"->{ Cell[135118, 5686, 657, 22, 62, "Text", CellTags->"DefIntro Plaint Source"]}, "PropIntro Kolmogorov"->{ Cell[140507, 5885, 173, 6, 34, "Text", CellTags->"PropIntro Kolmogorov"]}, "ExamIntro 1-grams"->{ Cell[140683, 5893, 954, 34, 111, "Example", CellTags->"ExamIntro 1-grams"]}, "TableIntr Prob English"->{ Cell[143969, 6018, 620, 13, 247, "NumberedTable", CellTags->"TableIntr Prob English"]}, "TableIntro Equil Distr"->{ Cell[147041, 6131, 2193, 62, 273, "Input", CellTags->"TableIntro Equil Distr"]}, "ExamIntro Markov"->{ Cell[212343, 7909, 1862, 64, 200, "Example", CellTags->"ExamIntro Markov"]}, "FormIntro Markov Eval"->{ Cell[218375, 8135, 977, 29, 191, "Input", CellTags->"FormIntro Markov Eval"]}, "DefIntro stationary"->{ Cell[219667, 8177, 971, 29, 88, "Text", CellTags->"DefIntro stationary"]}, "SectIntro Problems"->{ Cell[220675, 8211, 135, 8, 33, "Section", CellTags->"SectIntro Problems"]}, "Chap Class"->{ Cell[222492, 8289, 115, 6, 38, "Chapter", CellTags->"Chap Class"]}, "SectClass Caesar"->{ Cell[222632, 8299, 170, 8, 47, "Section", CellTags->"SectClass Caesar"]}, "SubsClass Caesar"->{ Cell[223431, 8337, 181, 12, 47, "Subsection", CellTags->"SubsClass Caesar"]}, "DefClass Caesar"->{ Cell[225819, 8435, 464, 13, 95, "Input", CellTags->"DefClass Caesar"], Cell[4489983, 154868, 310, 9, 120, "Input", CellTags->"DefClass Caesar"]}, "DefClass Caesar Cipher"->{ Cell[226687, 8464, 442, 17, 34, "Text", CellTags->"DefClass Caesar Cipher"]}, "DefClass exh key search"->{ Cell[228633, 8544, 450, 14, 59, "Text", CellTags->"DefClass exh key search"]}, "TableClass Anal Caesar"->{ Cell[229086, 8560, 6704, 218, 186, "NumberedTable", CellTags->"TableClass Anal Caesar"]}, "SubsClass Simple sub"->{ Cell[237313, 8823, 191, 12, 33, "Subsection", CellTags->"SubsClass Simple sub"]}, "SubsubsClass weakness simple"->{ Cell[237529, 8839, 100, 1, 63, "Subsubsection", CellTags->"SubsubsClass weakness simple"]}, "DefClass SimpleSubst"->{ Cell[237632, 8842, 413, 13, 59, "Text", CellTags->"DefClass SimpleSubst"]}, "DefClass Prob Word"->{ Cell[243200, 9029, 104, 1, 37, "Subsubsection", CellTags->"DefClass Prob Word"]}, "TableClass Anal Simple Subst"->{ Cell[244017, 9050, 2043, 45, 394, "NumberedTable", CellTags->"TableClass Anal Simple Subst"]}, "ExamClass Most Prob"->{ Cell[248693, 9168, 1342, 44, 135, "Example", CellTags->"ExamClass Most Prob"]}, "InputClass Find Match"->{ Cell[250038, 9214, 1379, 41, 171, "Input", CellTags->"InputClass Find Match"]}, "SubsClass Vigenere"->{ Cell[251826, 9277, 200, 12, 33, "Subsection", CellTags->"SubsClass Vigenere"]}, "DefClass Vigenere"->{ Cell[252029, 9291, 906, 27, 108, "Text", CellTags->"DefClass Vigenere"]}, "ExamClass Vigenere"->{ Cell[252938, 9320, 950, 37, 110, "Example", CellTags->"ExamClass Vigenere"]}, "TableClass Vigenere"->{ Cell[255219, 9398, 4096, 62, 474, "NumberedTable", CellTags->"TableClass Vigenere"]}, "FormClass Vigen Encr"->{ Cell[263835, 9606, 421, 14, 36, "NumberedEquation", CellTags->"FormClass Vigen Encr"]}, "DefClass Poly Subst"->{ Cell[264259, 9622, 1533, 43, 156, "Text", CellTags->"DefClass Poly Subst"]}, "SectClass Incid Coin"->{ Cell[265841, 9671, 176, 8, 33, "Section", CellTags->"SectClass Incid Coin"]}, "SubSClass incid of coinc"->{ Cell[266042, 9683, 200, 11, 47, "Subsection", CellTags->"SubSClass incid of coinc"]}, "LemClass Kasiski"->{ Cell[280289, 10172, 3193, 122, 247, "Theorem", CellTags->"LemClass Kasiski"]}, "SubSClass Kasiski"->{ Cell[288686, 10500, 180, 11, 33, "Subsection", CellTags->"SubSClass Kasiski"]}, "SectClass Vernam"->{ Cell[292207, 10626, 202, 10, 33, "Section", PageBreakAbove->True, CellTags->"SectClass Vernam"]}, "SubsClas One-time"->{ Cell[292616, 10647, 185, 12, 47, "Subsection", CellTags->"SubsClas One-time"]}, "DefClass Vernam"->{ Cell[292804, 10661, 874, 21, 132, "Text", CellTags->"DefClass Vernam"]}, "SubsClass Playfair"->{ Cell[293715, 10687, 189, 12, 33, "Subsection", CellTags->"SubsClass Playfair"]}, "DefClass Playfair"->{ Cell[293907, 10701, 1032, 30, 133, "Text", CellTags->"DefClass Playfair"]}, "SubsClas Transposition"->{ Cell[297645, 10841, 195, 12, 33, "Subsection", CellTags->"SubsClas Transposition"]}, "DefClass Transp cipher"->{ Cell[297843, 10855, 572, 16, 59, "Text", CellTags->"DefClass Transp cipher"]}, "DefClass Column Transp"->{ Cell[298941, 10892, 878, 22, 108, "Text", CellTags->"DefClass Column Transp"]}, "DefClass product cipher"->{ Cell[301459, 10982, 481, 11, 83, "Text", CellTags->"DefClass product cipher"]}, "DefClass stream cipher"->{ Cell[301943, 10995, 695, 21, 83, "Text", CellTags->"DefClass stream cipher"]}, "SubSClass Hagelin"->{ Cell[302974, 11030, 176, 12, 33, "Subsection", CellTags->"SubSClass Hagelin"]}, "SubSClass Enigma"->{ Cell[589535, 16884, 197, 13, 33, "Subsection", PageBreakAbove->True, CellTags->"SubSClass Enigma"]}, "SectClass Problems"->{ Cell[887154, 22105, 135, 8, 33, "Section", CellTags->"SectClass Problems"]}, "Chap Shift"->{ Cell[889912, 22219, 111, 5, 38, "Chapter", CellTags->"Chap Shift"]}, "SectShift pseudo seq"->{ Cell[890048, 22228, 152, 8, 47, "Section", CellTags->"SectShift pseudo seq"]}, "FigShift pseudo random"->{ Cell[916211, 23241, 343, 12, 65, "NumberedFigure", CellTags->"FigShift pseudo random"]}, "PostShift Eventually Periodic"->{ Cell[916569, 23256, 1148, 32, 135, "Text", CellTags->"PostShift Eventually Periodic"]}, "DefShift pseudo random"->{ Cell[917720, 23290, 569, 19, 62, "Text", CellTags->"DefShift pseudo random"]}, "DefShift Period"->{ Cell[918292, 23311, 1027, 45, 118, "Definition", CellTags->"DefShift Period"]}, "DefShift run"->{ Cell[919322, 23358, 588, 23, 62, "Text", CellTags->"DefShift run"]}, "DefShift Gap Block"->{ Cell[920472, 23405, 1555, 50, 106, "DisplayFormula", CellTags->"DefShift Gap Block"]}, "DefShift AC(k)"->{ Cell[922030, 23457, 500, 20, 37, "Text", CellTags->"DefShift AC(k)"]}, "FormShift AC(k)"->{ Cell[922533, 23479, 285, 10, 56, "NumberedEquation", CellTags->"FormShift AC(k)"]}, "DefShift AC in/out"->{ Cell[927376, 23667, 1014, 43, 61, "Text", CellTags->"DefShift AC in/out"]}, "PostShift Golomb"->{ Cell[928393, 23712, 1423, 53, 178, "Definition", CellTags->"PostShift Golomb"]}, "PostShift Crypt"->{ Cell[940934, 24179, 1200, 44, 117, "Text", CellTags->"PostShift Crypt"]}, "SectShift Linear"->{ Cell[942171, 24228, 161, 9, 33, "Section", CellTags->"SectShift Linear"]}, "SubsShift linear"->{ Cell[942357, 24241, 196, 11, 47, "Subsection", CellTags->"SubsShift linear"]}, "FigShift FSR"->{ Cell[961517, 24999, 141, 3, 62, "NumberedFigure", CellTags->"FigShift FSR"]}, "DefShift State"->{ Cell[961661, 25004, 1252, 48, 86, "Text", CellTags->"DefShift State"]}, "DefShift LFSR"->{ Cell[968323, 25261, 266, 9, 34, "Text", CellTags->"DefShift LFSR"]}, "FigShift LFSR"->{ Cell[994397, 26313, 146, 3, 62, "NumberedFigure", CellTags->"FigShift LFSR"]}, "FormShift Lin Rec"->{ Cell[995094, 26338, 513, 20, 38, "NumberedEquation", CellTags->"FormShift Lin Rec"]}, "FormShift Full Lin Rec"->{ Cell[995645, 26362, 440, 17, 35, "NumberedEquation", CellTags->"FormShift Full Lin Rec"]}, "FormShift Rec States"->{ Cell[997372, 26430, 978, 36, 38, "NumberedEquation", CellTags->"FormShift Rec States"]}, "DefShift feedb coeff"->{ Cell[998353, 26468, 2145, 74, 165, "Text", CellTags->"DefShift feedb coeff"]}, "FigShift LFSR n=4"->{ Cell[1012819, 27084, 221, 9, 62, "NumberedFigure", CellTags->"FigShift LFSR n=4"]}, "SubsShift PN"->{ Cell[1020727, 27358, 171, 11, 33, "Subsection", CellTags->"SubsShift PN"]}, "DefShift PN Seq"->{ Cell[1020901, 27371, 606, 26, 90, "Definition", CellTags->"DefShift PN Seq"]}, "LemShift All States"->{ Cell[1021871, 27412, 912, 36, 117, "Theorem", CellTags->"LemShift All States"]}, "DefShift Char Pol"->{ Cell[1022786, 27450, 586, 19, 60, "Text", CellTags->"DefShift Char Pol"]}, "DefShift Omega"->{ Cell[1024310, 27511, 1397, 53, 142, "Definition", CellTags->"DefShift Omega"]}, "LemShift Omega=linear"->{ Cell[1026014, 27579, 634, 26, 91, "Theorem", CellTags->"LemShift Omega=linear"]}, "FormShift Reciprocal"->{ Cell[1028957, 27694, 782, 32, 38, "Text", CellTags->"FormShift Reciprocal"]}, "FormShift Rec pol"->{ Cell[1029742, 27728, 994, 39, 37, "NumberedEquation", CellTags->"FormShift Rec pol"]}, "DefShift power series"->{ Cell[1030739, 27769, 395, 15, 37, "Text", CellTags->"DefShift power series"]}, "FormShift Gen Function"->{ Cell[1031137, 27786, 357, 13, 35, "NumberedEquation", CellTags->"FormShift Gen Function"]}, "TheoShift S(x)f\[RawStar](x)=pol"->{ Cell[1032841, 27853, 1292, 54, 114, "Theorem", CellTags->"TheoShift S(x)f\[RawStar](x)=pol"]}, "CorShift S=u/f"->{ Cell[1046613, 28366, 689, 28, 105, "Theorem", CellTags->"CorShift S=u/f"]}, "LemShift s+t seq"->{ Cell[1049509, 28484, 1687, 65, 161, "Theorem", CellTags->"LemShift s+t seq"]}, "SubsShift which char"->{ Cell[1055901, 28738, 218, 11, 33, "Subsection", CellTags->"SubsShift which char"]}, "DefShift period pol"->{ Cell[1056122, 28751, 2739, 104, 114, "Text", CellTags->"DefShift period pol"]}, "FactShift period"->{ Cell[1060944, 28932, 972, 32, 110, "Text", CellTags->"FactShift period"]}, "LemShift Period div m"->{ Cell[1061919, 28966, 986, 41, 93, "Theorem", CellTags->"LemShift Period div m"]}, "LemShift Period=m"->{ Cell[1066144, 29138, 995, 41, 93, "Theorem", CellTags->"LemShift Period=m"]}, "LemShift PN=> Irred"->{ Cell[1078410, 29597, 881, 38, 93, "Theorem", CellTags->"LemShift PN=> Irred"]}, "ExamShift f1 f2"->{ Cell[1082198, 29751, 1775, 67, 177, "Example", CellTags->"ExamShift f1 f2"]}, "TheoShift PN iff Prim"->{ Cell[1092430, 30087, 647, 25, 113, "Theorem", CellTags->"TheoShift PN iff Prim"]}, "SubsShift alternative"->{ Cell[1109852, 30677, 363, 17, 33, "Subsection", CellTags->"SubsShift alternative"]}, "FormShift GF(2^n)"->{ Cell[1114002, 30846, 695, 24, 38, "DisplayFormula", CellTags->"FormShift GF(2^n)"]}, "SubsShift crypt prop"->{ Cell[1132147, 31513, 207, 11, 33, "Subsection", CellTags->"SubsShift crypt prop"]}, "PostShift Ad C3"->{ Cell[1139435, 31794, 1036, 34, 63, "Text", CellTags->"PostShift Ad C3"]}, "FormShift break PN"->{ Cell[1140474, 31830, 1616, 59, 127, "NumberedEquation", CellTags->"FormShift break PN"]}, "SectShift Non-linear"->{ Cell[1151033, 32215, 155, 9, 33, "Section", CellTags->"SectShift Non-linear"]}, "SubsShift minimal"->{ Cell[1151213, 32228, 197, 11, 47, "Subsection", CellTags->"SubsShift minimal"]}, "DefShift Lin Compl"->{ Cell[1153071, 32288, 858, 35, 117, "Definition", CellTags->"DefShift Lin Compl"]}, "LemShift O(f){ Cell[1154076, 32330, 858, 35, 114, "Theorem", CellTags->"LemShift O(f){ Cell[1158805, 32516, 972, 38, 113, "Example", CellTags->"ExamShift f1 f2 bis"]}, "LemShift gcd(u f)=1"->{ Cell[1164153, 32702, 1130, 38, 88, "Text", CellTags->"LemShift gcd(u f)=1"]}, "TheoShift Min Char Pol"->{ Cell[1168836, 32880, 3343, 129, 320, "Theorem", CellTags->"TheoShift Min Char Pol"]}, "ExamShift Lin Equiv"->{ Cell[1172182, 33011, 1000, 39, 89, "Example", CellTags->"ExamShift Lin Equiv"]}, "CorShift Lin Compl"->{ Cell[1182578, 33408, 1364, 54, 145, "Theorem", CellTags->"CorShift Lin Compl"]}, "SubsShift Berlekamp"->{ Cell[1183979, 33467, 201, 12, 33, "Subsection", CellTags->"SubsShift Berlekamp"]}, "DefShift Lk and fk"->{ Cell[1185351, 33517, 1748, 65, 142, "Definition", CellTags->"DefShift Lk and fk"]}, "LemShift zeros1"->{ Cell[1188143, 33625, 991, 41, 164, "Theorem", CellTags->"LemShift zeros1"]}, "LemShift sk+tk segment"->{ Cell[1189946, 33700, 1463, 56, 139, "Theorem", CellTags->"LemShift sk+tk segment"]}, "LemShift Lk+1>="->{ Cell[1194208, 33867, 1116, 45, 139, "Theorem", CellTags->"LemShift Lk+1>="]}, "TheoShift Ber-Mas"->{ Cell[1200173, 34094, 1106, 45, 139, "Theorem", CellTags->"TheoShift Ber-Mas"]}, "FormShift BM j<=k-1"->{ Cell[1205555, 34309, 704, 25, 45, "NumberedEquation", CellTags->"FormShift BM j<=k-1"]}, "FormShift BM j=k"->{ Cell[1207010, 34366, 646, 24, 45, "NumberedEquation", CellTags->"FormShift BM j=k"]}, "FormShift BM j<=m"->{ Cell[1208745, 34437, 1100, 42, 54, "NumberedEquation", CellTags->"FormShift BM j<=m"]}, "FormShift f(x) in BM"->{ Cell[1210662, 34513, 1210, 44, 84, "NumberedEquation", CellTags->"FormShift f(x) in BM"]}, "AlgShift Ber-Mas"->{ Cell[1217679, 34783, 6377, 271, 939, "Theorem", CellTags->"AlgShift Ber-Mas"]}, "SubsShift Observations"->{ Cell[1242355, 35578, 215, 11, 33, "Subsection", CellTags->"SubsShift Observations"]}, "DefShift branch point"->{ Cell[1242573, 35591, 773, 15, 132, "Text", CellTags->"DefShift branch point"]}, "TheoShift unique pred"->{ Cell[1243349, 35608, 1644, 60, 119, "Theorem", CellTags->"TheoShift unique pred"]}, "SectShift Problems"->{ Cell[1291060, 37523, 164, 10, 33, "Section", PageBreakAbove->False, CellTags->"SectShift Problems"]}, "Chap Block"->{ Cell[1346416, 39743, 100, 5, 38, "Chapter", CellTags->"Chap Block"]}, "SectBlock principles"->{ Cell[1346541, 39752, 152, 8, 47, "Section", CellTags->"SectBlock principles"]}, "SubsBlock Modes"->{ Cell[1346718, 39764, 185, 11, 47, "Subsection", CellTags->"SubsBlock Modes"]}, "SubsubsBlock codebook"->{ Cell[1346928, 39779, 74, 1, 63, "Subsubsection", CellTags->"SubsubsBlock codebook"]}, "DefBlock block"->{ Cell[1347005, 39782, 665, 17, 83, "Text", CellTags->"DefBlock block"]}, "DefBlock codebook"->{ Cell[1350142, 39890, 547, 11, 108, "Text", CellTags->"DefBlock codebook"]}, "FigBlock codebook"->{ Cell[1362352, 40354, 143, 6, 83, "NumberedFigure", CellTags->"FigBlock codebook"]}, "SubsubsBlock cipher block chaining"->{ Cell[1362532, 40365, 95, 1, 63, "Subsubsection", CellTags->"SubsubsBlock cipher block chaining"]}, "DefBlock CBC"->{ Cell[1362630, 40368, 977, 28, 135, "Text", CellTags->"DefBlock CBC"]}, "RemBlock Ci=Cj"->{ Cell[1399110, 41795, 1890, 63, 139, "Text", CellTags->"RemBlock Ci=Cj"]}, "SubsubsBlock cipher feedback"->{ Cell[1401185, 41868, 88, 1, 63, "Subsubsection", CellTags->"SubsubsBlock cipher feedback"]}, "DefBlock CFM"->{ Cell[1401276, 41871, 281, 8, 59, "Text", CellTags->"DefBlock CFM"]}, "FigBlock CFM"->{ Cell[1430283, 42980, 129, 6, 83, "NumberedFigure", CellTags->"FigBlock CFM"]}, "SubsBlock Ident Ver"->{ Cell[1430461, 42992, 204, 12, 33, "Subsection", CellTags->"SubsBlock Ident Ver"]}, "DefBlock challenge"->{ Cell[1432378, 43063, 1269, 39, 138, "Text", CellTags->"DefBlock challenge"]}, "FigBlock identity ver"->{ Cell[1433650, 43104, 2531, 97, 361, "NumberedFigure", CellTags->"FigBlock identity ver"]}, "SectBlock DES"->{ Cell[1436747, 43223, 125, 8, 33, "Section", CellTags->"SectBlock DES"]}, "SubsubsDES DES"->{ Cell[1436897, 43235, 57, 1, 63, "Subsubsection", CellTags->"SubsubsDES DES"]}, "DefBlock DES"->{ Cell[1436957, 43238, 482, 12, 83, "Text", CellTags->"DefBlock DES"]}, "FormBlock DES encr"->{ Cell[1452904, 43832, 798, 32, 56, "NumberedEquation", CellTags->"FormBlock DES encr"]}, "FigDES DES round"->{ Cell[1471476, 44602, 150, 4, 62, "NumberedFigure", PageBreakAbove->False, CellTags->"FigDES DES round"]}, "SubsubsDES Triple DES"->{ Cell[1473713, 44683, 71, 1, 37, "Subsubsection", CellTags->"SubsubsDES Triple DES"]}, "DefBlock Triple DES"->{ Cell[1473787, 44686, 512, 12, 83, "Text", CellTags->"DefBlock Triple DES"]}, "SectBlock IDEA"->{ Cell[1487303, 45232, 127, 8, 33, "Section", CellTags->"SectBlock IDEA"]}, "DefBlock IDEA"->{ Cell[1487814, 45250, 1542, 51, 134, "Text", CellTags->"DefBlock IDEA"]}, "DefBlock mult oper"->{ Cell[1492356, 45419, 363, 13, 60, "Text", CellTags->"DefBlock mult oper"]}, "FigBlock Idea"->{ Cell[1546939, 47580, 220, 5, 83, "NumberedFigure", CellTags->"FigBlock Idea"]}, "SectBlock Further"->{ Cell[1547313, 47595, 141, 8, 33, "Section", CellTags->"SectBlock Further"]}, "DefBlock RC5"->{ Cell[1547457, 47605, 704, 23, 59, "Text", CellTags->"DefBlock RC5"]}, "DefBlock lin and diff crypt"->{ Cell[1548591, 47643, 987, 30, 108, "Text", CellTags->"DefBlock lin and diff crypt"]}, "SectBlock Problems"->{ Cell[1550264, 47692, 135, 8, 33, "Section", CellTags->"SectBlock Problems"]}, "Chap Shannon"->{ Cell[1552405, 47785, 126, 6, 38, "Chapter", PageBreakAbove->True, CellTags->"Chap Shannon"]}, "SectShann Entropy"->{ Cell[1552556, 47795, 167, 8, 47, "Section", CellTags->"SectShann Entropy"]}, "FormShann information"->{ Cell[1554850, 47884, 284, 9, 33, "NumberedEquation", CellTags->"FormShann information"]}, "DefShann information"->{ Cell[1555137, 47895, 652, 20, 84, "Text", CellTags->"DefShann information"]}, "FormShann infor 1/2^k"->{ Cell[1558518, 48009, 335, 13, 37, "NumberedEquation", CellTags->"FormShann infor 1/2^k"]}, "DefShann entropy"->{ Cell[1558856, 48024, 2011, 81, 64, "Text", CellTags->"DefShann entropy"]}, "FormShann entropy"->{ Cell[1560870, 48107, 460, 17, 35, "NumberedEquation", CellTags->"FormShann entropy"]}, "FormShann entropy n=2"->{ Cell[1561947, 48155, 640, 25, 33, "NumberedEquation", CellTags->"FormShann entropy n=2"]}, "InputShann MultiEntropy"->{ Cell[1571432, 48379, 476, 15, 107, "Input", CellTags->"InputShann MultiEntropy"], Cell[1722310, 54027, 476, 15, 107, "Input", CellTags->"InputShann MultiEntropy"]}, "InterShann entropy"->{ Cell[1572505, 48421, 398, 12, 74, "DisplayFormula", CellTags->"InterShann entropy"]}, "PropShann P1"->{ Cell[1573126, 48443, 486, 16, 33, "DisplayFormula", CellTags->"PropShann P1"]}, "PropShann P2"->{ Cell[1573615, 48461, 834, 27, 56, "DisplayFormula", CellTags->"PropShann P2"]}, "PropShann P3"->{ Cell[1574452, 48490, 517, 17, 33, "DisplayFormula", CellTags->"PropShann P3"]}, "PropShann P5"->{ Cell[1574972, 48509, 1293, 47, 53, "DisplayFormula", CellTags->"PropShann P5"]}, "ExamShann unfair coin"->{ Cell[1579743, 48687, 1343, 52, 148, "Example", CellTags->"ExamShann unfair coin"]}, "ExamShann English"->{ Cell[1583920, 48840, 1412, 54, 144, "Example", CellTags->"ExamShann English"]}, "DefShann redundancy"->{ Cell[1586279, 48928, 1907, 73, 203, "Definition", CellTags->"DefShann redundancy"]}, "DefShann unicity dist"->{ Cell[1594386, 49205, 1549, 57, 199, "Definition", CellTags->"DefShann unicity dist"]}, "SectShann Mutual"->{ Cell[1598448, 49351, 178, 8, 33, "Section", CellTags->"SectShann Mutual"]}, "DefShann joint dis"->{ Cell[1598950, 49368, 721, 28, 62, "Text", CellTags->"DefShann joint dis"]}, "DefShann cond prob"->{ Cell[1599910, 49408, 603, 23, 37, "Text", CellTags->"DefShann cond prob"]}, "FormShann p(x|y)"->{ Cell[1600791, 49445, 510, 15, 35, "NumberedEquation", CellTags->"FormShann p(x|y)"]}, "FormShann H(X|y)"->{ Cell[1601673, 49480, 746, 24, 35, "NumberedEquation", CellTags->"FormShann H(X|y)"]}, "DefShann cond entropy"->{ Cell[1602422, 49506, 945, 38, 61, "Text", CellTags->"DefShann cond entropy"]}, "FormShann H(X|Y)"->{ Cell[1603370, 49546, 3159, 100, 206, "NumberedEquation", CellTags->"FormShann H(X|Y)"]}, "TheoShann chain rule"->{ Cell[1606881, 49664, 754, 31, 112, "Theorem", CellTags->"TheoShann chain rule"]}, "DefShann mutual inf"->{ Cell[1619820, 50128, 639, 26, 38, "Text", CellTags->"DefShann mutual inf"]}, "FormShann I(x;y)"->{ Cell[1620462, 50156, 2668, 87, 163, "NumberedEquation", CellTags->"FormShann I(x;y)"]}, "TheoShann I(X;Y)"->{ Cell[1623133, 50245, 948, 34, 90, "Theorem", CellTags->"TheoShann I(X;Y)"]}, "DefShann BSC"->{ Cell[1628149, 50430, 1452, 60, 111, "Example", CellTags->"DefShann BSC"]}, "FormShann H(M|KC)"->{ Cell[1635957, 50724, 361, 14, 36, "NumberedEquation", CellTags->"FormShann H(M|KC)"]}, "DefShann uncond secure"->{ Cell[1641512, 50930, 763, 32, 116, "Definition", CellTags->"DefShann uncond secure"]}, "SectShann Problems"->{ Cell[1645508, 51093, 163, 9, 33, "Section", PageBreakAbove->Automatic, CellTags->"SectShann Problems"]}, "Chap Huff"->{ Cell[1654032, 51443, 113, 5, 38, "Chapter", CellTags->"Chap Huff"]}, "DefHuff data compress"->{ Cell[1654148, 51450, 816, 24, 108, "Text", CellTags->"DefHuff data compress"]}, "SectHuff basics"->{ Cell[1654989, 51478, 178, 8, 47, "Section", CellTags->"SectHuff basics"]}, "DefHuff code"->{ Cell[1655170, 51488, 1973, 67, 137, "Text", CellTags->"DefHuff code"]}, "DefHuffman U.D."->{ Cell[1658086, 51587, 610, 24, 112, "Definition", CellTags->"DefHuffman U.D."]}, "ExamHuff unfair coin"->{ Cell[1658699, 51613, 2178, 78, 251, "Example", CellTags->"ExamHuff unfair coin"]}, "TheoHuff McMillan"->{ Cell[1660880, 51693, 902, 37, 113, "Theorem", CellTags->"TheoHuff McMillan"]}, "FormHuff McMillan"->{ Cell[1661785, 51732, 425, 13, 92, "NumberedEquation", CellTags->"FormHuff McMillan"]}, "DefHuff prefix code"->{ Cell[1667026, 51923, 498, 21, 90, "Definition", CellTags->"DefHuff prefix code"]}, "LemHuff prefix=>UD"->{ Cell[1668384, 51967, 307, 14, 90, "Theorem", CellTags->"LemHuff prefix=>UD"]}, "TheoHuff Kraft"->{ Cell[1668694, 51983, 760, 32, 91, "Theorem", CellTags->"TheoHuff Kraft"]}, "FormHuff Kraft"->{ Cell[1669457, 52017, 443, 13, 92, "NumberedEquation", CellTags->"FormHuff Kraft"]}, "TheoHuff P1-P5"->{ Cell[1694916, 52992, 2435, 87, 303, "Theorem", CellTags->"TheoHuff P1-P5"]}, "SectHuff Huffman"->{ Cell[1705035, 53379, 138, 8, 33, "Section", CellTags->"SectHuff Huffman"]}, "AlgHuff Huffman"->{ Cell[1705176, 53389, 859, 25, 109, "Text", CellTags->"AlgHuff Huffman"]}, "DefHuff reduction"->{ Cell[1706155, 53421, 1462, 52, 112, "Text", CellTags->"DefHuff reduction"]}, "DefHuff Splitting"->{ Cell[1707620, 53475, 1576, 52, 112, "Text", CellTags->"DefHuff Splitting"]}, "ExamHuff coding"->{ Cell[1711046, 53602, 610, 26, 86, "Example", CellTags->"ExamHuff coding"]}, "LemHuff Huffman"->{ Cell[1756834, 55331, 4692, 169, 237, "Theorem", CellTags->"LemHuff Huffman"]}, "SectHuff Lempel-Ziv"->{ Cell[1770355, 55831, 182, 8, 33, "Section", CellTags->"SectHuff Lempel-Ziv"]}, "DefHuff univ data comp"->{ Cell[1770540, 55841, 699, 22, 83, "Text", CellTags->"DefHuff univ data comp"]}, "DefHuff sliding"->{ Cell[1771242, 55865, 1494, 40, 184, "Text", CellTags->"DefHuff sliding"]}, "SubsubsHuff Ziv init"->{ Cell[1777799, 56051, 74, 1, 63, "Subsubsection", CellTags->"SubsubsHuff Ziv init"]}, "DefHuff dictionary"->{ Cell[1777876, 56054, 1015, 36, 83, "Text", CellTags->"DefHuff dictionary"]}, "SubsubsHuff Ziv enco"->{ Cell[1780230, 56146, 68, 1, 37, "Subsubsection", CellTags->"SubsubsHuff Ziv enco"]}, "AlgHuff encoding Lempel Ziv"->{ Cell[1780301, 56149, 1717, 72, 261, "Theorem", CellTags->"AlgHuff encoding Lempel Ziv"]}, "ExamHuff L-Z coding"->{ Cell[1784128, 56283, 957, 39, 126, "Example", CellTags->"ExamHuff L-Z coding"]}, "SubsubsHuff Ziv deco"->{ Cell[1800969, 56830, 122, 3, 40, "Subsubsection", CellTags->"SubsubsHuff Ziv deco"]}, "SectHuff Problems"->{ Cell[1813124, 57242, 134, 8, 33, "Section", CellTags->"SectHuff Problems"]}, "Chap Public"->{ Cell[1816584, 57385, 111, 5, 38, "Chapter", CellTags->"Chap Public"]}, "SectPubl model"->{ Cell[1816720, 57394, 145, 8, 47, "Section", CellTags->"SectPubl model"]}, "SubsPubl Motivation"->{ Cell[1816890, 57406, 187, 11, 47, "Subsection", CellTags->"SubsPubl Motivation"]}, "DefPubl Public Key"->{ Cell[1818895, 57478, 430, 15, 59, "Text", CellTags->"DefPubl Public Key"]}, "FigPubl Public"->{ Cell[1840422, 58319, 143, 3, 62, "NumberedFigure", CellTags->"FigPubl Public"]}, "PropPubl PK1"->{ Cell[1841559, 58361, 358, 14, 32, "DisplayFormula", CellTags->"PropPubl PK1"]}, "PropPubl PK2"->{ Cell[1841920, 58377, 464, 20, 32, "DisplayFormula", CellTags->"PropPubl PK2"]}, "PropPubl PK3"->{ Cell[1842387, 58399, 607, 25, 34, "DisplayFormula", CellTags->"PropPubl PK3"]}, "PropPubl PK4"->{ Cell[1842997, 58426, 464, 20, 32, "DisplayFormula", CellTags->"PropPubl PK4"]}, "PropPubl PK5"->{ Cell[1843464, 58448, 607, 25, 34, "DisplayFormula", CellTags->"PropPubl PK5"]}, "SubsPubl Confidentiality"->{ Cell[1844269, 58483, 186, 11, 33, "Subsection", CellTags->"SubsPubl Confidentiality"]}, "TablePubl Secrecy"->{ Cell[1847593, 58619, 100, 1, 62, "NumberedTable", CellTags->"TablePubl Secrecy"]}, "DefPubl one-way"->{ Cell[1848264, 58643, 469, 17, 60, "Text", CellTags->"DefPubl one-way"]}, "DefPubl trapdoor"->{ Cell[1849264, 58683, 248, 9, 36, "Text", CellTags->"DefPubl trapdoor"]}, "SubsPubl Signature"->{ Cell[1853062, 58819, 182, 11, 33, "Subsection", CellTags->"SubsPubl Signature"]}, "DiscPubl Discussion Signature"->{ Cell[1855382, 58928, 1236, 42, 108, "Text", CellTags->"DiscPubl Discussion Signature"]}, "TablePubl Signature"->{ Cell[1857560, 59007, 121, 4, 83, "NumberedTable", CellTags->"TablePubl Signature"]}, "SubsPubl Secr+Sign"->{ Cell[1857965, 59027, 202, 11, 33, "Subsection", CellTags->"SubsPubl Secr+Sign"]}, "SectPubl Problems"->{ Cell[1862684, 59227, 134, 8, 33, "Section", CellTags->"SectPubl Problems"]}, "Chap Discr"->{ Cell[1866343, 59374, 120, 5, 38, "Chapter", CellTags->"Chap Discr"]}, "SectDiscr Diffie Hellman"->{ Cell[1866488, 59383, 162, 8, 47, "Section", CellTags->"SectDiscr Diffie Hellman"]}, "SubSDiscr Log Problem"->{ Cell[1866675, 59395, 198, 11, 47, "Subsection", CellTags->"SubSDiscr Log Problem"]}, "FormDiscr c=a^m"->{ Cell[1868212, 59457, 169, 5, 33, "NumberedEquation", CellTags->"FormDiscr c=a^m"]}, "ExamDiscr 2 primitive"->{ Cell[1870584, 59557, 1542, 52, 138, "Example", CellTags->"ExamDiscr 2 primitive"]}, "FormDiscr 2 log q"->{ Cell[1874418, 59696, 1428, 46, 95, "Text", CellTags->"FormDiscr 2 log q"]}, "ExamDiscr Exp 171"->{ Cell[1875849, 59744, 626, 24, 86, "Example", CellTags->"ExamDiscr Exp 171"]}, "DefDiscr addition chain"->{ Cell[1878637, 59845, 1385, 56, 136, "Definition", CellTags->"DefDiscr addition chain"]}, "DefDiscr dis log prob"->{ Cell[1882561, 59998, 753, 29, 65, "Text", CellTags->"DefDiscr dis log prob"]}, "FormDiscr Knuth q^1/2"->{ Cell[1883317, 60029, 1146, 40, 115, "Text", CellTags->"FormDiscr Knuth q^1/2"]}, "TableDiscr discrep"->{ Cell[1884466, 60071, 333, 12, 169, "NumberedTable", CellTags->"TableDiscr discrep"]}, "SubsDiscr Dif-Hel Key Exch"->{ Cell[1884836, 60088, 211, 11, 33, "Subsection", CellTags->"SubsDiscr Dif-Hel Key Exch"]}, "DefDiscr key exch"->{ Cell[1885050, 60101, 539, 13, 83, "Text", CellTags->"DefDiscr key exch"]}, "DefDiscr Diffie Hellman"->{ Cell[1891314, 60350, 1885, 68, 280, "NumberedTable", CellTags->"DefDiscr Diffie Hellman"]}, "ExamDiscr Key Exch"->{ Cell[1893202, 60420, 1081, 42, 148, "Example", CellTags->"ExamDiscr Key Exch"]}, "SectDiscr Other Log Systems"->{ Cell[1895578, 60523, 174, 8, 33, "Section", CellTags->"SectDiscr Other Log Systems"]}, "SubsDiscr ElGamal"->{ Cell[1895777, 60535, 198, 11, 47, "Subsection", CellTags->"SubsDiscr ElGamal"]}, "SubsubsDisc ElGamal setting it up"->{ Cell[1896458, 60564, 86, 1, 63, "Subsubsection", CellTags->"SubsubsDisc ElGamal setting it up"]}, "SubsubsDiscr ElGamal secrecy"->{ Cell[1899143, 60669, 92, 1, 37, "Subsubsection", CellTags->"SubsubsDiscr ElGamal secrecy"]}, "SubsubsDiscr ElGamal signature"->{ Cell[1905758, 60939, 96, 1, 37, "Subsubsection", CellTags->"SubsubsDiscr ElGamal signature"]}, "FormDiscr ElGamal"->{ Cell[1906972, 60990, 377, 15, 33, "NumberedEquation", CellTags->"FormDiscr ElGamal"]}, "SubsDiscr Variations on ElGamal"->{ Cell[1913153, 61240, 196, 11, 33, "Subsection", CellTags->"SubsDiscr Variations on ElGamal"]}, "DefDiscr sign eq."->{ Cell[1913352, 61253, 1040, 41, 60, "Text", CellTags->"DefDiscr sign eq."]}, "SubsubsDisc DSS"->{ Cell[1914776, 61312, 81, 1, 63, "Subsubsection", CellTags->"SubsubsDisc DSS"]}, "DefDiscr DSS"->{ Cell[1914860, 61315, 281, 11, 34, "Text", CellTags->"DefDiscr DSS"]}, "DefDiscr SHA"->{ Cell[1915480, 61342, 834, 23, 132, "Text", CellTags->"DefDiscr SHA"]}, "SubsubsDisc Schnorr"->{ Cell[1922003, 61598, 85, 1, 37, "Subsubsection", CellTags->"SubsubsDisc Schnorr"]}, "DefDiscr Schnorr"->{ Cell[1922091, 61601, 371, 15, 34, "Text", CellTags->"DefDiscr Schnorr"]}, "SubsubsDisc Nyberg"->{ Cell[1922798, 61634, 93, 1, 37, "Subsubsection", CellTags->"SubsubsDisc Nyberg"]}, "DefDiscr Nyberg-R"->{ Cell[1922894, 61637, 363, 14, 34, "Text", CellTags->"DefDiscr Nyberg-R"]}, "SectDiscr How to take logs"->{ Cell[1925442, 61747, 166, 8, 33, "Section", CellTags->"SectDiscr How to take logs"]}, "AlgDiscr Pohlig Hellman"->{ Cell[1926586, 61788, 198, 11, 47, "Subsection", CellTags->"AlgDiscr Pohlig Hellman"]}, "CaseDiscr q-1 is 2power"->{ Cell[1927301, 61822, 217, 8, 65, "Subsubsection", CellTags->"CaseDiscr q-1 is 2power"]}, "RemDiscr Pohlig"->{ Cell[1939413, 62308, 516, 21, 60, "Text", CellTags->"RemDiscr Pohlig"]}, "CaseDiscr small powers"->{ Cell[1945069, 62557, 199, 7, 39, "Subsubsection", CellTags->"CaseDiscr small powers"]}, "FormDiscr m^(i)"->{ Cell[1946291, 62605, 494, 19, 33, "NumberedEquation", CellTags->"FormDiscr m^(i)"]}, "DefDiscr Table PH"->{ Cell[1949891, 62747, 1133, 42, 65, "Text", CellTags->"DefDiscr Table PH"]}, "CaseDiscr Exam P-H"->{ Cell[1954972, 62942, 100, 1, 37, "Subsubsection", CellTags->"CaseDiscr Exam P-H"]}, "SubSDiscr Baby Step"->{ Cell[1976816, 63830, 197, 11, 33, "Subsection", CellTags->"SubSDiscr Baby Step"]}, "AlgDiscr Baby Giant"->{ Cell[1987449, 64236, 2625, 100, 274, "Theorem", CellTags->"AlgDiscr Baby Giant"]}, "SubSDiscr Pollard"->{ Cell[1995756, 64555, 189, 11, 33, "Subsection", CellTags->"SubSDiscr Pollard"]}, "ExamDiscr Pollard"->{ Cell[1997902, 64645, 2013, 68, 161, "Example", CellTags->"ExamDiscr Pollard"]}, "DefDiscr Floyd"->{ Cell[2014021, 65285, 2269, 91, 115, "Text", CellTags->"DefDiscr Floyd"]}, "SubSDiscr Index Calc"->{ Cell[2028805, 65829, 192, 11, 33, "Subsection", CellTags->"SubSDiscr Index Calc"]}, "SubsubsDiscr Index general"->{ Cell[2029022, 65844, 84, 1, 63, "Subsubsection", CellTags->"SubsubsDiscr Index general"]}, "DefDiscr factor base"->{ Cell[2030374, 65900, 1294, 49, 85, "Text", CellTags->"DefDiscr factor base"]}, "SubsubsDiscr Index Mod p"->{ Cell[2038035, 66195, 309, 11, 42, "Subsubsection", CellTags->"SubsubsDiscr Index Mod p"]}, "SubsubsDiscr Index 2^n"->{ Cell[2065389, 67224, 170, 4, 37, "Subsubsection", CellTags->"SubsubsDiscr Index 2^n"]}, "ExamDiscr Index Calc2"->{ Cell[2073627, 67549, 1261, 44, 138, "Example", CellTags->"ExamDiscr Index Calc2"]}, "SectDiscr Problems"->{ Cell[2100122, 68563, 164, 10, 33, "Section", PageBreakAbove->False, CellTags->"SectDiscr Problems"]}, "Chap RSA"->{ Cell[2110003, 68978, 102, 5, 38, "Chapter", CellTags->"Chap RSA"]}, "SectRSA RSA"->{ Cell[2110130, 68987, 134, 8, 47, "Section", CellTags->"SectRSA RSA"]}, "SubsRSA RSA math"->{ Cell[2112338, 69079, 179, 11, 47, "Subsection", CellTags->"SubsRSA RSA math"]}, "FormRSA Euler Thm"->{ Cell[2113395, 69134, 574, 19, 57, "NumberedEquation", CellTags->"FormRSA Euler Thm"]}, "FormRSA EulerPhi"->{ Cell[2114506, 69175, 549, 18, 70, "NumberedEquation", CellTags->"FormRSA EulerPhi"]}, "SubsRSA RSA setting up"->{ Cell[2115972, 69234, 190, 11, 33, "Subsection", CellTags->"SubsRSA RSA setting up"]}, "SubsubsRSA compute n"->{ Cell[2116187, 69249, 231, 8, 63, "Subsubsection", CellTags->"SubsubsRSA compute n"]}, "FormRSA EulerPhi for RSA"->{ Cell[2117103, 69287, 709, 26, 52, "NumberedEquation", CellTags->"FormRSA EulerPhi for RSA"]}, "ExamRSA RSA"->{ Cell[2119458, 69380, 847, 32, 110, "Example", CellTags->"ExamRSA RSA"], Cell[2346926, 78307, 1017, 37, 110, "Example", CellTags->"ExamRSA RSA"]}, "SubsubsRSA compute e and d"->{ Cell[2120833, 69439, 322, 12, 37, "Subsubsection", CellTags->"SubsubsRSA compute e and d"]}, "FormRSA e.d=1"->{ Cell[2121955, 69488, 560, 21, 33, "NumberedEquation", CellTags->"FormRSA e.d=1"]}, "Random"->{ Cell[2124140, 69577, 604, 20, 146, "Input", CellTags->"Random"]}, "SubsubsRSA making public"->{ Cell[2125650, 69640, 349, 13, 37, "Subsubsection", CellTags->"SubsubsRSA making public"]}, "SubsRSA RSA secr"->{ Cell[2126860, 69693, 178, 11, 33, "Subsection", CellTags->"SubsRSA RSA secr"]}, "FormRSA check RSA secr"->{ Cell[2128409, 69762, 1268, 43, 52, "NumberedEquation", CellTags->"FormRSA check RSA secr"]}, "TableRSA RSA Privacy"->{ Cell[2130284, 69830, 1407, 48, 271, "NumberedTable", CellTags->"TableRSA RSA Privacy"]}, "ExamRSA Decryp Part 4"->{ Cell[2138677, 70160, 897, 37, 84, "Text", CellTags->"ExamRSA Decryp Part 4"], Cell[2339745, 78015, 1351, 56, 109, "Text", CellTags->"ExamRSA Decryp Part 4"]}, "SubsRSA RSA sign"->{ Cell[2143672, 70370, 181, 11, 33, "Subsection", CellTags->"SubsRSA RSA sign"]}, "FormRSA check RSA sign"->{ Cell[2145058, 70428, 1268, 43, 52, "NumberedEquation", CellTags->"FormRSA check RSA sign"]}, "TableRSA RSA Signature"->{ Cell[2147797, 70534, 1544, 53, 311, "NumberedTable", CellTags->"TableRSA RSA Signature"]}, "SubsRSA RSA secr + sign"->{ Cell[2150540, 70644, 197, 11, 33, "Subsection", CellTags->"SubsRSA RSA secr + sign"]}, "FormRSA RSA secr+sign"->{ Cell[2151300, 70674, 520, 19, 37, "NumberedEquation", CellTags->"FormRSA RSA secr+sign"]}, "TableRSA RSA Secr+Sign"->{ Cell[2154115, 70783, 4106, 145, 434, "DisplayFormula", CellTags->"TableRSA RSA Secr+Sign"]}, "SectRSA Security"->{ Cell[2161982, 71068, 175, 8, 33, "Section", CellTags->"SectRSA Security"]}, "SubsRSA cryptanalist"->{ Cell[2162182, 71080, 195, 11, 47, "Subsection", CellTags->"SubsRSA cryptanalist"]}, "DiscRSA fact=break"->{ Cell[2169399, 71317, 519, 13, 83, "Text", CellTags->"DiscRSA fact=break"]}, "ExamRSA p-q small"->{ Cell[2171915, 71400, 662, 30, 87, "Example", CellTags->"ExamRSA p-q small"]}, "SubsRSA factorization"->{ Cell[2176498, 71598, 225, 11, 33, "Subsection", CellTags->"SubsRSA factorization"]}, "SubsubsRSA Pollard p-1"->{ Cell[2177245, 71629, 173, 7, 65, "Subsubsection", CellTags->"SubsubsRSA Pollard p-1"]}, "DefRSA Smooth"->{ Cell[2178047, 71666, 1074, 38, 87, "Text", CellTags->"DefRSA Smooth"]}, "FormRSA prod prime smooth"->{ Cell[2181446, 71809, 426, 13, 37, "NumberedEquation", CellTags->"FormRSA prod prime smooth"]}, "DefRSA Strong prime"->{ Cell[2195057, 72341, 765, 28, 61, "Text", CellTags->"DefRSA Strong prime"]}, "SubsRSA Factorization General"->{ Cell[2195871, 72375, 208, 11, 33, "Subsection", CellTags->"SubsRSA Factorization General"]}, "SubsubsRSA Pollard rho"->{ Cell[2196104, 72390, 92, 1, 63, "Subsubsection", CellTags->"SubsubsRSA Pollard rho"]}, "ExamRSA Pollard rho"->{ Cell[2203123, 72679, 969, 40, 86, "Example", CellTags->"ExamRSA Pollard rho"]}, "SubsubsRSA Random Square"->{ Cell[2205899, 72793, 95, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Random Square"]}, "FormRSA a^2=b"->{ Cell[2207655, 72859, 296, 11, 36, "NumberedEquation", CellTags->"FormRSA a^2=b"]}, "StepRSA quadr sieve 3"->{ Cell[2210253, 72965, 2916, 104, 167, "Text", CellTags->"StepRSA quadr sieve 3"]}, "SubsubsRSA Q Sieve"->{ Cell[2241923, 74150, 73, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Q Sieve"]}, "ExamRSA quadr sieve"->{ Cell[2253574, 74618, 1235, 50, 110, "Example", CellTags->"ExamRSA quadr sieve"]}, "SectRSA unsafe modes"->{ Cell[2261599, 74908, 204, 11, 33, "Section", CellTags->"SectRSA unsafe modes"]}, "SubsRSA Coppersmith"->{ Cell[2261828, 74923, 234, 13, 47, "Subsection", CellTags->"SubsRSA Coppersmith"]}, "SubsubsRSA m^3"->{ Cell[2262984, 74962, 195, 6, 63, "Subsubsection", CellTags->"SubsubsRSA m^3"]}, "ExamRSA e=3 same m"->{ Cell[2266487, 75096, 1268, 53, 150, "Example", CellTags->"ExamRSA e=3 same m"]}, "SubsubsRSA Copper"->{ Cell[2271882, 75326, 175, 5, 37, "Subsubsection", CellTags->"SubsubsRSA Copper"]}, "FormRSA Copp Red"->{ Cell[2274785, 75441, 1475, 52, 67, "NumberedEquation", CellTags->"FormRSA Copp Red"]}, "ExamRSA Copper"->{ Cell[2293707, 76178, 3363, 131, 249, "Example", CellTags->"ExamRSA Copper"]}, "SubsRSA Wiener attack"->{ Cell[2305467, 76658, 253, 13, 33, "Subsection", CellTags->"SubsRSA Wiener attack"]}, "FormRSA Wien ed"->{ Cell[2310941, 76866, 506, 20, 44, "NumberedEquation", CellTags->"FormRSA Wien ed"]}, "FormRSA Wien k/dg"->{ Cell[2312952, 76955, 534, 20, 46, "NumberedEquation", CellTags->"FormRSA Wien k/dg"]}, "SubsRSA physical"->{ Cell[2329805, 77645, 229, 13, 33, "Subsection", CellTags->"SubsRSA physical"]}, "SubsubsRSA Timing"->{ Cell[2330313, 77668, 115, 3, 63, "Subsubsection", CellTags->"SubsubsRSA Timing"]}, "SubsubsRSA Microwave"->{ Cell[2332956, 77757, 84, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Microwave"]}, "SectRSA generate primes"->{ Cell[2344476, 78209, 189, 8, 33, "Section", CellTags->"SectRSA generate primes"]}, "SubsRSA try random"->{ Cell[2344690, 78221, 186, 11, 47, "Subsection", CellTags->"SubsRSA try random"]}, "AlgRSA generate prime"->{ Cell[2345093, 78240, 1007, 39, 176, "Theorem", CellTags->"AlgRSA generate prime"]}, "SubsRSA prob appr"->{ Cell[2353578, 78552, 193, 11, 33, "Subsection", CellTags->"SubsRSA prob appr"]}, "SubsubsRSA Solovay"->{ Cell[2353796, 78567, 97, 1, 63, "Subsubsection", CellTags->"SubsubsRSA Solovay"]}, "FormRSA qr"->{ Cell[2354646, 78604, 258, 10, 34, "DisplayFormula", CellTags->"FormRSA qr"]}, "FormRSA u^(p-1)/2="->{ Cell[2362898, 78921, 380, 15, 46, "NumberedEquation", CellTags->"FormRSA u^(p-1)/2="]}, "TheoRSA Solovay"->{ Cell[2363487, 78947, 1129, 42, 188, "Theorem", CellTags->"TheoRSA Solovay"]}, "FormRSA a=1+p"->{ Cell[2369838, 79185, 396, 13, 33, "NumberedEquation", CellTags->"FormRSA a=1+p"]}, "FormRSA a=1 mod s"->{ Cell[2370237, 79200, 375, 12, 33, "NumberedEquation", CellTags->"FormRSA a=1 mod s"]}, "FormRSA u=a p1"->{ Cell[2375519, 79401, 450, 17, 33, "NumberedEquation", CellTags->"FormRSA u=a p1"]}, "AlgRSA Solovay"->{ Cell[2379842, 79572, 1870, 85, 285, "Theorem", CellTags->"AlgRSA Solovay"]}, "SubsubsRSA Miller-Rabin"->{ Cell[2384773, 79779, 80, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Miller-Rabin"]}, "DefRSA strong witness"->{ Cell[2390767, 80014, 1181, 47, 66, "Text", CellTags->"DefRSA strong witness"]}, "DefRSA strong liar"->{ Cell[2391951, 80063, 1212, 44, 91, "Text", CellTags->"DefRSA strong liar"]}, "AlgRSA Miller-Rabin"->{ Cell[2393166, 80109, 3758, 169, 507, "Theorem", CellTags->"AlgRSA Miller-Rabin"]}, "SubsRSA Lenstra"->{ Cell[2406012, 80653, 192, 11, 33, "Subsection", CellTags->"SubsRSA Lenstra"]}, "TheoRSA Fermat"->{ Cell[2407212, 80697, 473, 21, 90, "Theorem", CellTags->"TheoRSA Fermat"]}, "FormRSA Fermat"->{ Cell[2407688, 80720, 366, 12, 55, "NumberedEquation", CellTags->"FormRSA Fermat"]}, "DefRSA Carmichael"->{ Cell[2411890, 80875, 676, 27, 37, "Text", CellTags->"DefRSA Carmichael"]}, "TheoRSA Lenstra 1"->{ Cell[2416548, 81064, 440, 19, 90, "Theorem", CellTags->"TheoRSA Lenstra 1"]}, "FormRSA Cond Lenstra 1"->{ Cell[2416991, 81085, 683, 24, 57, "NumberedEquation", CellTags->"FormRSA Cond Lenstra 1"]}, "FormRSA Cond Lenstra 2"->{ Cell[2417677, 81111, 550, 19, 57, "NumberedEquation", CellTags->"FormRSA Cond Lenstra 2"]}, "FormRSA m^j mod 24"->{ Cell[2418466, 81143, 403, 12, 55, "NumberedEquation", CellTags->"FormRSA m^j mod 24"]}, "FormRSA m^j mod 24 j=0"->{ Cell[2419001, 81161, 466, 16, 57, "NumberedEquation", CellTags->"FormRSA m^j mod 24 j=0"]}, "AlgRSA Lenstra small"->{ Cell[2423312, 81321, 2871, 130, 288, "Theorem", CellTags->"AlgRSA Lenstra small"]}, "LemRSA m1=m2 mod 24"->{ Cell[2430002, 81598, 1108, 46, 133, "Theorem", CellTags->"LemRSA m1=m2 mod 24"]}, "LemRSA m^2 mod 24"->{ Cell[2435333, 81809, 706, 30, 135, "Theorem", CellTags->"LemRSA m^2 mod 24"]}, "FormRSA u/d u/m"->{ Cell[2445549, 82215, 387, 14, 38, "NumberedEquation", CellTags->"FormRSA u/d u/m"]}, "SectRSA Rabin"->{ Cell[2454411, 82567, 139, 8, 33, "Section", CellTags->"SectRSA Rabin"]}, "SubsRSA Rabin Encr"->{ Cell[2455190, 82603, 193, 12, 47, "Subsection", CellTags->"SubsRSA Rabin Encr"]}, "FormRSA e=2"->{ Cell[2455878, 82636, 168, 7, 33, "NumberedEquation", CellTags->"FormRSA e=2"]}, "FormRSA Rabin encr"->{ Cell[2458458, 82735, 280, 9, 34, "NumberedEquation", CellTags->"FormRSA Rabin encr"]}, "ExamRSA Rabin"->{ Cell[2459226, 82766, 1028, 42, 110, "Example", CellTags->"ExamRSA Rabin"]}, "SubSRSA Rabin decr"->{ Cell[2463994, 82948, 175, 11, 33, "Subsection", CellTags->"SubSRSA Rabin decr"]}, "SubsubsRSA Rabin pre"->{ Cell[2464194, 82963, 74, 1, 63, "Subsubsection", CellTags->"SubsubsRSA Rabin pre"]}, "FormRSA CRT eq for a"->{ Cell[2464830, 82986, 512, 19, 33, "NumberedEquation", CellTags->"FormRSA CRT eq for a"]}, "FormRSA CRT eq for b"->{ Cell[2465345, 83007, 512, 19, 33, "NumberedEquation", CellTags->"FormRSA CRT eq for b"]}, "SubsubsRSA find square root"->{ Cell[2469172, 83162, 110, 1, 37, "Subsubsection", CellTags->"SubsubsRSA find square root"]}, "CaseRSA Rabin 2"->{ Cell[2476011, 83425, 288, 11, 36, "Text", CellTags->"CaseRSA Rabin 2"]}, "CaseRSA Rabin 3"->{ Cell[2481603, 83647, 288, 11, 36, "Text", CellTags->"CaseRSA Rabin 3"]}, "FormRSA (x-u)^2-c"->{ Cell[2483446, 83722, 474, 17, 33, "NumberedEquation", CellTags->"FormRSA (x-u)^2-c"]}, "FormRSA (r+u)/(s+u)"->{ Cell[2485040, 83783, 622, 21, 36, "NumberedEquation", CellTags->"FormRSA (r+u)/(s+u)"]}, "InputAppA ListQuadRes"->{ Cell[2491190, 84012, 201, 6, 120, "Input", CellTags->"InputAppA ListQuadRes"], Cell[3779165, 132080, 201, 6, 120, "Input", CellTags->"InputAppA ListQuadRes"]}, "FormRSA gcd for square root"->{ Cell[2493065, 84091, 587, 22, 37, "NumberedEquation", CellTags->"FormRSA gcd for square root"]}, "SubsubsRSA Rabin 4 solutions"->{ Cell[2497495, 84257, 86, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Rabin 4 solutions"]}, "SubsRSA distinguish"->{ Cell[2507877, 84698, 211, 12, 33, "Subsection", CellTags->"SubsRSA distinguish"]}, "ExamRSA Rabin four"->{ Cell[2515379, 84993, 1492, 60, 173, "Example", CellTags->"ExamRSA Rabin four"]}, "SubsRSA Equivalence"->{ Cell[2520867, 85204, 273, 13, 33, "Subsection", CellTags->"SubsRSA Equivalence"]}, "TheoRSA Rabin equiv compl"->{ Cell[2521714, 85238, 1438, 55, 138, "Theorem", CellTags->"TheoRSA Rabin equiv compl"]}, "SectRSA Problems"->{ Cell[2529876, 85553, 133, 8, 33, "Section", CellTags->"SectRSA Problems"]}, "ProbRSA RSA when gcd>1"->{ Cell[2532395, 85662, 598, 22, 81, "Problem", CellTags->"ProbRSA RSA when gcd>1"]}, "ProbRSA 9.7"->{ Cell[2540007, 85959, 620, 27, 58, "Problem", CellTags->"ProbRSA 9.7"]}, "ProbRSA Rabin non-trivial factor"->{ Cell[2545217, 86184, 871, 31, 101, "Problem", CellTags->"ProbRSA Rabin non-trivial factor"]}, "ProbRSA Rabin decrypt 5(8)"->{ Cell[2546981, 86249, 2764, 108, 154, "Problem", CellTags->"ProbRSA Rabin decrypt 5(8)"]}, "Chap Ellip"->{ Cell[2549794, 86363, 116, 5, 38, "Chapter", CellTags->"Chap Ellip"]}, "SectEllip Basic facts"->{ Cell[2550663, 86389, 165, 8, 47, "Section", CellTags->"SectEllip Basic facts"]}, "FormEllip Weierstrass"->{ Cell[2552002, 86451, 430, 15, 34, "NumberedEquation", CellTags->"FormEllip Weierstrass"]}, "FormEllip Red Weier"->{ Cell[2553394, 86506, 392, 15, 34, "NumberedEquation", CellTags->"FormEllip Red Weier"]}, "FormEllip Weier Red p>3"->{ Cell[2554110, 86537, 270, 10, 34, "NumberedEquation", CellTags->"FormEllip Weier Red p>3"]}, "FormEllip Weier Red p=2"->{ Cell[2554647, 86561, 350, 13, 34, "NumberedEquation", CellTags->"FormEllip Weier Red p=2"]}, "FormEllip Weier Red p=2 super"->{ Cell[2555000, 86576, 328, 12, 34, "NumberedEquation", CellTags->"FormEllip Weier Red p=2 super"]}, "DefEllip elliptic curve"->{ Cell[2555331, 86590, 891, 37, 113, "Definition", CellTags->"DefEllip elliptic curve"]}, "TheoEllip Hasse"->{ Cell[2567701, 87034, 782, 33, 140, "Theorem", CellTags->"TheoEllip Hasse"]}, "ExamEllip point on EC?"->{ Cell[2569622, 87112, 1686, 65, 119, "Example", CellTags->"ExamEllip point on EC?"]}, "SectEllip geometry"->{ Cell[2573431, 87268, 158, 8, 33, "Section", CellTags->"SectEllip geometry"]}, "SubsubsEllip two points"->{ Cell[2602717, 88019, 142, 3, 63, "Subsubsection", CellTags->"SubsubsEllip two points"]}, "FormEllip lambda"->{ Cell[2604479, 88086, 534, 21, 46, "NumberedEquation", CellTags->"FormEllip lambda"]}, "FormEllip x3 p>2"->{ Cell[2606595, 88165, 303, 11, 35, "NumberedEquation", CellTags->"FormEllip x3 p>2"]}, "FormEllip y3 p>2"->{ Cell[2606935, 88180, 343, 13, 33, "NumberedEquation", CellTags->"FormEllip y3 p>2"]}, "FormEllip x3 p=2"->{ Cell[2612942, 88424, 321, 11, 35, "NumberedEquation", CellTags->"FormEllip x3 p=2"]}, "FormEllip y3 p=2"->{ Cell[2613266, 88437, 343, 13, 33, "NumberedEquation", CellTags->"FormEllip y3 p=2"]}, "SubsubsEllip tangent"->{ Cell[2613822, 88463, 119, 3, 37, "Subsubsection", CellTags->"SubsubsEllip tangent"]}, "DefEllip tangent"->{ Cell[2613944, 88468, 1083, 35, 85, "Text", CellTags->"DefEllip tangent"]}, "DefEllip derivative"->{ Cell[2622608, 88663, 1020, 36, 85, "Text", CellTags->"DefEllip derivative"]}, "FormEllip lambda tang p>2"->{ Cell[2625030, 88755, 605, 23, 56, "NumberedEquation", CellTags->"FormEllip lambda tang p>2"]}, "FormEllip lambda tang p=2"->{ Cell[2627632, 88860, 657, 25, 56, "NumberedEquation", CellTags->"FormEllip lambda tang p=2"]}, "FormEllip 2x1 p=2"->{ Cell[2630206, 88962, 294, 11, 48, "NumberedEquation", CellTags->"FormEllip 2x1 p=2"]}, "FormEllip 2y1 p=2"->{ Cell[2630645, 88983, 449, 17, 52, "NumberedEquation", CellTags->"FormEllip 2y1 p=2"]}, "SectEllip Addition"->{ Cell[2636607, 89234, 165, 8, 33, "Section", CellTags->"SectEllip Addition"]}, "DefEllip Addition"->{ Cell[2640505, 89393, 3801, 151, 443, "Definition", CellTags->"DefEllip Addition"]}, "TheoEllip Additive Group"->{ Cell[2675454, 90198, 572, 21, 112, "Theorem", CellTags->"TheoEllip Additive Group"]}, "InputEllip addition"->{ Cell[2677302, 90270, 7174, 212, 497, "Input", InitializationCell->True, CellTags->"InputEllip addition"], Cell[4500394, 155261, 5996, 153, 377, "Input", CellTags->"InputEllip addition"]}, "DefEllip order"->{ Cell[2687095, 90582, 2259, 91, 108, "Text", CellTags->"DefEllip order"]}, "SectEllip EC-cryptosystems"->{ Cell[2693278, 90820, 177, 8, 33, "Section", CellTags->"SectEllip EC-cryptosystems"]}, "SubsElip discr log problem"->{ Cell[2694666, 90865, 224, 11, 47, "Subsection", CellTags->"SubsElip discr log problem"]}, "DefEllip Discr Log Prob"->{ Cell[2698969, 91047, 928, 36, 114, "Definition", CellTags->"DefEllip Discr Log Prob"]}, "SubsElip discr log system"->{ Cell[2700922, 91127, 222, 11, 33, "Subsection", CellTags->"SubsElip discr log system"]}, "TableEllip Diffie Hellman"->{ Cell[2703213, 91215, 1925, 71, 224, "DisplayFormula", CellTags->"TableEllip Diffie Hellman"]}, "ExamEllip Key Exchange"->{ Cell[2705359, 91297, 1265, 51, 112, "Example", CellTags->"ExamEllip Key Exchange"]}, "SubsElip security"->{ Cell[2715793, 91673, 215, 11, 33, "Subsection", CellTags->"SubsElip security"]}, "DefEllip Xedni"->{ Cell[2716721, 91708, 1234, 27, 181, "Text", CellTags->"DefEllip Xedni"]}, "DefEllip homogenize"->{ Cell[2718943, 91772, 470, 13, 59, "Text", CellTags->"DefEllip homogenize"]}, "DefEllip singular"->{ Cell[2721124, 91847, 907, 31, 60, "Text", CellTags->"DefEllip singular"]}, "DefEllip supersingular"->{ Cell[2723450, 91934, 404, 11, 59, "Text", CellTags->"DefEllip supersingular"]}, "DefEllip anomalous"->{ Cell[2723857, 91947, 423, 15, 37, "Text", CellTags->"DefEllip anomalous"]}, "SectEllip Problems"->{ Cell[2724329, 91968, 135, 8, 33, "Section", CellTags->"SectEllip Problems"]}, "Chap McEl"->{ Cell[2731397, 92268, 113, 5, 38, "Chapter", CellTags->"Chap McEl"]}, "SectMcEl Goppa"->{ Cell[2731535, 92277, 151, 8, 47, "Section", CellTags->"SectMcEl Goppa"]}, "TheoMcEl Goppa"->{ Cell[2732066, 92298, 693, 30, 91, "Theorem", CellTags->"TheoMcEl Goppa"]}, "FormMcEl Goppa"->{ Cell[2732762, 92330, 1337, 40, 68, "NumberedEquation", CellTags->"FormMcEl Goppa"]}, "DefMcEl Goppa code"->{ Cell[2734102, 92372, 1059, 46, 89, "Theorem", CounterIncrements->"None", CellTags->"DefMcEl Goppa code"]}, "DefMcEl codeword"->{ Cell[2735164, 92420, 3966, 141, 254, "Text", CellTags->"DefMcEl codeword"]}, "ExamMcEl Goppa"->{ Cell[2739576, 92579, 1525, 59, 118, "Example", CellTags->"ExamMcEl Goppa"]}, "S5.2.1"->{ Cell[2741104, 92640, 108, 3, 69, "Input", CellTags->"S5.2.1"]}, "DefMcEl parity ch ma"->{ Cell[2776525, 93948, 372, 15, 34, "Text", CellTags->"DefMcEl parity ch ma"]}, "FormMcEl Hc=0"->{ Cell[2776900, 93965, 686, 22, 36, "NumberedEquation", CellTags->"FormMcEl Hc=0"]}, "DefMcEl Syndrome"->{ Cell[2777589, 93989, 543, 22, 34, "Text", CellTags->"DefMcEl Syndrome"]}, "SectMcEl McEliece"->{ Cell[2779635, 94071, 151, 8, 33, "Section", CellTags->"SectMcEl McEliece"]}, "SubsMcEl System"->{ Cell[2780045, 94092, 172, 11, 47, "Subsection", CellTags->"SubsMcEl System"]}, "SubsubsMcEl setting it up"->{ Cell[2780242, 94107, 86, 1, 63, "Subsubsection", CellTags->"SubsubsMcEl setting it up"]}, "FormMcEl G\[RawStar]=SGP"->{ Cell[2782694, 94209, 282, 11, 34, "NumberedEquation", CellTags->"FormMcEl G\[RawStar]=SGP"]}, "SubsubsMcEl encryption"->{ Cell[2783557, 94252, 72, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl encryption"]}, "FormMcEl enc McE"->{ Cell[2784825, 94300, 468, 17, 33, "NumberedEquation", CellTags->"FormMcEl enc McE"]}, "DefMcEl weight"->{ Cell[2785296, 94319, 716, 27, 59, "Text", CellTags->"DefMcEl weight"]}, "SubsubsMcEl decryption"->{ Cell[2786049, 94351, 72, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl decryption"]}, "SubsMcEl Discussion"->{ Cell[2790377, 94521, 176, 11, 33, "Subsection", CellTags->"SubsMcEl Discussion"]}, "SubsubsMcEl summary"->{ Cell[2790578, 94536, 90, 1, 63, "Subsubsection", CellTags->"SubsubsMcEl summary"]}, "TableMcEl McEliece"->{ Cell[2794049, 94650, 83, 1, 62, "NumberedTable", CellTags->"TableMcEl McEliece"]}, "PropMcEl parameters"->{ Cell[2794682, 94673, 762, 31, 34, "Text", CellTags->"PropMcEl parameters"]}, "SubsubsMcEl heuristics"->{ Cell[2795481, 94709, 86, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl heuristics"]}, "DefMcEl NP-complete"->{ Cell[2796556, 94736, 943, 24, 132, "Text", CellTags->"DefMcEl NP-complete"]}, "SubsubsMcEl no sign"->{ Cell[2797536, 94765, 81, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl no sign"]}, "SubsMcEl Security"->{ Cell[2799518, 94836, 180, 11, 33, "Subsection", CellTags->"SubsMcEl Security"]}, "SubsubsMcEl guessing S and P"->{ Cell[2800293, 94871, 248, 10, 63, "Subsubsection", CellTags->"SubsubsMcEl guessing S and P"]}, "SubsubsMcEl exhaustive"->{ Cell[2802955, 94978, 93, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl exhaustive"]}, "ExamMcEl Hamming"->{ Cell[2804954, 95052, 645, 28, 86, "Example", CellTags->"ExamMcEl Hamming"]}, "SubsubsMcEl syndrome"->{ Cell[2809413, 95232, 77, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl syndrome"]}, "SubsubsMcEl guessing k correct"->{ Cell[2822609, 95722, 185, 6, 37, "Subsubsection", CellTags->"SubsubsMcEl guessing k correct"]}, "SubsubsMcEl multiple"->{ Cell[2834614, 96182, 101, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl multiple"]}, "SubsMcEl Example"->{ Cell[2841453, 96448, 202, 11, 33, "Subsection", CellTags->"SubsMcEl Example"]}, "SectMcEl Other technique"->{ Cell[2855342, 96909, 173, 8, 33, "Section", CellTags->"SectMcEl Other technique"]}, "DefMcEl Inf Set Dec"->{ Cell[2855518, 96919, 894, 25, 108, "Text", CellTags->"DefMcEl Inf Set Dec"]}, "AlgMcEl Bit Swap"->{ Cell[2856415, 96946, 7684, 303, 467, "Theorem", CellTags->"AlgMcEl Bit Swap"]}, "S5.52.1"->{ Cell[2867616, 97384, 83, 4, 91, "Input", CellTags->"S5.52.1"]}, "FormMcEl Pr(l-1|l)"->{ Cell[2869811, 97469, 555, 20, 42, "NumberedEquation", CellTags->"FormMcEl Pr(l-1|l)"]}, "FormMcEl Pr(l+1|l)"->{ Cell[2870369, 97491, 585, 21, 42, "NumberedEquation", CellTags->"FormMcEl Pr(l+1|l)"]}, "FormMcEl Pr(l|l)"->{ Cell[2870957, 97514, 1012, 39, 52, "NumberedEquation", CellTags->"FormMcEl Pr(l|l)"], Cell[2879696, 97840, 1672, 61, 111, "Text", CellTags->"FormMcEl Pr(l|l)"]}, "ExamMcEl Golay"->{ Cell[2871972, 97555, 1803, 75, 110, "Example", CellTags->"ExamMcEl Golay"]}, "FormMcEl Na="->{ Cell[2878100, 97779, 524, 18, 67, "NumberedEquation", CellTags->"FormMcEl Na="]}, "FormMcEl Nl="->{ Cell[2878627, 97799, 603, 21, 72, "NumberedEquation", CellTags->"FormMcEl Nl="]}, "TheoMcEl #steps"->{ Cell[2886295, 98087, 423, 16, 90, "Theorem", CellTags->"TheoMcEl #steps"]}, "SectMcEl Niederr"->{ Cell[2893220, 98348, 148, 8, 33, "Section", CellTags->"SectMcEl Niederr"]}, "FormMcEl H\[RawStar]=SHP"->{ Cell[2896482, 98476, 282, 11, 34, "NumberedEquation", CellTags->"FormMcEl H\[RawStar]=SHP"]}, "TableMcEl Niederreiter"->{ Cell[2904256, 98758, 91, 1, 62, "NumberedTable", CellTags->"TableMcEl Niederreiter"]}, "SectMcEl Problems"->{ Cell[2904384, 98764, 134, 8, 33, "Section", CellTags->"SectMcEl Problems"]}, "ProbMcEl rank"->{ Cell[2904521, 98774, 883, 35, 109, "Problem", CellTags->"ProbMcEl rank"]}, "Chap Knapsack"->{ Cell[2906820, 98872, 112, 5, 38, "Chapter", CellTags->"Chap Knapsack"]}, "SectKnap Knap System"->{ Cell[2906957, 98881, 148, 8, 47, "Section", CellTags->"SectKnap Knap System"]}, "SubsKnap Knap Problem"->{ Cell[2907130, 98893, 188, 11, 47, "Subsection", CellTags->"SubsKnap Knap Problem"]}, "DefKnap knapsack"->{ Cell[2908008, 98926, 698, 28, 91, "Definition", CellTags->"DefKnap knapsack"]}, "FormKnap knapsack"->{ Cell[2908709, 98956, 537, 17, 56, "NumberedEquation", CellTags->"FormKnap knapsack"]}, "DefKnap superincreasing"->{ Cell[2911836, 99073, 443, 18, 38, "Text", CellTags->"DefKnap superincreasing"]}, "AlgKnap solve superincr"->{ Cell[2915308, 99216, 2419, 112, 272, "Theorem", CellTags->"AlgKnap solve superincr"]}, "ExamKnap encryption"->{ Cell[2917730, 99330, 3517, 136, 244, "Example", CellTags->"ExamKnap encryption"]}, "InputKnap knap for superincr"->{ Cell[2921250, 99468, 1509, 42, 146, "Input", CellTags->"InputKnap knap for superincr"]}, "SubsKnap Knap System"->{ Cell[2923403, 99541, 186, 11, 33, "Subsection", CellTags->"SubsKnap Knap System"]}, "SubsubsKnap setting up"->{ Cell[2923614, 99556, 92, 1, 63, "Subsubsection", CellTags->"SubsubsKnap setting up"]}, "FormKnap M>sum"->{ Cell[2924703, 99601, 292, 9, 37, "NumberedEquation", CellTags->"FormKnap M>sum"]}, "FormKnap u'=w.u"->{ Cell[2925366, 99632, 496, 19, 33, "NumberedEquation", CellTags->"FormKnap u'=w.u"]}, "SubsubsKnap encryp"->{ Cell[2933916, 99972, 68, 1, 37, "Subsubsection", CellTags->"SubsubsKnap encryp"]}, "FormKnap encryption"->{ Cell[2934885, 100006, 368, 14, 36, "NumberedEquation", CellTags->"FormKnap encryption"]}, "SubsubsKnap decryp"->{ Cell[2937453, 100106, 68, 1, 37, "Subsubsection", CellTags->"SubsubsKnap decryp"]}, "SubsubsKnap discussion"->{ Cell[2943586, 100349, 82, 1, 37, "Subsubsection", CellTags->"SubsubsKnap discussion"]}, "TableKnap knapsack"->{ Cell[2943743, 100354, 3892, 134, 356, "NumberedTable", CellTags->"TableKnap knapsack"]}, "SectKnap L3-attack"->{ Cell[2960789, 100999, 218, 12, 33, "Section", CellTags->"SectKnap L3-attack"]}, "SubsKnap L3 Intro"->{ Cell[2961032, 101015, 181, 12, 47, "Subsection", CellTags->"SubsKnap L3 Intro"]}, "DefKnap density"->{ Cell[2963559, 101107, 1229, 49, 147, "Definition", CellTags->"DefKnap density"]}, "SubsKnap L3 lattices"->{ Cell[2968154, 101287, 180, 12, 33, "Subsection", CellTags->"SubsKnap L3 lattices"]}, "DefKnap lattice"->{ Cell[2968337, 101301, 2897, 102, 208, "Definition", CellTags->"DefKnap lattice"]}, "DefKnap basis"->{ Cell[2971237, 101405, 1306, 43, 87, "Text", CellTags->"DefKnap basis"]}, "AlgKnap Gram-Schmidt"->{ Cell[2985265, 101674, 1994, 69, 89, "Text", CellTags->"AlgKnap Gram-Schmidt"]}, "S5.53.1"->{ Cell[2991537, 101916, 158, 6, 134, "Input", CellTags->"S5.53.1"], Cell[2992964, 101970, 617, 20, 95, "Input", CellTags->"S5.53.1"]}, "SubsKnap L3 reduced basis"->{ Cell[2995005, 102049, 192, 12, 33, "Subsection", CellTags->"SubsKnap L3 reduced basis"]}, "DefKnap reduced"->{ Cell[2996250, 102105, 3512, 133, 191, "Definition", CellTags->"DefKnap reduced"]}, "TheoKnap complexity L3"->{ Cell[3006290, 102482, 2183, 81, 121, "Theorem", CellTags->"TheoKnap complexity L3"]}, "SubsKnap L3 attack"->{ Cell[3010270, 102634, 261, 16, 33, "Subsection", CellTags->"SubsKnap L3 attack"]}, "FormKnap the basis vectors"->{ Cell[3012304, 102722, 1346, 50, 123, "NumberedEquation", CellTags->"FormKnap the basis vectors"]}, "SubsKnap L3 reduction"->{ Cell[3034027, 103517, 291, 16, 33, "Subsection", CellTags->"SubsKnap L3 reduction"]}, "SectKnap ChorR"->{ Cell[3043584, 103919, 146, 8, 33, "Section", CellTags->"SectKnap ChorR"]}, "SubsubsKnap CR setting it up"->{ Cell[3044881, 103962, 130, 2, 63, "Subsubsection", CellTags->"SubsubsKnap CR setting it up"]}, "FormKnap CR a^Ui=x+i"->{ Cell[3049002, 104118, 364, 13, 34, "NumberedEquation", CellTags->"FormKnap CR a^Ui=x+i"]}, "FormKnap u=U+D"->{ Cell[3050071, 104161, 417, 17, 34, "NumberedEquation", CellTags->"FormKnap u=U+D"]}, "ExamKnap ChorR"->{ Cell[3051297, 104214, 1647, 59, 114, "Example", CellTags->"ExamKnap ChorR"]}, "SubsubsKnap CR encryp"->{ Cell[3069058, 104857, 112, 2, 37, "Subsubsection", CellTags->"SubsubsKnap CR encryp"]}, "FormKnap Sum mi=k"->{ Cell[3070675, 104919, 290, 11, 40, "NumberedEquation", CellTags->"FormKnap Sum mi=k"]}, "FormKnap CR encr"->{ Cell[3071003, 104934, 418, 15, 44, "NumberedEquation", CellTags->"FormKnap CR encr"]}, "AlgKnap conversion"->{ Cell[3077830, 105203, 2584, 114, 312, "Theorem", CellTags->"AlgKnap conversion"]}, "SubsubsKnap CR decryp"->{ Cell[3083271, 105431, 112, 2, 37, "Subsubsection", CellTags->"SubsubsKnap CR decryp"]}, "AlgKnap decrypt ChorR"->{ Cell[3089748, 105678, 1959, 83, 203, "Theorem", CellTags->"AlgKnap decrypt ChorR"]}, "Sectknap Problems"->{ Cell[3098860, 106047, 134, 8, 33, "Section", CellTags->"Sectknap Problems"]}, "Chap Auth"->{ Cell[3104693, 106295, 124, 5, 38, "Chapter", CellTags->"Chap Auth"]}, "SectAuth Introduction"->{ Cell[3104842, 106304, 142, 8, 47, "Section", CellTags->"SectAuth Introduction"]}, "DefAuth comp secure"->{ Cell[3106334, 106350, 659, 18, 83, "Text", CellTags->"DefAuth comp secure"]}, "DefAuth Uncond secure"->{ Cell[3106996, 106370, 794, 26, 83, "Text", CellTags->"DefAuth Uncond secure"]}, "SectAuth Hash"->{ Cell[3109175, 106426, 146, 8, 33, "Section", CellTags->"SectAuth Hash"]}, "DefAuth hash"->{ Cell[3109324, 106436, 1670, 53, 182, "Text", CellTags->"DefAuth hash"]}, "DefAuth one-way"->{ Cell[3111143, 106496, 691, 25, 59, "Text", CellTags->"DefAuth one-way"]}, "DefAuth weak col res"->{ Cell[3111837, 106523, 837, 32, 59, "Text", CellTags->"DefAuth weak col res"]}, "DefAuth strong col res"->{ Cell[3112677, 106557, 795, 31, 59, "Text", CellTags->"DefAuth strong col res"]}, "DefAuth MAC"->{ Cell[3119060, 106802, 1211, 39, 108, "Text", CellTags->"DefAuth MAC"]}, "AlgAuth MAC on DES"->{ Cell[3122156, 106915, 2005, 85, 197, "Theorem", CellTags->"AlgAuth MAC on DES"]}, "SectAuth Auth Codes"->{ Cell[3125375, 107043, 171, 8, 33, "Section", CellTags->"SectAuth Auth Codes"]}, "SubsAuth notions"->{ Cell[3125571, 107055, 181, 11, 47, "Subsection", CellTags->"SubsAuth notions"]}, "ExamAuth 1 bit"->{ Cell[3126834, 107092, 589, 21, 110, "Example", CellTags->"ExamAuth 1 bit"]}, "TableAuth 1 bit"->{ Cell[3127426, 107115, 500, 16, 200, "NumberedTable", CellTags->"TableAuth 1 bit"]}, "DefAuth auth code"->{ Cell[3129422, 107173, 1066, 42, 91, "Definition", CellTags->"DefAuth auth code"]}, "FormAuth one-to-one"->{ Cell[3130491, 107217, 544, 19, 57, "NumberedEquation", CellTags->"FormAuth one-to-one"]}, "DefAuth scheme"->{ Cell[3131358, 107252, 1293, 48, 85, "Text", CellTags->"DefAuth scheme"]}, "DefAuth A-code"->{ Cell[3134596, 107375, 1397, 57, 114, "Definition", CellTags->"DefAuth A-code"]}, "DefAuth imp attack"->{ Cell[3137037, 107472, 948, 28, 109, "Text", CellTags->"DefAuth imp attack"]}, "DefAuth subs attack"->{ Cell[3137988, 107502, 650, 15, 83, "Text", CellTags->"DefAuth subs attack"]}, "DefAuth P_I"->{ Cell[3140016, 107559, 494, 20, 90, "Definition", CellTags->"DefAuth P_I"]}, "DefAuth P_S"->{ Cell[3143191, 107667, 510, 21, 92, "Definition", CellTags->"DefAuth P_S"]}, "FormAuth P_S"->{ Cell[3143704, 107690, 1335, 40, 78, "NumberedEquation", CellTags->"FormAuth P_S"]}, "DefAuth deception"->{ Cell[3145480, 107748, 233, 7, 34, "Text", CellTags->"DefAuth deception"]}, "DefAuth P_D"->{ Cell[3145716, 107757, 339, 14, 33, "NumberedEquation", CellTags->"DefAuth P_D"]}, "TheoAuth PI>M/C"->{ Cell[3147706, 107826, 845, 32, 145, "Theorem", CellTags->"TheoAuth PI>M/C"]}, "TheoAuth PS>(M-1)/(C-1)"->{ Cell[3150032, 107909, 906, 34, 147, "Theorem", CellTags->"TheoAuth PS>(M-1)/(C-1)"]}, "DefAuth square root"->{ Cell[3154296, 108075, 263, 9, 34, "Text", CellTags->"DefAuth square root"]}, "TheoAuth M<=K+1"->{ Cell[3154562, 108086, 567, 23, 140, "Theorem", CellTags->"TheoAuth M<=K+1"]}, "SubsAuth PG constr"->{ Cell[3155633, 108135, 198, 11, 33, "Subsection", CellTags->"SubsAuth PG constr"]}, "SubsubsAuth PG def"->{ Cell[3156165, 108161, 83, 1, 63, "Subsubsection", CellTags->"SubsubsAuth PG def"]}, "DefAuth point and line"->{ Cell[3156622, 108172, 1125, 33, 83, "Text", CellTags->"DefAuth point and line"]}, "DefAuth Proj Plane"->{ Cell[3157750, 108207, 913, 33, 176, "Definition", CellTags->"DefAuth Proj Plane"]}, "DefAuth order PG2"->{ Cell[3163244, 108389, 1233, 50, 177, "Theorem", CellTags->"DefAuth order PG2"]}, "DefAuth Fano"->{ Cell[3223154, 110299, 194, 7, 34, "Text", CellTags->"DefAuth Fano"]}, "DefAuth incid matr"->{ Cell[3223351, 110308, 554, 18, 59, "Text", CellTags->"DefAuth incid matr"]}, "FormAuth A.A^T"->{ Cell[3226517, 110434, 338, 14, 33, "NumberedEquation", CellTags->"FormAuth A.A^T"]}, "SubsubsAuth PG constr"->{ Cell[3228773, 110523, 105, 1, 37, "Subsubsection", CellTags->"SubsubsAuth PG constr"]}, "FormAuth line"->{ Cell[3231209, 110621, 356, 13, 33, "NumberedEquation", CellTags->"FormAuth line"]}, "FormAuth plane"->{ Cell[3232835, 110689, 724, 26, 33, "NumberedEquation", CellTags->"FormAuth plane"]}, "TheoAuth PG constr"->{ Cell[3238549, 110906, 1134, 45, 114, "Theorem", CellTags->"TheoAuth PG constr"]}, "ExamAuth PG2-3"->{ Cell[3248173, 111266, 1161, 45, 111, "Example", CellTags->"ExamAuth PG2-3"]}, "SubsubsAuth PG A-code"->{ Cell[3261108, 111755, 101, 1, 37, "Subsubsection", CellTags->"SubsubsAuth PG A-code"]}, "DefAuth PG AC"->{ Cell[3261212, 111758, 1944, 74, 156, "Definition", CellTags->"DefAuth PG AC"]}, "TheoAuth PG-AC"->{ Cell[3263932, 111857, 1136, 44, 231, "Theorem", CellTags->"TheoAuth PG-AC"]}, "SubsAuth OA AC"->{ Cell[3276849, 112275, 191, 11, 33, "Subsection", CellTags->"SubsAuth OA AC"]}, "DefAuth OA"->{ Cell[3277043, 112288, 1066, 43, 138, "Definition", CellTags->"DefAuth OA"]}, "ExamAuth OA4-5-1"->{ Cell[3278312, 112341, 608, 27, 86, "Example", CellTags->"ExamAuth OA4-5-1"]}, "SubsAuth EC AC"->{ Cell[3302434, 113179, 196, 11, 33, "Subsection", CellTags->"SubsAuth EC AC"]}, "DefAuth V(n q)"->{ Cell[3303104, 113207, 1584, 64, 85, "Text", CellTags->"DefAuth V(n q)"]}, "FormAuth c+l1 in C"->{ Cell[3304818, 113280, 673, 26, 33, "NumberedEquation", CellTags->"FormAuth c+l1 in C"]}, "FormAuth c~c'"->{ Cell[3306086, 113335, 986, 36, 33, "NumberedEquation", CellTags->"FormAuth c~c'"]}, "ExamAuth Hamming"->{ Cell[3309643, 113468, 681, 30, 86, "Example", CellTags->"ExamAuth Hamming"]}, "TheoAuth EC=>A"->{ Cell[3314904, 113683, 1860, 69, 156, "Theorem", CellTags->"TheoAuth EC=>A"]}, "FormAuth P_I in Joh"->{ Cell[3317381, 113778, 525, 19, 57, "NumberedEquation", CellTags->"FormAuth P_I in Joh"]}, "ExamAuth RS-1"->{ Cell[3335073, 114442, 1295, 54, 111, "Example", CellTags->"ExamAuth RS-1"]}, "SectAuth Problems"->{ Cell[3338413, 114578, 134, 8, 33, "Section", CellTags->"SectAuth Problems"]}, "Chap Zero Knowledge"->{ Cell[3344701, 114836, 120, 5, 38, "Chapter", CellTags->"Chap Zero Knowledge"]}, "DefProt protocol"->{ Cell[3344824, 114843, 833, 20, 108, "Text", CellTags->"DefProt protocol"]}, "DefProt zero-know"->{ Cell[3345660, 114865, 939, 16, 181, "Text", CellTags->"DefProt zero-know"]}, "SectZero Zero Knowledge"->{ Cell[3346624, 114885, 156, 8, 47, "Section", CellTags->"SectZero Zero Knowledge"]}, "FigProt Fiat-Shamir"->{ Cell[3349922, 115001, 3281, 116, 456, "NumberedFigure", CellTags->"FigProt Fiat-Shamir"]}, "DefProt witness"->{ Cell[3353949, 115146, 327, 12, 34, "Text", CellTags->"DefProt witness"]}, "DefProt challenge"->{ Cell[3354279, 115160, 357, 14, 34, "Text", CellTags->"DefProt challenge"]}, "DefProt response"->{ Cell[3354639, 115176, 228, 9, 34, "Text", CellTags->"DefProt response"]}, "SectZero Schnorr"->{ Cell[3362258, 115451, 158, 8, 33, "Section", CellTags->"SectZero Schnorr"]}, "FigProt Schnorr"->{ Cell[3372684, 115850, 3876, 139, 476, "NumberedFigure", CellTags->"FigProt Schnorr"]}, "SectZero Problem"->{ Cell[3384087, 116277, 133, 8, 33, "Section", CellTags->"SectZero Problem"]}, "Chap Secr"->{ Cell[3384796, 116316, 108, 5, 38, "Chapter", CellTags->"Chap Secr"]}, "SectSecr Introduction"->{ Cell[3384929, 116325, 142, 8, 47, "Section", CellTags->"SectSecr Introduction"]}, "DefSecret access struc"->{ Cell[3387917, 116417, 1708, 63, 176, "Definition", CellTags->"DefSecret access struc"]}, "DefSecret minimal el"->{ Cell[3390146, 116499, 878, 28, 83, "Text", CellTags->"DefSecret minimal el"]}, "DefSecret perfect SSS"->{ Cell[3391027, 116529, 409, 18, 34, "Text", CellTags->"DefSecret perfect SSS"]}, "DefSecret SSS"->{ Cell[3391439, 116549, 2072, 73, 244, "Definition", CellTags->"DefSecret SSS"]}, "DefSecret share"->{ Cell[3393514, 116624, 630, 23, 60, "Text", CellTags->"DefSecret share"]}, "SectSecr Schemes"->{ Cell[3395840, 116713, 142, 8, 33, "Section", CellTags->"SectSecr Schemes"]}, "DefSecret Threshold"->{ Cell[3395985, 116723, 1197, 42, 86, "Text", CellTags->"DefSecret Threshold"]}, "PropThresh TS1"->{ Cell[3397185, 116767, 345, 15, 35, "Text", CellTags->"PropThresh TS1"]}, "PropThresh TS2"->{ Cell[3397533, 116784, 477, 17, 60, "Text", CellTags->"PropThresh TS2"]}, "ConstrThresh Shamir"->{ Cell[3399652, 116862, 640, 25, 93, "Theorem", CellTags->"ConstrThresh Shamir"], Cell[3423433, 117753, 3264, 123, 228, "Theorem", CellTags->"ConstrThresh Shamir"]}, "FormThresh Secret Function"->{ Cell[3400295, 116889, 759, 26, 62, "Text", CounterIncrements->"NumberedEquation", CellTags->"FormThresh Secret Function"]}, "FormThresh Share"->{ Cell[3401984, 116953, 552, 20, 60, "Text", CounterIncrements->"NumberedEquation", CellTags->"FormThresh Share"]}, "FormThresh LaGrange"->{ Cell[3407520, 117177, 778, 27, 51, "NumberedEquation", CellTags->"FormThresh LaGrange"]}, "ConstrThresh Shamir Gen"->{ Cell[3420245, 117641, 1734, 65, 139, "Text", CellTags->"ConstrThresh Shamir Gen"]}, "SectSecr Schemes with liars"->{ Cell[3422450, 117721, 164, 8, 33, "Section", CellTags->"SectSecr Schemes with liars"]}, "SectSecr SSS"->{ Cell[3435968, 118209, 143, 8, 33, "Section", CellTags->"SectSecr SSS"]}, "FigSecret One Bit"->{ Cell[3501204, 120609, 530, 21, 113, "DisplayFormula", CellTags->"FigSecret One Bit"]}, "DefSecret ideal SSS"->{ Cell[3505783, 120791, 506, 15, 59, "Text", CellTags->"DefSecret ideal SSS"]}, "TheoSecret Matrix descr"->{ Cell[3510564, 120966, 1989, 79, 136, "Theorem", CellTags->"TheoSecret Matrix descr"]}, "SectSecr visual"->{ Cell[3523908, 121456, 153, 8, 33, "Section", CellTags->"SectSecr visual"]}, "DefSecret Visual SSS"->{ Cell[3524064, 121466, 411, 9, 83, "Text", CellTags->"DefSecret Visual SSS"]}, "DefSecret Expansion factor"->{ Cell[3529973, 121795, 827, 24, 110, "Text", CellTags->"DefSecret Expansion factor"]}, "PropSecret VTS1"->{ Cell[3551765, 122904, 577, 23, 51, "Text", CellTags->"PropSecret VTS1"]}, "PropSecret VTS2"->{ Cell[3552345, 122929, 269, 12, 34, "Text", CellTags->"PropSecret VTS2"]}, "PropSecret VTS3"->{ Cell[3552617, 122943, 234, 9, 34, "Text", CellTags->"PropSecret VTS3"]}, "ExamSecret Visual n=4"->{ Cell[3553080, 122963, 793, 37, 87, "Example", CellTags->"ExamSecret Visual n=4"], Cell[3602617, 125091, 1009, 40, 87, "Example", CellTags->"ExamSecret Visual n=4"]}, "S5.23.1"->{ Cell[3557809, 123157, 100, 2, 69, "Input", CellTags->"S5.23.1"]}, "ConstrSecret Visual TS"->{ Cell[3579824, 124183, 2258, 87, 180, "Theorem", CellTags->"ConstrSecret Visual TS"]}, "CorSecret visual QR constr"->{ Cell[3590034, 124581, 2313, 97, 244, "Theorem", CellTags->"CorSecret visual QR constr"]}, "FormSecret inner prod"->{ Cell[3598630, 124937, 964, 34, 42, "NumberedEquation", CellTags->"FormSecret inner prod"]}, "SectSecr Problems"->{ Cell[3605854, 125209, 163, 9, 33, "Section", CellTags->"SectSecr Problems"]}, "ChapNumberTh"->{ Cell[3613770, 125528, 327, 5, 36, "Chapter", CounterAssignments->{{"Chapter", 0}, {"Section", 0}, {"Subsection", 0}, { "Subsubsection", 0}, {"Theorem", 0}, {"Definition", 0}, { "NumberedTable", 0}, {"Example", 0}, {"Problem", 0}, { "NumberedEquation", 0}, {"NumberedFigure", 0}}, CellTags->"ChapNumberTh"]}, "SectAppA Introduction"->{ Cell[3614122, 125537, 122, 7, 47, "Section", CellTags->"SectAppA Introduction"]}, "DefAppA divide"->{ Cell[3614460, 125553, 869, 39, 59, "Text", CellTags->"DefAppA divide"]}, "DefAppA prime"->{ Cell[3616637, 125647, 763, 33, 60, "Text", CellTags->"DefAppA prime"]}, "TheoAppA Euclid"->{ Cell[3618151, 125714, 324, 12, 112, "Theorem", CellTags->"TheoAppA Euclid"]}, "DefAppA Pi(x)"->{ Cell[3621251, 125825, 398, 16, 90, "Definition", CellTags->"DefAppA Pi(x)"]}, "TheoAppA Prime Numb Th"->{ Cell[3622289, 125867, 552, 23, 123, "Theorem", CellTags->"TheoAppA Prime Numb Th"]}, "DefAppA GCD"->{ Cell[3623383, 125914, 614, 24, 90, "Definition", CellTags->"DefAppA GCD"]}, "PropAppA GCD1"->{ Cell[3624000, 125940, 321, 12, 55, "NumberedEquationAppendix", CellTags->"PropAppA GCD1"]}, "PropAppA GCD2"->{ Cell[3624426, 125958, 495, 21, 57, "NumberedEquationAppendix", CellTags->"PropAppA GCD2"]}, "DefAppA LCM"->{ Cell[3625624, 126011, 543, 22, 90, "Definition", CellTags->"DefAppA LCM"]}, "PropAppA LCM1"->{ Cell[3626170, 126035, 335, 13, 55, "NumberedEquationAppendix", CellTags->"PropAppA LCM1"]}, "PropAppA LCM2"->{ Cell[3626610, 126054, 477, 20, 55, "NumberedEquationAppendix", CellTags->"PropAppA LCM2"]}, "DefAppA Alter GCD/LCM"->{ Cell[3632086, 126295, 687, 26, 90, "Definition", CounterIncrements->"None", CellTags->"DefAppA Alter GCD/LCM"]}, "DefAppA coprime"->{ Cell[3633580, 126357, 235, 6, 34, "Text", CellTags->"DefAppA coprime"]}, "TheoAppA GCD=ua+vb"->{ Cell[3633818, 126365, 1185, 49, 220, "Theorem", CellTags->"TheoAppA GCD=ua+vb"]}, "LemAppA d Div ab"->{ Cell[3635079, 126418, 665, 31, 91, "Theorem", CellTags->"LemAppA d Div ab"]}, "TheoAppA Fundamental"->{ Cell[3638767, 126582, 670, 26, 137, "Theorem", CellTags->"TheoAppA Fundamental"]}, "FormAppA gcd=ProdMin"->{ Cell[3640373, 126653, 546, 19, 40, "NumberedEquationAppendix", CellTags->"FormAppA gcd=ProdMin"]}, "FormAppA lcm=ProdMax"->{ Cell[3640922, 126674, 504, 18, 40, "NumberedEquationAppendix", CellTags->"FormAppA lcm=ProdMax"]}, "FormAppA gcd lcm=mn"->{ Cell[3641429, 126694, 353, 13, 33, "NumberedEquationAppendix", CellTags->"FormAppA gcd lcm=mn"]}, "SectAppA Euclid"->{ Cell[3644361, 126809, 117, 6, 33, "Section", CellTags->"SectAppA Euclid"]}, "AlgAppA Simple Euclid"->{ Cell[3647063, 126920, 1596, 71, 241, "Theorem", CellTags->"AlgAppA Simple Euclid"]}, "AlgAppA ExtEuclidAlg"->{ Cell[3650829, 127078, 4590, 209, 297, "Theorem", CellTags->"AlgAppA ExtEuclidAlg"]}, "FormAppA gcd=ua+vb"->{ Cell[3655422, 127289, 419, 14, 57, "NumberedEquationAppendix", CellTags->"FormAppA gcd=ua+vb"]}, "DefAppA Fibonnaci"->{ Cell[3670483, 127792, 2723, 106, 140, "Text", CellTags->"DefAppA Fibonnaci"]}, "TheoAppA Compl Eucl"->{ Cell[3679462, 128102, 1077, 43, 130, "Theorem", CellTags->"TheoAppA Compl Eucl"]}, "SecAppA Congruences"->{ Cell[3681143, 128172, 176, 7, 33, "Section", CellTags->"SecAppA Congruences"]}, "SubSecA Congruences"->{ Cell[3681344, 128183, 152, 9, 47, "Subsection", CellTags->"SubSecA Congruences"]}, "DefAppA Congr Rel"->{ Cell[3681499, 128194, 926, 39, 112, "Definition", CellTags->"DefAppA Congr Rel"]}, "DefAppA compl resid"->{ Cell[3683839, 128293, 960, 38, 114, "Definition", CellTags->"DefAppA compl resid"]}, "FormAppA ai=aj ->i=j"->{ Cell[3686852, 128415, 412, 13, 34, "NumberedEquationAppendix", CellTags->"FormAppA ai=aj ->i=j"]}, "LemAppA DivEqRelByK"->{ Cell[3687654, 128442, 762, 31, 134, "Theorem", CellTags->"LemAppA DivEqRelByK"]}, "LemAppA Also ka_i is CRS"->{ Cell[3690309, 128557, 966, 37, 114, "Theorem", CellTags->"LemAppA Also ka_i is CRS"]}, "SubsAppA Euler"->{ Cell[3692359, 128642, 152, 9, 33, "Subsection", CellTags->"SubsAppA Euler"]}, "DefAppA Euler Totient"->{ Cell[3692847, 128664, 1162, 42, 178, "Definition", CellTags->"DefAppA Euler Totient"]}, "TheoAppA Sum Phi=n"->{ Cell[3694640, 128732, 468, 20, 115, "Theorem", CellTags->"TheoAppA Sum Phi=n"]}, "FunctAppA Divisor sum"->{ Cell[3698983, 128906, 311, 9, 69, "Input", CellTags->"FunctAppA Divisor sum"], Cell[4232224, 149718, 316, 9, 69, "Input", CellTags->"FunctAppA Divisor sum"], Cell[4498454, 155177, 219, 6, 95, "Input", CellTags->"FunctAppA Divisor sum"], Cell[4499318, 155215, 215, 6, 95, "Input", CellTags->"FunctAppA Divisor sum"]}, "DefAppA Reduced RS"->{ Cell[3699685, 128934, 1194, 46, 116, "Definition", CellTags->"DefAppA Reduced RS"]}, "InputAppA CoPrimes"->{ Cell[3702330, 129037, 407, 11, 69, "Input", CellTags->"InputAppA CoPrimes"]}, "LemAppA AR_i also Red"->{ Cell[3703128, 129067, 980, 36, 118, "Theorem", CellTags->"LemAppA AR_i also Red"]}, "TheoAppA Euler"->{ Cell[3704369, 129114, 720, 29, 133, "Theorem", CellTags->"TheoAppA Euler"]}, "TheoAppA Fermat"->{ Cell[3709796, 129318, 698, 28, 135, "Theorem", CellTags->"TheoAppA Fermat"]}, "FormAppA Phi p^e="->{ Cell[3711473, 129384, 706, 24, 56, "NumberedEquationAppendix", CellTags->"FormAppA Phi p^e="]}, "DefAppA multiplicative"->{ Cell[3712182, 129410, 986, 37, 114, "Definition", CellTags->"DefAppA multiplicative"]}, "LemAppA Phi is mult"->{ Cell[3713171, 129449, 343, 14, 91, "Theorem", CellTags->"LemAppA Phi is mult"]}, "TheoAppA Euler Phi Form"->{ Cell[3719828, 129714, 557, 22, 105, "Theorem", CellTags->"TheoAppA Euler Phi Form"]}, "SubsAppA lin congr"->{ Cell[3721949, 129804, 175, 9, 33, "Subsection", CellTags->"SubsAppA lin congr"]}, "DefAppA linear CR"->{ Cell[3722127, 129815, 206, 6, 34, "Text", CellTags->"DefAppA linear CR"]}, "TheoAppA AX=B mod M"->{ Cell[3722589, 129833, 901, 37, 114, "Theorem", CellTags->"TheoAppA AX=B mod M"]}, "SubsAppA Chinese RT"->{ Cell[3739787, 130505, 170, 9, 33, "Subsection", CellTags->"SubsAppA Chinese RT"]}, "TheoAppA Chinese RT"->{ Cell[3743696, 130667, 1167, 48, 113, "Theorem", CellTags->"TheoAppA Chinese RT"]}, "FormAppA ax=b mod m multi"->{ Cell[3744866, 130717, 693, 25, 56, "NumberedEquationAppendix", CellTags->"FormAppA ax=b mod m multi"]}, "ExamAppA Chin Rem Th"->{ Cell[3753474, 131059, 228, 10, 86, "Example", CellTags->"ExamAppA Chin Rem Th"]}, "SecAppA QR"->{ Cell[3767221, 131609, 117, 7, 33, "Section", CellTags->"SecAppA QR"]}, "DefAppA quadratic CR"->{ Cell[3767341, 131618, 1411, 50, 88, "Text", CellTags->"DefAppA quadratic CR"]}, "DefAppA QR"->{ Cell[3769009, 131680, 691, 26, 113, "Definition", CellTags->"DefAppA QR"]}, "DefAppA Legendre S"->{ Cell[3769703, 131708, 2304, 90, 205, "Definition", CellTags->"DefAppA Legendre S"]}, "DefAppA Jacobi S"->{ Cell[3772101, 131804, 1527, 61, 241, "Definition", CellTags->"DefAppA Jacobi S"]}, "TheoAppA Sum Chi"->{ Cell[3777291, 132006, 861, 31, 174, "Theorem", CellTags->"TheoAppA Sum Chi"]}, "TheoAppA Chi(uv)"->{ Cell[3779515, 132094, 630, 26, 135, "Theorem", CellTags->"TheoAppA Chi(uv)"]}, "TheoAppA chi(u)chi(u+k)"->{ Cell[3785597, 132339, 915, 36, 154, "Theorem", CellTags->"TheoAppA chi(u)chi(u+k)"]}, "FormAppA x^(p-1)/2 is prod QR"->{ Cell[3791039, 132549, 532, 17, 37, "NumberedEquationAppendix", CellTags->"FormAppA x^(p-1)/2 is prod QR"]}, "TheoAppA u/p=u^(p-1)/2"->{ Cell[3793341, 132639, 670, 27, 149, "Theorem", CellTags->"TheoAppA u/p=u^(p-1)/2"]}, "CorAppA Chi(-1)"->{ Cell[3794014, 132668, 1023, 43, 155, "Theorem", CellTags->"CorAppA Chi(-1)"]}, "TheoAppA Chi(2)"->{ Cell[3795971, 132756, 1016, 41, 154, "Theorem", CellTags->"TheoAppA Chi(2)"]}, "FormAppA Def Jac (2x)"->{ Cell[3802246, 132989, 816, 29, 55, "NumberedEquationAppendix", CellTags->"FormAppA Def Jac (2x)"]}, "TheoAppA Jacob iRelat"->{ Cell[3803065, 133020, 1780, 70, 367, "Theorem", CellTags->"TheoAppA Jacob iRelat"]}, "TheoAppA Quad Reci Gauss"->{ Cell[3806691, 133153, 1213, 48, 132, "Theorem", CellTags->"TheoAppA Quad Reci Gauss"]}, "SecAppA Continued Fractions"->{ Cell[3812396, 133383, 130, 6, 33, "Section", CellTags->"SecAppA Continued Fractions"]}, "DefAppA Cont Frac"->{ Cell[3813639, 133429, 324, 14, 90, "Definition", CellTags->"DefAppA Cont Frac"]}, "FormAppA Cont Frac"->{ Cell[3813966, 133445, 655, 21, 116, "NumberedEquationAppendix", CellTags->"FormAppA Cont Frac"]}, "CFF"->{ Cell[3816676, 133540, 1139, 27, 120, "Input", InitializationCell->True, CellTags->"CFF"], Cell[4493436, 154999, 1139, 27, 120, "Input", InitializationCell->True, CellTags->"CFF"], Cell[4494695, 155033, 669, 13, 69, "Input", InitializationCell->True, CellTags->"CFF"], Cell[4495367, 155048, 393, 14, 112, "Output", CellTags->"CFF"]}, "LemAppA rat->CF"->{ Cell[3821845, 133703, 259, 10, 90, "Theorem", CellTags->"LemAppA rat->CF"]}, "AlgAppA CF"->{ Cell[3829221, 133981, 1364, 54, 203, "Theorem", CellTags->"AlgAppA CF"]}, "S5.67.1"->{ Cell[3833784, 134161, 65, 1, 69, "Input", CellTags->"S5.67.1"], Cell[3833852, 134164, 192, 5, 44, "Output", CellTags->"S5.67.1"], Cell[3834166, 134176, 64, 1, 69, "Input", CellTags->"S5.67.1"], Cell[3835358, 134218, 72, 1, 69, "Input", CellTags->"S5.67.1"], Cell[3836421, 134251, 261, 7, 91, "Input", CellTags->"S5.67.1"], Cell[3836685, 134260, 500, 16, 112, "Output", CellTags->"S5.67.1"], Cell[3837874, 134302, 108, 2, 69, "Input", CellTags->"S5.67.1"], Cell[3837985, 134306, 291, 7, 44, "Output", CellTags->"S5.67.1"], Cell[3839764, 134373, 408, 9, 91, "Input", CellTags->"S5.67.1"], Cell[3840175, 134384, 374, 10, 63, "Output", CellTags->"S5.67.1"], Cell[3841265, 134425, 117, 5, 112, "Input", CellTags->"S5.67.1"]}, "DefAppA Cont Frac Appr"->{ Cell[3838279, 134315, 959, 39, 92, "Definition", CellTags->"DefAppA Cont Frac Appr"]}, "TheoAppA recurr CF"->{ Cell[3841820, 134449, 2616, 107, 229, "Theorem", CellTags->"TheoAppA recurr CF"]}, "FormAppA qk>Fk"->{ Cell[3851700, 134843, 295, 10, 33, "NumberedEquationAppendix", CellTags->"FormAppA qk>Fk"]}, "LemAppA pq-pq=-1"->{ Cell[3853977, 134937, 905, 37, 138, "Theorem", CellTags->"LemAppA pq-pq=-1"]}, "CorAppA CF gcd(p q)=1"->{ Cell[3858136, 135105, 732, 31, 136, "Theorem", CellTags->"CorAppA CF gcd(p q)=1"]}, "FormAppA Ck-Ck-1"->{ Cell[3860515, 135209, 662, 25, 77, "NumberedEquationAppendix", CellTags->"FormAppA Ck-Ck-1"]}, "TheoAppA CF Best Appr"->{ Cell[3876029, 135786, 987, 39, 117, "Theorem", CellTags->"TheoAppA CF Best Appr"]}, "SecAppA Mobius"->{ Cell[3877457, 135845, 178, 7, 33, "Section", CellTags->"SecAppA Mobius"]}, "SubsAppA Mobius"->{ Cell[3877660, 135856, 173, 9, 47, "Subsection", CellTags->"SubsAppA Mobius"]}, "DefAppA Mobius function"->{ Cell[3879076, 135904, 2840, 106, 183, "Definition", CellTags->"DefAppA Mobius function"]}, "LemAppA Sum Mu="->{ Cell[3883381, 136072, 940, 39, 152, "Theorem", CellTags->"LemAppA Sum Mu="]}, "LemAppA Sum Moebius"->{ Cell[3889120, 136290, 1073, 44, 152, "Theorem", CellTags->"LemAppA Sum Moebius"]}, "TheoAppA Moebius Inv"->{ Cell[3891908, 136410, 1571, 58, 226, "Theorem", CellTags->"TheoAppA Moebius Inv"]}, "CorAppA Mult Moebius"->{ Cell[3895234, 136534, 1478, 52, 225, "Theorem", CellTags->"CorAppA Mult Moebius"]}, "SubsAppA Sylvester"->{ Cell[3902300, 136813, 180, 9, 33, "Subsection", CellTags->"SubsAppA Sylvester"]}, "TheoAppA Incl-Excl"->{ Cell[3905740, 136949, 3440, 125, 225, "Theorem", CellTags->"TheoAppA Incl-Excl"]}, "SectAppA Problems"->{ Cell[3912523, 137206, 114, 7, 33, "Section", CellTags->"SectAppA Problems"]}, "ProbAppA gcd a^m-1 a^n-1"->{ Cell[3914547, 137297, 1266, 49, 82, "Problem", CellTags->"ProbAppA gcd a^m-1 a^n-1"]}, "ChapGaloisTh"->{ Cell[3920633, 137539, 71, 1, 36, "Chapter", CellTags->"ChapGaloisTh"]}, "SecAppB Algebra"->{ Cell[3922807, 137595, 61, 1, 45, "Section", CellTags->"SecAppB Algebra"]}, "SubsAppB Abstract Algebra"->{ Cell[3923088, 137606, 163, 9, 47, "Subsection", CellTags->"SubsAppB Abstract Algebra"]}, "SubsubsAppB operation"->{ Cell[3923276, 137619, 75, 1, 63, "Subsubsection", CellTags->"SubsubsAppB operation"]}, "DefAppB operation"->{ Cell[3923354, 137622, 1374, 58, 83, "Text", CellTags->"DefAppB operation"]}, "DefAppB unit element"->{ Cell[3925477, 137719, 644, 25, 61, "Text", CellTags->"DefAppB unit element"]}, "ExamAppB Integers+"->{ Cell[3926361, 137755, 537, 19, 86, "Example", CellTags->"ExamAppB Integers+"]}, "ExamAppB Matrices2x2"->{ Cell[3926901, 137776, 468, 18, 86, "Example", CellTags->"ExamAppB Matrices2x2"]}, "SubsubsAppB group"->{ Cell[3928614, 137864, 62, 1, 37, "Subsubsection", CellTags->"SubsubsAppB group"]}, "DefAppB Group"->{ Cell[3928679, 137867, 1901, 81, 182, "Definition", CellTags->"DefAppB Group"]}, "DefAppB subgroup"->{ Cell[3933500, 138068, 997, 42, 60, "Text", CellTags->"DefAppB subgroup"]}, "ExamAppB MultiGroup"->{ Cell[3935738, 138162, 3261, 116, 322, "Example", CellTags->"ExamAppB MultiGroup"]}, "DefAppB additive group"->{ Cell[3939002, 138280, 996, 28, 133, "Text", CellTags->"DefAppB additive group"]}, "SubsubsAppB ring"->{ Cell[3940381, 138326, 60, 1, 37, "Subsubsection", CellTags->"SubsubsAppB ring"]}, "DefAppB Ring"->{ Cell[3940444, 138329, 1538, 58, 197, "Definition", CellTags->"DefAppB Ring"]}, "DefAppB subring"->{ Cell[3941985, 138389, 4320, 163, 186, "Text", CellTags->"DefAppB subring"]}, "SubsubsAppB ideal"->{ Cell[3946342, 138557, 62, 1, 37, "Subsubsection", CellTags->"SubsubsAppB ideal"]}, "DefAppB Ideal"->{ Cell[3946407, 138560, 1178, 49, 112, "Definition", CellTags->"DefAppB Ideal"]}, "DefAppB mult inverse"->{ Cell[3948409, 138642, 2423, 92, 158, "Text", CellTags->"DefAppB mult inverse"]}, "SubsubsAppB field"->{ Cell[3950869, 138739, 62, 1, 37, "Subsubsection", CellTags->"SubsubsAppB field"]}, "DefAppB field"->{ Cell[3950934, 138742, 974, 36, 154, "Definition", CellTags->"DefAppB field"]}, "DefAppB zero div"->{ Cell[3951911, 138780, 1356, 52, 65, "Text", CellTags->"DefAppB zero div"]}, "DefAppB subfield"->{ Cell[3953270, 138834, 788, 30, 34, "Text", CellTags->"DefAppB subfield"]}, "DefAppB finite"->{ Cell[3954785, 138891, 1181, 49, 60, "Text", CellTags->"DefAppB finite"]}, "DefAppB GF"->{ Cell[3955969, 138942, 1784, 63, 113, "Text", CellTags->"DefAppB GF"]}, "TheoAppB Wedderburn"->{ Cell[3958456, 139034, 372, 14, 90, "Theorem", CellTags->"TheoAppB Wedderburn"]}, "SubsubsAppB equiv rel"->{ Cell[3958865, 139053, 82, 1, 37, "Subsubsection", CellTags->"SubsubsAppB equiv rel"]}, "DefAppB Equiv Rel"->{ Cell[3958950, 139056, 2379, 81, 197, "Definition", CellTags->"DefAppB Equiv Rel"]}, "DefAppB equiv class"->{ Cell[3962402, 139181, 423, 16, 34, "Text", CellTags->"DefAppB equiv class"]}, "TheoAppB Res Class"->{ Cell[3967355, 139375, 1036, 39, 112, "Theorem", CellTags->"TheoAppB Res Class"]}, "DefAppB Res Class Ring"->{ Cell[3968394, 139416, 617, 23, 34, "Text", CellTags->"DefAppB Res Class Ring"]}, "SubsubsAppB cyclic group"->{ Cell[3969048, 139444, 77, 1, 37, "Subsubsection", CellTags->"SubsubsAppB cyclic group"]}, "DefAppB Cyclic Group"->{ Cell[3972393, 139573, 1319, 50, 85, "Text", CellTags->"DefAppB Cyclic Group"]}, "LemAppB Order Divides n"->{ Cell[3973715, 139625, 884, 37, 133, "Theorem", CellTags->"LemAppB Order Divides n"]}, "LemAppB Order a^k"->{ Cell[3977685, 139786, 975, 43, 148, "Theorem", CellTags->"LemAppB Order a^k"]}, "TheoAppB Order Subgroup"->{ Cell[3983025, 140005, 1102, 44, 112, "Theorem", CellTags->"TheoAppB Order Subgroup"]}, "SubsAppB Linear Algebra"->{ Cell[3984176, 140055, 159, 9, 33, "Subsection", CellTags->"SubsAppB Linear Algebra"]}, "SubsubsAppB vector spaces"->{ Cell[3984360, 140068, 92, 1, 63, "Subsubsection", CellTags->"SubsubsAppB vector spaces"]}, "DefAppB Vector space"->{ Cell[3984536, 140075, 3994, 154, 285, "Definition", CellTags->"DefAppB Vector space"]}, "DefAppB Vector"->{ Cell[3988533, 140231, 239, 6, 34, "Text", CellTags->"DefAppB Vector"]}, "DefAppB Linear S S"->{ Cell[3989735, 140272, 385, 12, 112, "Definition", CellTags->"DefAppB Linear S S"]}, "DefAppB trivial vs"->{ Cell[3991653, 140346, 375, 16, 34, "Text", CellTags->"DefAppB trivial vs"]}, "DefAppB span"->{ Cell[3993306, 140419, 2779, 103, 94, "Text", CellTags->"DefAppB span"]}, "SubsubsAppB linear indep"->{ Cell[3996122, 140527, 104, 1, 37, "Subsubsection", CellTags->"SubsubsAppB linear indep"]}, "DefAppB Linear Dep"->{ Cell[3996366, 140535, 1826, 70, 116, "Definition", CellTags->"DefAppB Linear Dep"]}, "DefAppB Basis"->{ Cell[4002304, 140764, 1342, 53, 142, "Definition", CellTags->"DefAppB Basis"]}, "DefAppB Standard basis"->{ Cell[4004895, 140869, 175, 6, 34, "Text", CellTags->"DefAppB Standard basis"]}, "DefAppB dimension"->{ Cell[4006467, 140927, 524, 18, 112, "Definition", CellTags->"DefAppB dimension"]}, "SubsubsAppB inner product"->{ Cell[4007028, 140950, 93, 1, 37, "Subsubsection", CellTags->"SubsubsAppB inner product"]}, "DefAppB inner product"->{ Cell[4007353, 140963, 1167, 51, 90, "Definition", CellTags->"DefAppB inner product"]}, "DefAppB pos def"->{ Cell[4010159, 141092, 2151, 80, 111, "Text", CellTags->"DefAppB pos def"]}, "FormAppB inner prod"->{ Cell[4012313, 141174, 1490, 56, 33, "NumberedEquationAppendix", CellTags->"FormAppB inner prod"]}, "DefAppB orthogonal"->{ Cell[4013806, 141232, 1765, 78, 112, "Definition", CellTags->"DefAppB orthogonal"]}, "DefAppB orth compl"->{ Cell[4017182, 141374, 1021, 41, 90, "Definition", CellTags->"DefAppB orth compl"]}, "DefAppB self orth"->{ Cell[4022377, 141591, 1387, 56, 117, "Definition", CellTags->"DefAppB self orth"]}, "SecAppB Field Constr"->{ Cell[4023825, 141654, 72, 1, 31, "Section", CellTags->"SecAppB Field Constr"]}, "DefAppB Zm"->{ Cell[4023900, 141657, 1950, 65, 84, "Text", CellTags->"DefAppB Zm"]}, "TheoAppB Field iff Prime"->{ Cell[4025853, 141724, 656, 25, 91, "Theorem", CellTags->"TheoAppB Field iff Prime"]}, "DefAppB polyn"->{ Cell[4031078, 141924, 542, 20, 34, "Text", CellTags->"DefAppB polyn"]}, "DefAppB degree"->{ Cell[4032074, 141964, 809, 34, 36, "Text", CellTags->"DefAppB degree"]}, "FormAppB Pol add mult"->{ Cell[4032986, 142004, 715, 26, 34, "NumberedEquationAppendix", CellTags->"FormAppB Pol add mult"]}, "FormAppB Pol add mult two"->{ Cell[4033704, 142032, 901, 32, 37, "NumberedEquationAppendix", CellTags->"FormAppB Pol add mult two"]}, "TheoAppB F[x]Ring"->{ Cell[4037415, 142172, 616, 23, 90, "Theorem", CellTags->"TheoAppB F[x]Ring"]}, "DefAppB Pol Equiv Def"->{ Cell[4038034, 142197, 1335, 42, 108, "Text", CellTags->"DefAppB Pol Equiv Def"]}, "TheoAppB Pol ExtGCD"->{ Cell[4043248, 142391, 1197, 47, 113, "Theorem", CellTags->"TheoAppB Pol ExtGCD"]}, "CorAppB A(x)U(x)=1 mod F(x)"->{ Cell[4044448, 142440, 1120, 45, 137, "Theorem", CellTags->"CorAppB A(x)U(x)=1 mod F(x)"]}, "FunctAppB PolExtGCD"->{ Cell[4045571, 142487, 295, 7, 34, "Text", CellTags->"FunctAppB PolExtGCD"]}, "TheoAppB n Zeros"->{ Cell[4047596, 142566, 547, 23, 90, "Theorem", CellTags->"TheoAppB n Zeros"]}, "DefAppB gen ideal"->{ Cell[4051917, 142744, 920, 36, 34, "Text", CellTags->"DefAppB gen ideal"]}, "DefAppB princ ideal"->{ Cell[4055069, 142873, 476, 14, 59, "Text", CellTags->"DefAppB princ ideal"]}, "TheoAppB Field Iff Irred"->{ Cell[4057372, 142961, 1496, 56, 120, "Theorem", CellTags->"TheoAppB Field Iff Irred"]}, "ExamAppB Add Mult"->{ Cell[4062489, 143153, 1574, 57, 154, "Example", CellTags->"ExamAppB Add Mult"]}, "SecAppB Numb Irr Pol"->{ Cell[4073204, 143556, 108, 1, 31, "Section", CellTags->"SecAppB Numb Irr Pol"]}, "DefAppB monic"->{ Cell[4073315, 143559, 1299, 41, 89, "Text", CellTags->"DefAppB monic"]}, "DefAppB Iq(n)"->{ Cell[4074617, 143602, 1144, 45, 136, "Definition", CellTags->"DefAppB Iq(n)"]}, "FormAppB Sum Irred"->{ Cell[4094289, 144366, 384, 14, 35, "NumberedEquationAppendix", CellTags->"FormAppB Sum Irred"]}, "TheoAppB Ip(m)="->{ Cell[4094676, 144382, 598, 25, 101, "Theorem", CellTags->"TheoAppB Ip(m)="]}, "FormAppB Iq(n)<="->{ Cell[4098397, 144531, 332, 12, 44, "NumberedEquationAppendix", CellTags->"FormAppB Iq(n)<="]}, "TheoAppB Iq(n)>0"->{ Cell[4100099, 144598, 1406, 54, 202, "Theorem", CellTags->"TheoAppB Iq(n)>0"]}, "CorAppB Iq(n)~~"->{ Cell[4103023, 144713, 386, 16, 103, "Theorem", CellTags->"CorAppB Iq(n)~~"]}, "SecAppB Field Struct"->{ Cell[4105263, 144801, 89, 1, 31, "Section", CellTags->"SecAppB Field Struct"]}, "SubsAppB cyclic structure"->{ Cell[4105377, 144806, 185, 9, 47, "Subsection", CellTags->"SubsAppB cyclic structure"]}, "TheoAppB Field For p^m"->{ Cell[4107047, 144873, 546, 23, 91, "Theorem", CellTags->"TheoAppB Field For p^m"]}, "DefAppB Prim El"->{ Cell[4108316, 144920, 1563, 60, 137, "Definition", CellTags->"DefAppB Prim El"]}, "TheoAppB Cyclic Struc"->{ Cell[4109882, 144982, 1401, 54, 119, "Theorem", CellTags->"TheoAppB Cyclic Struc"]}, "CorAppB a^q^n=a"->{ Cell[4119449, 145355, 649, 27, 138, "Theorem", CellTags->"CorAppB a^q^n=a"]}, "CorAppB a in F iff a^q=a"->{ Cell[4121576, 145441, 691, 26, 143, "Theorem", CellTags->"CorAppB a in F iff a^q=a"]}, "ExamAppB 16 min pol"->{ Cell[4123584, 145519, 1854, 67, 137, "Example", CellTags->"ExamAppB 16 min pol"]}, "TableAppB F16-1"->{ Cell[4131864, 145837, 2099, 76, 431, "Text", PageBreakBelow->False, CellTags->"TableAppB F16-1"]}, "TableAppB F16-2"->{ Cell[4134637, 145941, 1252, 44, 425, "Text", PageBreakBelow->False, CellTags->"TableAppB F16-2"]}, "SubsAppB cardinality"->{ Cell[4136569, 146012, 175, 9, 33, "Subsection", CellTags->"SubsAppB cardinality"]}, "DefAppB characteristic"->{ Cell[4137658, 146058, 668, 26, 93, "Definition", CellTags->"DefAppB characteristic"]}, "DefAppB isomorphic"->{ Cell[4140340, 146174, 2220, 80, 164, "Definition", CellTags->"DefAppB isomorphic"]}, "DefAppB ext field"->{ Cell[4144955, 146348, 1276, 45, 66, "Text", CellTags->"DefAppB ext field"]}, "SubsAppB calculus rules"->{ Cell[4150346, 146559, 195, 9, 33, "Subsection", CellTags->"SubsAppB calculus rules"]}, "TheoAppB (x-a)^p="->{ Cell[4150544, 146570, 796, 31, 136, "Theorem", CellTags->"TheoAppB (x-a)^p="]}, "CorAppB Sum a_i^p="->{ Cell[4154226, 146717, 1092, 43, 145, "Theorem", CellTags->"CorAppB Sum a_i^p="]}, "TheoAppB Is In F?"->{ Cell[4157059, 146831, 1230, 46, 139, "Theorem", CellTags->"TheoAppB Is In F?"]}, "TheoAppB F(conj)=0"->{ Cell[4160110, 146952, 1043, 40, 142, "Theorem", CellTags->"TheoAppB F(conj)=0"]}, "TheoAppB Numb Conj"->{ Cell[4165269, 147148, 1858, 70, 213, "Theorem", CellTags->"TheoAppB Numb Conj"]}, "SubsAppB min pols"->{ Cell[4172470, 147419, 181, 9, 33, "Subsection", CellTags->"SubsAppB min pols"]}, "DefAppB Min Pol"->{ Cell[4172654, 147430, 946, 37, 137, "Theorem", CellTags->"DefAppB Min Pol"]}, "CorAppB Prop Min Pol"->{ Cell[4180491, 147723, 953, 37, 135, "Theorem", CellTags->"CorAppB Prop Min Pol"]}, "DefAppB degree of element"->{ Cell[4181988, 147786, 1078, 34, 90, "Text", CellTags->"DefAppB degree of element"]}, "DefAppB Prim Pol"->{ Cell[4183069, 147822, 877, 31, 62, "Text", CellTags->"DefAppB Prim Pol"]}, "DefAppB Log Table"->{ Cell[4184486, 147875, 1288, 45, 91, "Text", CellTags->"DefAppB Log Table"]}, "SubsAppB further props"->{ Cell[4199572, 148429, 162, 9, 33, "Subsection", CellTags->"SubsAppB further props"]}, "LemAppB M(x)Divx^p^n-x"->{ Cell[4203491, 148576, 814, 34, 115, "Theorem", CellTags->"LemAppB M(x)Divx^p^n-x"]}, "TheoAppB Factor x^p^m-x"->{ Cell[4206670, 148709, 518, 20, 94, "Theorem", CellTags->"TheoAppB Factor x^p^m-x"]}, "CorAppB Zeros Irr F"->{ Cell[4211709, 148910, 859, 36, 93, "Theorem", CellTags->"CorAppB Zeros Irr F"]}, "CorAppB When Subfield"->{ Cell[4217660, 149144, 601, 24, 95, "Theorem", CellTags->"CorAppB When Subfield"]}, "SubsAppB cycl pols"->{ Cell[4221849, 149310, 162, 9, 33, "Subsection", CellTags->"SubsAppB cycl pols"]}, "DefAppB Cycl Pol"->{ Cell[4224647, 149424, 1397, 55, 141, "Definition", CellTags->"DefAppB Cycl Pol"]}, "FormAppB Factor x^n-1"->{ Cell[4228084, 149564, 1486, 49, 71, "NumberedEquationAppendix", CellTags->"FormAppB Factor x^n-1"]}, "TheoAppB Form Cyclot"->{ Cell[4229573, 149615, 635, 25, 119, "Theorem", CellTags->"TheoAppB Form Cyclot"]}, "TheoAppB Number Prim Pol"->{ Cell[4235480, 149845, 711, 28, 128, "Theorem", CellTags->"TheoAppB Number Prim Pol"]}, "RemAppB p->q"->{ Cell[4242093, 150120, 2035, 74, 146, "Text", CellTags->"RemAppB p->q"]}, "SectAppB Problems"->{ Cell[4245053, 150235, 64, 1, 31, "Section", CellTags->"SectAppB Problems"]}, "ProbAppB 3"->{ Cell[4246181, 150282, 1158, 51, 62, "Problem", CellTags->"ProbAppB 3"]}, "ProbAppB order axb"->{ Cell[4248317, 150372, 2183, 92, 125, "Problem", CellTags->"ProbAppB order axb"]}, "ProbAppB Gauss"->{ Cell[4252669, 150557, 1303, 46, 124, "Problem", CellTags->"ProbAppB Gauss"]}, "DefAppB Trace"->{ Cell[4256825, 150717, 507, 23, 59, "Problem", CellTags->"DefAppB Trace"]}, "Chap Famous"->{ Cell[4259195, 150814, 87, 1, 36, "Chapter", CellTags->"Chap Famous"]}, "Mathematician: Euclid of Alexandria"->{ Cell[4259349, 150821, 20838, 345, 175, "Graphics", CellTags->"Mathematician: Euclid of Alexandria"]}, "Mathematician: Leonhard Euler"->{ Cell[4284008, 151277, 18807, 311, 105, "Graphics", CellTags->"Mathematician: Leonhard Euler"]}, "Mathematician: Pierre de Fermat"->{ Cell[4307219, 151677, 16356, 270, 175, "Graphics", CellTags->"Mathematician: Pierre de Fermat"]}, "Mathematician: Evariste Galois"->{ Cell[4341314, 152285, 17275, 286, 175, "Graphics", CellTags->"Mathematician: Evariste Galois"]}, "Mathematician: Johann Carl Friedrich Gauss"->{ Cell[4372647, 152803, 16485, 272, 175, "Graphics", CellTags->"Mathematician: Johann Carl Friedrich Gauss"]}, "Mathematician: Karl Gustav Jacob Jacobi"->{ Cell[4405923, 153358, 15897, 263, 175, "Graphics", CellTags->"Mathematician: Karl Gustav Jacob Jacobi"]}, "Mathematician: Adrien-Marie Legendre"->{ Cell[4424355, 153682, 17207, 284, 175, "Graphics", CellTags->"Mathematician: Adrien-Marie Legendre"]}, "Mathematician: August Ferdinand M\[ODoubleDot]bius"->{ Cell[4444149, 154037, 14594, 241, 175, "Graphics", CellTags->"Mathematician: August Ferdinand M\[ODoubleDot]bius"]}, "Mathematician: Joseph Henry Maclagen Wedderburn"->{ Cell[4469035, 154461, 16234, 268, 177, "Graphics", CellTags->"Mathematician: Joseph Henry Maclagen Wedderburn"]}, "Chap New Functions"->{ Cell[4488036, 154792, 77, 1, 36, "Chapter", CellTags->"Chap New Functions"]}, "NewFunction CoPrimeQ"->{ Cell[4495809, 155068, 68, 1, 37, "Subsubsection", CellTags->"NewFunction CoPrimeQ"]}, "InputAppA CoPrimeQ"->{ Cell[4496058, 155079, 268, 7, 69, "Input", CellTags->"InputAppA CoPrimeQ"]}, "NewFunctions DivisorSum"->{ Cell[4498743, 155190, 73, 1, 37, "Subsubsection", CellTags->"NewFunctions DivisorSum"]}, "NewFunction Knapsack"->{ Cell[4508785, 155519, 1497, 42, 171, "Input", CellTags->"NewFunction Knapsack"], Cell[4510285, 155563, 59, 1, 34, "Text", CellTags->"NewFunction Knapsack"], Cell[4510347, 155566, 392, 12, 95, "Input", CellTags->"NewFunction Knapsack"], Cell[4510742, 155580, 151, 4, 44, "Output", CellTags->"NewFunction Knapsack"]}, "NewFunction MultiEntropy"->{ Cell[4511885, 155632, 76, 1, 37, "Subsubsection", CellTags->"NewFunction MultiEntropy"]}, "Chap References"->{ Cell[4515100, 155767, 59, 1, 36, "Chapter", CellTags->"Chap References"]}, "RefAdle79"->{ Cell[4515162, 155770, 359, 11, 59, "Text", CellTags->"RefAdle79"]}, "RefAdle83"->{ Cell[4515524, 155783, 317, 9, 59, "Text", CellTags->"RefAdle83"]}, "RefAdle94"->{ Cell[4515844, 155794, 297, 10, 59, "Text", CellTags->"RefAdle94"]}, "RefAdlD93"->{ Cell[4516144, 155806, 279, 7, 59, "Text", CellTags->"RefAdlD93"]}, "RefAdPR83"->{ Cell[4516426, 155815, 304, 9, 59, "Text", CellTags->"RefAdPR83"]}, "RefAig79"->{ Cell[4516733, 155826, 235, 9, 34, "Text", CellTags->"RefAig79"]}, "RefBaKvT99"->{ Cell[4516971, 155837, 340, 10, 59, "Text", CellTags->"RefBaKvT99"]}, "RefBau97"->{ Cell[4517314, 155849, 268, 9, 34, "Text", CellTags->"RefBau97"]}, "RefBek82"->{ Cell[4517585, 155860, 269, 9, 34, "Text", CellTags->"RefBek82"]}, "RefBer68"->{ Cell[4517857, 155871, 253, 9, 34, "Text", CellTags->"RefBer68"]}, "RefBerMT78"->{ Cell[4518113, 155882, 351, 9, 59, "Text", CellTags->"RefBerMT78"]}, "RefBeJL86"->{ Cell[4518467, 155893, 269, 9, 34, "Text", CellTags->"RefBeJL86"]}, "RefBihS93"->{ Cell[4518739, 155904, 288, 9, 34, "Text", CellTags->"RefBihS93"]}, "RefBoDML97"->{ Cell[4519030, 155915, 429, 11, 83, "Text", CellTags->"RefBoDML97"]}, "RefBos92"->{ Cell[4519462, 155928, 268, 9, 34, "Text", CellTags->"RefBos92"]}, "RefBric85"->{ Cell[4519733, 155939, 386, 11, 59, "Text", CellTags->"RefBric85"]}, "RefBric89"->{ Cell[4520122, 155952, 316, 10, 59, "Text", CellTags->"RefBric89"]}, "RefCanS98"->{ Cell[4520441, 155964, 406, 11, 59, "Text", CellTags->"RefCanS98"]}, "RefChoR85"->{ Cell[4520850, 155977, 444, 12, 83, "Text", CellTags->"RefChoR85"]}, "RefCohL82"->{ Cell[4521297, 155991, 290, 9, 34, "Text", CellTags->"RefCohL82"]}, "RefCohn77"->{ Cell[4521590, 156002, 231, 9, 34, "Text", CellTags->"RefCohn77"]}, "RefCopp84"->{ Cell[4521824, 156013, 318, 9, 59, "Text", CellTags->"RefCopp84"]}, "RefCopFPR96"->{ Cell[4522145, 156024, 420, 11, 59, "Text", CellTags->"RefCopFPR96"]}, "RefCov67"->{ Cell[4522568, 156037, 359, 12, 59, "Text", CellTags->"RefCov67"]}, "RefDemy94"->{ Cell[4522930, 156051, 380, 11, 59, "Text", CellTags->"RefDemy94"]}, "RefDen82"->{ Cell[4523313, 156064, 266, 9, 34, "Text", CellTags->"RefDen82"]}, "RefDifH76"->{ Cell[4523582, 156075, 298, 9, 59, "Text", CellTags->"RefDifH76"]}, "RefDijk97"->{ Cell[4523883, 156086, 298, 9, 59, "Text", CellTags->"RefDijk97"]}, "RefElGa85"->{ Cell[4524184, 156097, 428, 12, 59, "Text", CellTags->"RefElGa85"]}, "RefFiaS87"->{ Cell[4524615, 156111, 433, 12, 83, "Text", CellTags->"RefFiaS87"]}, "RefFips94"->{ Cell[4525051, 156125, 372, 11, 59, "Text", CellTags->"RefFips94"]}, "RefFrie73"->{ Cell[4525426, 156138, 236, 9, 34, "Text", CellTags->"RefFrie73"]}, "RefGarJ79"->{ Cell[4525665, 156149, 312, 10, 59, "Text", CellTags->"RefGarJ79"]}, "RefGilMS74"->{ Cell[4525980, 156161, 309, 9, 59, "Text", CellTags->"RefGilMS74"]}, "RefGol67"->{ Cell[4526292, 156172, 237, 9, 34, "Text", CellTags->"RefGol67"]}, "RefHall67"->{ Cell[4526532, 156183, 252, 9, 34, "Text", CellTags->"RefHall67"]}, "RefHar45"->{ Cell[4526787, 156194, 267, 9, 34, "Text", CellTags->"RefHar45"]}, "RefHast88"->{ Cell[4527057, 156205, 295, 9, 34, "Text", CellTags->"RefHast88"]}, "RefHelR83"->{ Cell[4527355, 156216, 391, 10, 59, "Text", CellTags->"RefHelR83"]}, "RefHuff52"->{ Cell[4527749, 156228, 275, 9, 34, "Text", CellTags->"RefHuff52"]}, "RefJoha94a"->{ Cell[4528027, 156239, 301, 9, 59, "Text", CellTags->"RefJoha94a"]}, "RefJoha94b"->{ Cell[4528331, 156250, 260, 9, 34, "Text", CellTags->"RefJoha94b"]}, "RefJohKS93"->{ Cell[4528594, 156261, 448, 12, 83, "Text", CellTags->"RefJohKS93"]}, "RefKahn67"->{ Cell[4529045, 156275, 258, 9, 34, "Text", CellTags->"RefKahn67"]}, "RefKhin57"->{ Cell[4529306, 156286, 265, 9, 34, "Text", CellTags->"RefKhin57"]}, "RefKnud94"->{ Cell[4529574, 156297, 417, 15, 59, "Text", CellTags->"RefKnud94"]}, "RefKnut69"->{ Cell[4529994, 156314, 284, 10, 34, "Text", CellTags->"RefKnut69"]}, "RefKnut73"->{ Cell[4530281, 156326, 278, 9, 34, "Text", CellTags->"RefKnut73"]}, "RefKnut81"->{ Cell[4530562, 156337, 300, 10, 59, "Text", CellTags->"RefKnut81"]}, "RefKoch96"->{ Cell[4530865, 156349, 418, 12, 59, "Text", CellTags->"RefKoch96"]}, "RefKonh81"->{ Cell[4531286, 156363, 245, 9, 34, "Text", CellTags->"RefKonh81"]}, "RefKraf49"->{ Cell[4531534, 156374, 307, 10, 59, "Text", CellTags->"RefKraf49"]}, "RefLagO83"->{ Cell[4531844, 156386, 308, 9, 59, "Text", CellTags->"RefLagO83"]}, "RefLai92"->{ Cell[4532155, 156397, 322, 10, 59, "Text", CellTags->"RefLai92"]}, "RefLeeB88"->{ Cell[4532480, 156409, 442, 12, 59, "Text", CellTags->"RefLeeB88"]}, "RefLehm76"->{ Cell[4532925, 156423, 260, 9, 34, "Text", CellTags->"RefLehm76"]}, "RefLenstA96"->{ Cell[4533188, 156434, 255, 9, 34, "Text", CellTags->"RefLenstA96"]}, "RefLenLL82"->{ Cell[4533446, 156445, 313, 9, 59, "Text", CellTags->"RefLenLL82"]}, "RefLens83"->{ Cell[4533762, 156456, 311, 11, 34, "Text", CellTags->"RefLens83"]}, "RefLens86"->{ Cell[4534076, 156469, 317, 10, 59, "Text", CellTags->"RefLens86"]}, "RefLiu68"->{ Cell[4534396, 156481, 246, 9, 34, "Text", CellTags->"RefLiu68"]}, "RefLune87"->{ Cell[4534645, 156492, 330, 10, 59, "Text", CellTags->"RefLune87"]}, "RefMacW77"->{ Cell[4534978, 156504, 291, 9, 59, "Text", CellTags->"RefMacW77"]}, "RefMas69"->{ Cell[4535272, 156515, 293, 9, 59, "Text", CellTags->"RefMas69"]}, "RefMatY93"->{ Cell[4535568, 156526, 394, 10, 59, "Text", CellTags->"RefMatY93"]}, "RefMaur92"->{ Cell[4535965, 156538, 277, 9, 34, "Text", CellTags->"RefMaur92"]}, "RefMcEl78"->{ Cell[4536245, 156549, 301, 9, 59, "Text", CellTags->"RefMcEl78"]}, "RefMcEl81"->{ Cell[4536549, 156560, 287, 9, 34, "Text", CellTags->"RefMcEl81"]}, "RefMcMi56"->{ Cell[4536839, 156571, 287, 9, 34, "Text", CellTags->"RefMcMi56"]}, "RefMene98"->{ Cell[4537129, 156582, 272, 9, 34, "Text", CellTags->"RefMene98"]}, "RefMeOkV93"->{ Cell[4537404, 156593, 348, 10, 59, "Text", CellTags->"RefMeOkV93"]}, "RefMeOV97"->{ Cell[4537755, 156605, 287, 9, 59, "Text", CellTags->"RefMeOV97"]}, "RefMerH78"->{ Cell[4538045, 156616, 326, 9, 59, "Text", CellTags->"RefMerH78"]}, "RefMey82"->{ Cell[4538374, 156627, 290, 9, 59, "Text", CellTags->"RefMey82"]}, "RefMill76"->{ Cell[4538667, 156638, 289, 9, 34, "Text", CellTags->"RefMill76"]}, "RefMill86"->{ Cell[4538959, 156649, 363, 10, 59, "Text", CellTags->"RefMill86"]}, "RefMoni80"->{ Cell[4539325, 156661, 317, 10, 59, "Text", CellTags->"RefMoni80"]}, "RefMorB75"->{ Cell[4539645, 156673, 378, 13, 35, "Text", CellTags->"RefMorB75"]}, "RefNied86"->{ Cell[4540026, 156688, 307, 9, 59, "Text", CellTags->"RefNied86"]}, "RefNybR93"->{ Cell[4540336, 156699, 349, 10, 59, "Text", CellTags->"RefNybR93"]}, "RefOdly85"->{ Cell[4540688, 156711, 429, 12, 59, "Text", CellTags->"RefOdly85"]}, "RefPatt75"->{ Cell[4541120, 156725, 292, 9, 59, "Text", CellTags->"RefPatt75"]}, "RefPera86"->{ Cell[4541415, 156736, 343, 10, 59, "Text", CellTags->"RefPera86"]}, "RefPohH78"->{ Cell[4541761, 156748, 498, 15, 60, "Text", CellTags->"RefPohH78"]}, "RefPoll75"->{ Cell[4542262, 156765, 243, 9, 34, "Text", CellTags->"RefPoll75"]}, "RefPoll78"->{ Cell[4542508, 156776, 283, 9, 34, "Text", CellTags->"RefPoll78"]}, "RefRabi79"->{ Cell[4542794, 156787, 334, 10, 59, "Text", CellTags->"RefRabi79"]}, "RefRabi80a"->{ Cell[4543131, 156799, 277, 9, 34, "Text", CellTags->"RefRabi80a"]}, "RefRabi80b"->{ Cell[4543411, 156810, 262, 9, 34, "Text", CellTags->"RefRabi80b"]}, "RefRisL79"->{ Cell[4543676, 156821, 277, 9, 34, "Text", CellTags->"RefRisL79"]}, "RefRivSA78"->{ Cell[4543956, 156832, 326, 10, 59, "Text", CellTags->"RefRivSA78"]}, "RefRose84"->{ Cell[4544285, 156844, 253, 9, 34, "Text", CellTags->"RefRose84"]}, "RefRuep86"->{ Cell[4544541, 156855, 254, 9, 34, "Text", CellTags->"RefRuep86"]}, "RefSatA98"->{ Cell[4544798, 156866, 366, 10, 59, "Text", CellTags->"RefSatA98"]}, "RefSchne96"->{ Cell[4545167, 156878, 257, 9, 34, "Text", CellTags->"RefSchne96"]}, "RefSchno90"->{ Cell[4545427, 156889, 384, 10, 59, "Text", CellTags->"RefSchno90"]}, "RefSchno91"->{ Cell[4545814, 156901, 333, 12, 34, "Text", CellTags->"RefSchno91"]}, "RefScho95"->{ Cell[4546150, 156915, 308, 10, 59, "Text", CellTags->"RefScho95"]}, "RefSham79"->{ Cell[4546461, 156927, 264, 9, 34, "Text", CellTags->"RefSham79"]}, "RefSham82"->{ Cell[4546728, 156938, 326, 10, 59, "Text", CellTags->"RefSham82"]}, "RefShan49"->{ Cell[4547057, 156950, 275, 9, 34, "Text", CellTags->"RefShan49"]}, "RefShap83"->{ Cell[4547335, 156961, 260, 9, 34, "Text", CellTags->"RefShap83"]}, "RefSilv86"->{ Cell[4547598, 156972, 254, 9, 34, "Text", CellTags->"RefSilv86"]}, "RefSilv98"->{ Cell[4547855, 156983, 264, 10, 34, "Text", CellTags->"RefSilv98"]}, "RefSilT92"->{ Cell[4548122, 156995, 302, 9, 59, "Text", CellTags->"RefSilT92"]}, "RefSimm92"->{ Cell[4548427, 157006, 348, 10, 59, "Text", CellTags->"RefSimm92"]}, "RefSmar98"->{ Cell[4548778, 157018, 273, 9, 34, "Text", CellTags->"RefSmar98"]}, "RefSolS77"->{ Cell[4549054, 157029, 274, 9, 34, "Text", CellTags->"RefSolS77"]}, "RefStin95"->{ Cell[4549331, 157040, 250, 9, 34, "Text", CellTags->"RefStin95"]}, "RefSugK76"->{ Cell[4549584, 157051, 351, 9, 59, "Text", CellTags->"RefSugK76"]}, "RefvTbu88"->{ Cell[4549938, 157062, 382, 11, 59, "Text", CellTags->"RefvTbu88"]}, "RefVaud98"->{ Cell[4550323, 157075, 385, 11, 59, "Text", CellTags->"RefVaud98"]}, "RefVerT97"->{ Cell[4550711, 157088, 567, 19, 59, "Text", CellTags->"RefVerT97"]}, "RefWell99"->{ Cell[4551281, 157109, 261, 9, 34, "Text", CellTags->"RefWell99"]}, "RefWien90"->{ Cell[4551545, 157120, 296, 9, 59, "Text", CellTags->"RefWien90"]}, "RefZivL77"->{ Cell[4551844, 157131, 311, 9, 59, "Text", CellTags->"RefZivL77"]}, "RefZivL78"->{ Cell[4552158, 157142, 317, 9, 59, "Text", CellTags->"RefZivL78"]}, "Chap Notations"->{ Cell[4552512, 157156, 69, 1, 36, "Chapter", CellTags->"Chap Notations"]}, "Chap Index"->{ Cell[4561322, 157505, 49, 1, 36, "Chapter", CellTags->"Chap Index"]} } *) (*CellTagsIndex CellTagsIndex->{ {"Chap Preface", 4680221, 161963}, {"Chap Intro", 4680410, 161969}, {"SectIntro Intro", 4680545, 161973}, {"DefIntro Cryptology", 4680648, 161976}, {"DefIntro Privacy", 4680751, 161979}, {"DefIntro Authen", 4680848, 161982}, {"DefIntro Integrity", 4680947, 161985}, {"SectIntro Shannon", 4681048, 161988}, {"DefIntro Alphabet", 4681151, 161991}, {"DefIntro bigram", 4681252, 161994}, {"DefIntro Language", 4681353, 161997}, {"DefIntro Crypto Transf", 4681460, 162000}, {"DefIntro plaintext", 4681568, 162003}, {"DefIntro Crypto Syst", 4681675, 162006}, {"DefIntro encryption", 4681789, 162009}, {"DefIntro secure channel", 4681899, 162012}, {"DefIntro Cryptanalist", 4682013, 162015}, {"DefIntro Cryptanalist passive", 4682130, 162018}, {"DefIntro Cryptanalist active", 4682255, 162021}, {"DefIntro Cipher Only Att.", 4682375, 162024}, {"DefIntro Known Pl. Att.", 4682490, 162027}, {"DefIntro Chosen Pl. Att.", 4682604, 162030}, {"SectIntro Statistical", 4682717, 162033}, {"DefIntro Plaint Source", 4682830, 162036}, {"PropIntro Kolmogorov", 4682940, 162039}, {"ExamIntro 1-grams", 4683044, 162042}, {"TableIntr Prob English", 4683155, 162045}, {"TableIntro Equil Distr", 4683277, 162048}, {"ExamIntro Markov", 4683386, 162051}, {"FormIntro Markov Eval", 4683496, 162054}, {"DefIntro stationary", 4683606, 162057}, {"SectIntro Problems", 4683711, 162060}, {"Chap Class", 4683809, 162063}, {"SectClass Caesar", 4683905, 162066}, {"SubsClass Caesar", 4684007, 162069}, {"DefClass Caesar", 4684112, 162072}, {"DefClass Caesar Cipher", 4684297, 162077}, {"DefClass exh key search", 4684410, 162080}, {"TableClass Anal Caesar", 4684523, 162083}, {"SubsClass Simple sub", 4684645, 162086}, {"SubsubsClass weakness simple", 4684767, 162089}, {"DefClass SimpleSubst", 4684891, 162092}, {"DefClass Prob Word", 4684997, 162095}, {"TableClass Anal Simple Subst", 4685119, 162098}, {"ExamClass Most Prob", 4685245, 162101}, {"InputClass Find Match", 4685358, 162104}, {"SubsClass Vigenere", 4685468, 162107}, {"DefClass Vigenere", 4685577, 162110}, {"ExamClass Vigenere", 4685681, 162113}, {"TableClass Vigenere", 4685790, 162116}, {"FormClass Vigen Encr", 4685908, 162119}, {"DefClass Poly Subst", 4686027, 162122}, {"SectClass Incid Coin", 4686136, 162125}, {"SubSClass incid of coinc", 4686250, 162128}, {"LemClass Kasiski", 4686364, 162131}, {"SubSClass Kasiski", 4686472, 162134}, {"SectClass Vernam", 4686580, 162137}, {"SubsClas One-time", 4686710, 162141}, {"DefClass Vernam", 4686817, 162144}, {"SubsClass Playfair", 4686920, 162147}, {"DefClass Playfair", 4687030, 162150}, {"SubsClas Transposition", 4687140, 162153}, {"DefClass Transp cipher", 4687259, 162156}, {"DefClass Column Transp", 4687372, 162159}, {"DefClass product cipher", 4687487, 162162}, {"DefClass stream cipher", 4687601, 162165}, {"SubSClass Hagelin", 4687709, 162168}, {"SubSClass Enigma", 4687817, 162171}, {"SectClass Problems", 4687951, 162175}, {"Chap Shift", 4688050, 162178}, {"SectShift pseudo seq", 4688151, 162181}, {"FigShift pseudo random", 4688264, 162184}, {"PostShift Eventually Periodic", 4688394, 162187}, {"DefShift pseudo random", 4688516, 162190}, {"DefShift Period", 4688622, 162193}, {"DefShift run", 4688726, 162196}, {"DefShift Gap Block", 4688825, 162199}, {"DefShift AC(k)", 4688938, 162202}, {"FormShift AC(k)", 4689036, 162205}, {"DefShift AC in/out", 4689150, 162208}, {"PostShift Golomb", 4689254, 162211}, {"PostShift Crypt", 4689362, 162214}, {"SectShift Linear", 4689464, 162217}, {"SubsShift linear", 4689567, 162220}, {"FigShift FSR", 4689670, 162223}, {"DefShift State", 4689774, 162226}, {"DefShift LFSR", 4689871, 162229}, {"FigShift LFSR", 4689965, 162232}, {"FormShift Lin Rec", 4690073, 162235}, {"FormShift Full Lin Rec", 4690193, 162238}, {"FormShift Rec States", 4690316, 162241}, {"DefShift feedb coeff", 4690437, 162244}, {"FigShift LFSR n=4", 4690545, 162247}, {"SubsShift PN", 4690653, 162250}, {"DefShift PN Seq", 4690756, 162253}, {"LemShift All States", 4690866, 162256}, {"DefShift Char Pol", 4690976, 162259}, {"DefShift Omega", 4691077, 162262}, {"LemShift Omega=linear", 4691190, 162265}, {"FormShift Reciprocal", 4691304, 162268}, {"FormShift Rec pol", 4691411, 162271}, {"DefShift power series", 4691531, 162274}, {"FormShift Gen Function", 4691644, 162277}, {"TheoShift S(x)f\[RawStar](x)=pol", 4691780, 162280}, {"CorShift S=u/f", 4691901, 162283}, {"LemShift s+t seq", 4692005, 162286}, {"SubsShift which char", 4692116, 162289}, {"DefShift period pol", 4692231, 162292}, {"FactShift period", 4692339, 162295}, {"LemShift Period div m", 4692447, 162298}, {"LemShift Period=m", 4692558, 162301}, {"LemShift PN=> Irred", 4692667, 162304}, {"ExamShift f1 f2", 4692774, 162307}, {"TheoShift PN iff Prim", 4692885, 162310}, {"SubsShift alternative", 4693001, 162313}, {"FormShift GF(2^n)", 4693115, 162316}, {"SubsShift crypt prop", 4693232, 162319}, {"PostShift Ad C3", 4693343, 162322}, {"FormShift break PN", 4693447, 162325}, {"SectShift Non-linear", 4693569, 162328}, {"SubsShift minimal", 4693678, 162331}, {"DefShift Lin Compl", 4693789, 162334}, {"LemShift O(f)=", 4695024, 162367}, {"TheoShift Ber-Mas", 4695131, 162370}, {"FormShift BM j<=k-1", 4695242, 162373}, {"FormShift BM j=k", 4695359, 162376}, {"FormShift BM j<=m", 4695474, 162379}, {"FormShift f(x) in BM", 4695594, 162382}, {"AlgShift Ber-Mas", 4695713, 162385}, {"SubsShift Observations", 4695827, 162388}, {"DefShift branch point", 4695946, 162391}, {"TheoShift unique pred", 4696059, 162394}, {"SectShift Problems", 4696173, 162397}, {"Chap Block", 4696300, 162401}, {"SectBlock principles", 4696402, 162404}, {"SubsBlock Modes", 4696509, 162407}, {"SubsubsBlock codebook", 4696621, 162410}, {"DefBlock block", 4696733, 162413}, {"DefBlock codebook", 4696834, 162416}, {"FigBlock codebook", 4696939, 162419}, {"SubsubsBlock cipher block chaining", 4697069, 162422}, {"DefBlock CBC", 4697192, 162425}, {"RemBlock Ci=Cj", 4697289, 162428}, {"SubsubsBlock cipher feedback", 4697403, 162431}, {"DefBlock CFM", 4697520, 162434}, {"FigBlock CFM", 4697613, 162437}, {"SubsBlock Ident Ver", 4697723, 162440}, {"DefBlock challenge", 4697836, 162443}, {"FigBlock identity ver", 4697947, 162446}, {"SectBlock DES", 4698063, 162449}, {"SubsubsDES DES", 4698162, 162452}, {"DefBlock DES", 4698265, 162455}, {"FormBlock DES encr", 4698365, 162458}, {"FigDES DES round", 4698481, 162461}, {"SubsubsDES Triple DES", 4698623, 162465}, {"DefBlock Triple DES", 4698740, 162468}, {"SectBlock IDEA", 4698843, 162471}, {"DefBlock IDEA", 4698942, 162474}, {"DefBlock mult oper", 4699045, 162477}, {"FigBlock Idea", 4699146, 162480}, {"SectBlock Further", 4699255, 162483}, {"DefBlock RC5", 4699356, 162486}, {"DefBlock lin and diff crypt", 4699465, 162489}, {"SectBlock Problems", 4699581, 162492}, {"Chap Shannon", 4699683, 162495}, {"SectShann Entropy", 4699809, 162499}, {"FormShann information", 4699919, 162502}, {"DefShann information", 4700041, 162505}, {"FormShann infor 1/2^k", 4700152, 162508}, {"DefShann entropy", 4700271, 162511}, {"FormShann entropy", 4700375, 162514}, {"FormShann entropy n=2", 4700495, 162517}, {"InputShann MultiEntropy", 4700621, 162520}, {"InterShann entropy", 4700821, 162525}, {"PropShann P1", 4700931, 162528}, {"PropShann P2", 4701035, 162531}, {"PropShann P3", 4701139, 162534}, {"PropShann P5", 4701243, 162537}, {"ExamShann unfair coin", 4701357, 162540}, {"ExamShann English", 4701470, 162543}, {"DefShann redundancy", 4701581, 162546}, {"DefShann unicity dist", 4701699, 162549}, {"SectShann Mutual", 4701814, 162552}, {"DefShann joint dis", 4701920, 162555}, {"DefShann cond prob", 4702026, 162558}, {"FormShann p(x|y)", 4702130, 162561}, {"FormShann H(X|y)", 4702244, 162564}, {"DefShann cond entropy", 4702363, 162567}, {"FormShann H(X|Y)", 4702470, 162570}, {"TheoShann chain rule", 4702591, 162573}, {"DefShann mutual inf", 4702704, 162576}, {"FormShann I(x;y)", 4702809, 162579}, {"TheoShann I(X;Y)", 4702925, 162582}, {"DefShann BSC", 4703026, 162585}, {"FormShann H(M|KC)", 4703130, 162588}, {"DefShann uncond secure", 4703251, 162591}, {"SectShann Problems", 4703368, 162594}, {"Chap Huff", 4703497, 162598}, {"DefHuff data compress", 4703599, 162601}, {"SectHuff basics", 4703706, 162604}, {"DefHuff code", 4703805, 162607}, {"DefHuffman U.D.", 4703904, 162610}, {"ExamHuff unfair coin", 4704016, 162613}, {"TheoHuff McMillan", 4704128, 162616}, {"FormHuff McMillan", 4704236, 162619}, {"DefHuff prefix code", 4704354, 162622}, {"LemHuff prefix=>UD", 4704467, 162625}, {"TheoHuff Kraft", 4704572, 162628}, {"FormHuff Kraft", 4704673, 162631}, {"TheoHuff P1-P5", 4704783, 162634}, {"SectHuff Huffman", 4704888, 162637}, {"AlgHuff Huffman", 4704991, 162640}, {"DefHuff reduction", 4705094, 162643}, {"DefHuff Splitting", 4705200, 162646}, {"ExamHuff coding", 4705304, 162649}, {"LemHuff Huffman", 4705407, 162652}, {"SectHuff Lempel-Ziv", 4705517, 162655}, {"DefHuff univ data comp", 4705630, 162658}, {"DefHuff sliding", 4705737, 162661}, {"SubsubsHuff Ziv init", 4705844, 162664}, {"DefHuff dictionary", 4705959, 162667}, {"SubsubsHuff Ziv enco", 4706068, 162670}, {"AlgHuff encoding Lempel Ziv", 4706192, 162673}, {"ExamHuff L-Z coding", 4706313, 162676}, {"SubsubsHuff Ziv deco", 4706426, 162679}, {"SectHuff Problems", 4706541, 162682}, {"Chap Public", 4706641, 162685}, {"SectPubl model", 4706738, 162688}, {"SubsPubl Motivation", 4706843, 162691}, {"DefPubl Public Key", 4706956, 162694}, {"FigPubl Public", 4707058, 162697}, {"PropPubl PK1", 4707163, 162700}, {"PropPubl PK2", 4707267, 162703}, {"PropPubl PK3", 4707371, 162706}, {"PropPubl PK4", 4707475, 162709}, {"PropPubl PK5", 4707579, 162712}, {"SubsPubl Confidentiality", 4707695, 162715}, {"TablePubl Secrecy", 4707812, 162718}, {"DefPubl one-way", 4707922, 162721}, {"DefPubl trapdoor", 4708023, 162724}, {"SubsPubl Signature", 4708126, 162727}, {"DiscPubl Discussion Signature", 4708249, 162730}, {"TablePubl Signature", 4708369, 162733}, {"SubsPubl Secr+Sign", 4708484, 162736}, {"SectPubl Problems", 4708595, 162739}, {"Chap Discr", 4708694, 162742}, {"SectDiscr Diffie Hellman", 4708800, 162745}, {"SubSDiscr Log Problem", 4708917, 162748}, {"FormDiscr c=a^m", 4709029, 162751}, {"ExamDiscr 2 primitive", 4709146, 162754}, {"FormDiscr 2 log q", 4709259, 162757}, {"ExamDiscr Exp 171", 4709364, 162760}, {"DefDiscr addition chain", 4709477, 162763}, {"DefDiscr dis log prob", 4709599, 162766}, {"FormDiscr Knuth q^1/2", 4709711, 162769}, {"TableDiscr discrep", 4709822, 162772}, {"SubsDiscr Dif-Hel Key Exch", 4709946, 162775}, {"DefDiscr key exch", 4710065, 162778}, {"DefDiscr Diffie Hellman", 4710175, 162781}, {"ExamDiscr Key Exch", 4710297, 162784}, {"SectDiscr Other Log Systems", 4710417, 162787}, {"SubsDiscr ElGamal", 4710533, 162790}, {"SubsubsDisc ElGamal setting it up", 4710659, 162793}, {"SubsubsDiscr ElGamal secrecy", 4710797, 162796}, {"SubsubsDiscr ElGamal signature", 4710932, 162799}, {"FormDiscr ElGamal", 4711056, 162802}, {"SubsDiscr Variations on ElGamal", 4711186, 162805}, {"DefDiscr sign eq.", 4711310, 162808}, {"SubsubsDisc DSS", 4711413, 162811}, {"DefDiscr DSS", 4711517, 162814}, {"DefDiscr SHA", 4711611, 162817}, {"SubsubsDisc Schnorr", 4711713, 162820}, {"DefDiscr Schnorr", 4711825, 162823}, {"SubsubsDisc Nyberg", 4711929, 162826}, {"DefDiscr Nyberg-R", 4712041, 162829}, {"SectDiscr How to take logs", 4712154, 162832}, {"AlgDiscr Pohlig Hellman", 4712275, 162835}, {"CaseDiscr q-1 is 2power", 4712397, 162838}, {"RemDiscr Pohlig", 4712513, 162841}, {"CaseDiscr small powers", 4712620, 162844}, {"FormDiscr m^(i)", 4712735, 162847}, {"DefDiscr Table PH", 4712849, 162850}, {"CaseDiscr Exam P-H", 4712955, 162853}, {"SubSDiscr Baby Step", 4713070, 162856}, {"AlgDiscr Baby Giant", 4713184, 162859}, {"SubSDiscr Pollard", 4713296, 162862}, {"ExamDiscr Pollard", 4713406, 162865}, {"DefDiscr Floyd", 4713512, 162868}, {"SubSDiscr Index Calc", 4713618, 162871}, {"SubsubsDiscr Index general", 4713740, 162874}, {"DefDiscr factor base", 4713863, 162877}, {"SubsubsDiscr Index Mod p", 4713978, 162880}, {"SubsubsDiscr Index 2^n", 4714103, 162883}, {"ExamDiscr Index Calc2", 4714224, 162886}, {"SectDiscr Problems", 4714338, 162889}, {"Chap RSA", 4714463, 162893}, {"SectRSA RSA", 4714554, 162896}, {"SubsRSA RSA math", 4714653, 162899}, {"FormRSA Euler Thm", 4714762, 162902}, {"FormRSA EulerPhi", 4714877, 162905}, {"SubsRSA RSA setting up", 4714997, 162908}, {"SubsubsRSA compute n", 4715115, 162911}, {"FormRSA EulerPhi for RSA", 4715237, 162914}, {"ExamRSA RSA", 4715354, 162917}, {"SubsubsRSA compute e and d", 4715543, 162922}, {"FormRSA e.d=1", 4715661, 162925}, {"Random", 4715762, 162928}, {"SubsubsRSA making public", 4715864, 162931}, {"SubsRSA RSA secr", 4715983, 162934}, {"FormRSA check RSA secr", 4716097, 162937}, {"TableRSA RSA Privacy", 4716222, 162940}, {"ExamRSA Decryp Part 4", 4716344, 162943}, {"SubsRSA RSA sign", 4716536, 162948}, {"FormRSA check RSA sign", 4716650, 162951}, {"TableRSA RSA Signature", 4716777, 162954}, {"SubsRSA RSA secr + sign", 4716903, 162957}, {"FormRSA RSA secr+sign", 4717023, 162960}, {"TableRSA RSA Secr+Sign", 4717148, 162963}, {"SectRSA Security", 4717269, 162966}, {"SubsRSA cryptanalist", 4717377, 162969}, {"DiscRSA fact=break", 4717491, 162972}, {"ExamRSA p-q small", 4717596, 162975}, {"SubsRSA factorization", 4717707, 162978}, {"SubsubsRSA Pollard p-1", 4717826, 162981}, {"DefRSA Smooth", 4717939, 162984}, {"FormRSA prod prime smooth", 4718048, 162987}, {"DefRSA Strong prime", 4718174, 162990}, {"SubsRSA Factorization General", 4718292, 162993}, {"SubsubsRSA Pollard rho", 4718419, 162996}, {"ExamRSA Pollard rho", 4718537, 162999}, {"SubsubsRSA Random Square", 4718653, 163002}, {"FormRSA a^2=b", 4718767, 163005}, {"StepRSA quadr sieve 3", 4718883, 163008}, {"SubsubsRSA Q Sieve", 4718995, 163011}, {"ExamRSA quadr sieve", 4719109, 163014}, {"SectRSA unsafe modes", 4719223, 163017}, {"SubsRSA Coppersmith", 4719335, 163020}, {"SubsubsRSA m^3", 4719444, 163023}, {"ExamRSA e=3 same m", 4719554, 163026}, {"SubsubsRSA Copper", 4719664, 163029}, {"FormRSA Copp Red", 4719775, 163032}, {"ExamRSA Copper", 4719888, 163035}, {"SubsRSA Wiener attack", 4719999, 163038}, {"FormRSA Wien ed", 4720111, 163041}, {"FormRSA Wien k/dg", 4720225, 163044}, {"SubsRSA physical", 4720340, 163047}, {"SubsubsRSA Timing", 4720449, 163050}, {"SubsubsRSA Microwave", 4720564, 163053}, {"SectRSA generate primes", 4720684, 163056}, {"SubsRSA try random", 4720797, 163059}, {"AlgRSA generate prime", 4720912, 163062}, {"SubsRSA prob appr", 4721025, 163065}, {"SubsubsRSA Solovay", 4721136, 163068}, {"FormRSA qr", 4721241, 163071}, {"FormRSA u^(p-1)/2=", 4721349, 163074}, {"TheoRSA Solovay", 4721464, 163077}, {"FormRSA a=1+p", 4721567, 163080}, {"FormRSA a=1 mod s", 4721679, 163083}, {"FormRSA u=a p1", 4721792, 163086}, {"AlgRSA Solovay", 4721902, 163089}, {"SubsubsRSA Miller-Rabin", 4722014, 163092}, {"DefRSA strong witness", 4722135, 163095}, {"DefRSA strong liar", 4722245, 163098}, {"AlgRSA Miller-Rabin", 4722353, 163101}, {"SubsRSA Lenstra", 4722463, 163104}, {"TheoRSA Fermat", 4722568, 163107}, {"FormRSA Fermat", 4722669, 163110}, {"DefRSA Carmichael", 4722782, 163113}, {"TheoRSA Lenstra 1", 4722886, 163116}, {"FormRSA Cond Lenstra 1", 4722998, 163119}, {"FormRSA Cond Lenstra 2", 4723124, 163122}, {"FormRSA m^j mod 24", 4723246, 163125}, {"FormRSA m^j mod 24 j=0", 4723368, 163128}, {"AlgRSA Lenstra small", 4723492, 163131}, {"LemRSA m1=m2 mod 24", 4723607, 163134}, {"LemRSA m^2 mod 24", 4723718, 163137}, {"FormRSA u/d u/m", 4723824, 163140}, {"SectRSA Rabin", 4723934, 163143}, {"SubsRSA Rabin Encr", 4724037, 163146}, {"FormRSA e=2", 4724142, 163149}, {"FormRSA Rabin encr", 4724252, 163152}, {"ExamRSA Rabin", 4724364, 163155}, {"SubSRSA Rabin decr", 4724470, 163158}, {"SubsubsRSA Rabin pre", 4724584, 163161}, {"FormRSA CRT eq for a", 4724701, 163164}, {"FormRSA CRT eq for b", 4724823, 163167}, {"SubsubsRSA find square root", 4724952, 163170}, {"CaseRSA Rabin 2", 4725072, 163173}, {"CaseRSA Rabin 3", 4725172, 163176}, {"FormRSA (x-u)^2-c", 4725274, 163179}, {"FormRSA (r+u)/(s+u)", 4725392, 163182}, {"InputAppA ListQuadRes", 4725514, 163185}, {"FormRSA gcd for square root", 4725718, 163190}, {"SubsubsRSA Rabin 4 solutions", 4725855, 163193}, {"SubsRSA distinguish", 4725979, 163196}, {"ExamRSA Rabin four", 4726092, 163199}, {"SubsRSA Equivalence", 4726204, 163202}, {"TheoRSA Rabin equiv compl", 4726324, 163205}, {"SectRSA Problems", 4726440, 163208}, {"ProbRSA RSA when gcd>1", 4726550, 163211}, {"ProbRSA 9.7", 4726656, 163214}, {"ProbRSA Rabin non-trivial factor", 4726772, 163217}, {"ProbRSA Rabin decrypt 5(8)", 4726904, 163220}, {"Chap Ellip", 4727016, 163223}, {"SectEllip Basic facts", 4727119, 163226}, {"FormEllip Weierstrass", 4727233, 163229}, {"FormEllip Red Weier", 4727355, 163232}, {"FormEllip Weier Red p>3", 4727479, 163235}, {"FormEllip Weier Red p=2", 4727607, 163238}, {"FormEllip Weier Red p=2 super", 4727741, 163241}, {"DefEllip elliptic curve", 4727875, 163244}, {"TheoEllip Hasse", 4727990, 163247}, {"ExamEllip point on EC?", 4728101, 163250}, {"SectEllip geometry", 4728216, 163253}, {"SubsubsEllip two points", 4728329, 163256}, {"FormEllip lambda", 4728446, 163259}, {"FormEllip x3 p>2", 4728560, 163262}, {"FormEllip y3 p>2", 4728674, 163265}, {"FormEllip x3 p=2", 4728788, 163268}, {"FormEllip y3 p=2", 4728902, 163271}, {"SubsubsEllip tangent", 4729020, 163274}, {"DefEllip tangent", 4729134, 163277}, {"DefEllip derivative", 4729240, 163280}, {"FormEllip lambda tang p>2", 4729355, 163283}, {"FormEllip lambda tang p=2", 4729487, 163286}, {"FormEllip 2x1 p=2", 4729611, 163289}, {"FormEllip 2y1 p=2", 4729727, 163292}, {"SectEllip Addition", 4729844, 163295}, {"DefEllip Addition", 4729951, 163298}, {"TheoEllip Additive Group", 4730071, 163301}, {"InputEllip addition", 4730188, 163304}, {"DefEllip order", 4730410, 163310}, {"SectEllip EC-cryptosystems", 4730522, 163313}, {"SubsElip discr log problem", 4730646, 163316}, {"DefEllip Discr Log Prob", 4730771, 163319}, {"SubsElip discr log system", 4730896, 163322}, {"TableEllip Diffie Hellman", 4731022, 163325}, {"ExamEllip Key Exchange", 4731151, 163328}, {"SubsElip security", 4731265, 163331}, {"DefEllip Xedni", 4731372, 163334}, {"DefEllip homogenize", 4731477, 163337}, {"DefEllip singular", 4731583, 163340}, {"DefEllip supersingular", 4731692, 163343}, {"DefEllip anomalous", 4731802, 163346}, {"SectEllip Problems", 4731908, 163349}, {"Chap McEl", 4732007, 163352}, {"SectMcEl Goppa", 4732102, 163355}, {"TheoMcEl Goppa", 4732202, 163358}, {"FormMcEl Goppa", 4732303, 163361}, {"DefMcEl Goppa code", 4732418, 163364}, {"DefMcEl codeword", 4732556, 163368}, {"ExamMcEl Goppa", 4732659, 163371}, {"S5.2.1", 4732754, 163374}, {"DefMcEl parity ch ma", 4732850, 163377}, {"FormMcEl Hc=0", 4732953, 163380}, {"DefMcEl Syndrome", 4733064, 163383}, {"SectMcEl McEliece", 4733167, 163386}, {"SubsMcEl System", 4733271, 163389}, {"SubsubsMcEl setting it up", 4733387, 163392}, {"FormMcEl G\[RawStar]=SGP", 4733513, 163395}, {"SubsubsMcEl encryption", 4733641, 163398}, {"FormMcEl enc McE", 4733756, 163401}, {"DefMcEl weight", 4733868, 163404}, {"SubsubsMcEl decryption", 4733974, 163407}, {"SubsMcEl Discussion", 4734092, 163410}, {"SubsubsMcEl summary", 4734206, 163413}, {"TableMcEl McEliece", 4734320, 163416}, {"PropMcEl parameters", 4734434, 163419}, {"SubsubsMcEl heuristics", 4734545, 163422}, {"DefMcEl NP-complete", 4734663, 163425}, {"SubsubsMcEl no sign", 4734772, 163428}, {"SubsMcEl Security", 4734885, 163431}, {"SubsubsMcEl guessing S and P", 4735006, 163434}, {"SubsubsMcEl exhaustive", 4735135, 163437}, {"ExamMcEl Hamming", 4735250, 163440}, {"SubsubsMcEl syndrome", 4735359, 163443}, {"SubsubsMcEl guessing k correct", 4735486, 163446}, {"SubsubsMcEl multiple", 4735614, 163449}, {"SubsMcEl Example", 4735728, 163452}, {"SectMcEl Other technique", 4735844, 163455}, {"DefMcEl Inf Set Dec", 4735959, 163458}, {"AlgMcEl Bit Swap", 4736065, 163461}, {"S5.52.1", 4736164, 163464}, {"FormMcEl Pr(l-1|l)", 4736258, 163467}, {"FormMcEl Pr(l+1|l)", 4736376, 163470}, {"FormMcEl Pr(l|l)", 4736492, 163473}, {"ExamMcEl Golay", 4736685, 163478}, {"FormMcEl Na=", 4736786, 163481}, {"FormMcEl Nl=", 4736892, 163484}, {"TheoMcEl #steps", 4737001, 163487}, {"SectMcEl Niederr", 4737105, 163490}, {"FormMcEl H\[RawStar]=SHP", 4737217, 163493}, {"TableMcEl Niederreiter", 4737345, 163496}, {"SectMcEl Problems", 4737461, 163499}, {"ProbMcEl rank", 4737563, 163502}, {"Chap Knapsack", 4737663, 163505}, {"SectKnap Knap System", 4737768, 163508}, {"SubsKnap Knap Problem", 4737881, 163511}, {"DefKnap knapsack", 4737994, 163514}, {"FormKnap knapsack", 4738103, 163517}, {"DefKnap superincreasing", 4738225, 163520}, {"AlgKnap solve superincr", 4738341, 163523}, {"ExamKnap encryption", 4738459, 163526}, {"InputKnap knap for superincr", 4738582, 163529}, {"SubsKnap Knap System", 4738703, 163532}, {"SubsubsKnap setting up", 4738821, 163535}, {"FormKnap M>sum", 4738934, 163538}, {"FormKnap u'=w.u", 4739044, 163541}, {"SubsubsKnap encryp", 4739159, 163544}, {"FormKnap encryption", 4739273, 163547}, {"SubsubsKnap decryp", 4739393, 163550}, {"SubsubsKnap discussion", 4739511, 163553}, {"TableKnap knapsack", 4739629, 163556}, {"SectKnap L3-attack", 4739748, 163559}, {"SubsKnap L3 Intro", 4739857, 163562}, {"DefKnap density", 4739966, 163565}, {"SubsKnap L3 lattices", 4740080, 163568}, {"DefKnap lattice", 4740192, 163571}, {"DefKnap basis", 4740300, 163574}, {"AlgKnap Gram-Schmidt", 4740405, 163577}, {"S5.53.1", 4740504, 163580}, {"SubsKnap L3 reduced basis", 4740679, 163585}, {"DefKnap reduced", 4740796, 163588}, {"TheoKnap complexity L3", 4740913, 163591}, {"SubsKnap L3 attack", 4741029, 163594}, {"FormKnap the basis vectors", 4741150, 163597}, {"SubsKnap L3 reduction", 4741282, 163600}, {"SectKnap ChorR", 4741394, 163603}, {"SubsubsKnap CR setting it up", 4741509, 163606}, {"FormKnap CR a^Ui=x+i", 4741636, 163609}, {"FormKnap u=U+D", 4741753, 163612}, {"ExamKnap ChorR", 4741864, 163615}, {"SubsubsKnap CR encryp", 4741975, 163618}, {"FormKnap Sum mi=k", 4742092, 163621}, {"FormKnap CR encr", 4742208, 163624}, {"AlgKnap conversion", 4742325, 163627}, {"SubsubsKnap CR decryp", 4742441, 163630}, {"AlgKnap decrypt ChorR", 4742562, 163633}, {"Sectknap Problems", 4742676, 163636}, {"Chap Auth", 4742775, 163639}, {"SectAuth Introduction", 4742878, 163642}, {"DefAuth comp secure", 4742991, 163645}, {"DefAuth Uncond secure", 4743102, 163648}, {"SectAuth Hash", 4743207, 163651}, {"DefAuth hash", 4743305, 163654}, {"DefAuth one-way", 4743405, 163657}, {"DefAuth weak col res", 4743511, 163660}, {"DefAuth strong col res", 4743624, 163663}, {"DefAuth MAC", 4743728, 163666}, {"AlgAuth MAC on DES", 4743830, 163669}, {"SectAuth Auth Codes", 4743943, 163672}, {"SubsAuth notions", 4744051, 163675}, {"ExamAuth 1 bit", 4744158, 163678}, {"TableAuth 1 bit", 4744262, 163681}, {"DefAuth auth code", 4744375, 163684}, {"FormAuth one-to-one", 4744489, 163687}, {"DefAuth scheme", 4744605, 163690}, {"DefAuth A-code", 4744705, 163693}, {"DefAuth imp attack", 4744816, 163696}, {"DefAuth subs attack", 4744925, 163699}, {"DefAuth P_I", 4745026, 163702}, {"DefAuth P_S", 4745125, 163705}, {"FormAuth P_S", 4745225, 163708}, {"DefAuth deception", 4745338, 163711}, {"DefAuth P_D", 4745436, 163714}, {"TheoAuth PI>M/C", 4745545, 163717}, {"TheoAuth PS>(M-1)/(C-1)", 4745658, 163720}, {"DefAuth square root", 4745775, 163723}, {"TheoAuth M<=K+1", 4745879, 163726}, {"SubsAuth PG constr", 4745987, 163729}, {"SubsubsAuth PG def", 4746100, 163732}, {"DefAuth point and line", 4746218, 163735}, {"DefAuth Proj Plane", 4746330, 163738}, {"DefAuth order PG2", 4746443, 163741}, {"DefAuth Fano", 4746548, 163744}, {"DefAuth incid matr", 4746648, 163747}, {"FormAuth A.A^T", 4746751, 163750}, {"SubsubsAuth PG constr", 4746869, 163753}, {"FormAuth line", 4746982, 163756}, {"FormAuth plane", 4747092, 163759}, {"TheoAuth PG constr", 4747207, 163762}, {"ExamAuth PG2-3", 4747315, 163765}, {"SubsubsAuth PG A-code", 4747426, 163768}, {"DefAuth PG AC", 4747539, 163771}, {"TheoAuth PG-AC", 4747645, 163774}, {"SubsAuth OA AC", 4747749, 163777}, {"DefAuth OA", 4747850, 163780}, {"ExamAuth OA4-5-1", 4747955, 163783}, {"SubsAuth EC AC", 4748059, 163786}, {"DefAuth V(n q)", 4748164, 163789}, {"FormAuth c+l1 in C", 4748268, 163792}, {"FormAuth c~c'", 4748382, 163795}, {"ExamAuth Hamming", 4748494, 163798}, {"TheoAuth EC=>A", 4748598, 163801}, {"FormAuth P_I in Joh", 4748707, 163804}, {"ExamAuth RS-1", 4748822, 163807}, {"SectAuth Problems", 4748928, 163810}, {"Chap Zero Knowledge", 4749037, 163813}, {"DefProt protocol", 4749145, 163816}, {"DefProt zero-know", 4749250, 163819}, {"SectZero Zero Knowledge", 4749362, 163822}, {"FigProt Fiat-Shamir", 4749477, 163825}, {"DefProt witness", 4749595, 163828}, {"DefProt challenge", 4749698, 163831}, {"DefProt response", 4749802, 163834}, {"SectZero Schnorr", 4749904, 163837}, {"FigProt Schnorr", 4750008, 163840}, {"SectZero Problem", 4750123, 163843}, {"Chap Secr", 4750221, 163846}, {"SectSecr Introduction", 4750324, 163849}, {"DefSecret access struc", 4750440, 163852}, {"DefSecret minimal el", 4750561, 163855}, {"DefSecret perfect SSS", 4750673, 163858}, {"DefSecret SSS", 4750778, 163861}, {"DefSecret share", 4750885, 163864}, {"SectSecr Schemes", 4750987, 163867}, {"DefSecret Threshold", 4751095, 163870}, {"PropThresh TS1", 4751200, 163873}, {"PropThresh TS2", 4751299, 163876}, {"ConstrThresh Shamir", 4751403, 163879}, {"FormThresh Secret Function", 4751610, 163884}, {"FormThresh Share", 4751765, 163888}, {"FormThresh LaGrange", 4751913, 163892}, {"ConstrThresh Shamir Gen", 4752038, 163895}, {"SectSecr Schemes with liars", 4752161, 163898}, {"SectSecr SSS", 4752273, 163901}, {"FigSecret One Bit", 4752375, 163904}, {"DefSecret ideal SSS", 4752493, 163907}, {"TheoSecret Matrix descr", 4752606, 163910}, {"SectSecr visual", 4752720, 163913}, {"DefSecret Visual SSS", 4752828, 163916}, {"DefSecret Expansion factor", 4752944, 163919}, {"PropSecret VTS1", 4753057, 163922}, {"PropSecret VTS2", 4753158, 163925}, {"PropSecret VTS3", 4753259, 163928}, {"ExamSecret Visual n=4", 4753365, 163931}, {"S5.23.1", 4753555, 163936}, {"ConstrSecret Visual TS", 4753655, 163939}, {"CorSecret visual QR constr", 4753779, 163942}, {"FormSecret inner prod", 4753902, 163945}, {"SectSecr Problems", 4754023, 163948}, {"ChapNumberTh", 4754125, 163951}, {"SectAppA Introduction", 4754484, 163958}, {"DefAppA divide", 4754592, 163961}, {"DefAppA prime", 4754690, 163964}, {"TheoAppA Euclid", 4754789, 163967}, {"DefAppA Pi(x)", 4754892, 163970}, {"TheoAppA Prime Numb Th", 4755004, 163973}, {"DefAppA GCD", 4755112, 163976}, {"PropAppA GCD1", 4755213, 163979}, {"PropAppA GCD2", 4755330, 163982}, {"DefAppA LCM", 4755445, 163985}, {"PropAppA LCM1", 4755546, 163988}, {"PropAppA LCM2", 4755663, 163991}, {"DefAppA Alter GCD/LCM", 4755788, 163994}, {"DefAppA coprime", 4755931, 163998}, {"TheoAppA GCD=ua+vb", 4756034, 164001}, {"LemAppA d Div ab", 4756144, 164004}, {"TheoAppA Fundamental", 4756254, 164007}, {"FormAppA gcd=ProdMin", 4756369, 164010}, {"FormAppA lcm=ProdMax", 4756500, 164013}, {"FormAppA gcd lcm=mn", 4756630, 164016}, {"SectAppA Euclid", 4756755, 164019}, {"AlgAppA Simple Euclid", 4756864, 164022}, {"AlgAppA ExtEuclidAlg", 4756981, 164025}, {"FormAppA gcd=ua+vb", 4757096, 164028}, {"DefAppA Fibonnaci", 4757222, 164031}, {"TheoAppA Compl Eucl", 4757332, 164034}, {"SecAppA Congruences", 4757446, 164037}, {"SubSecA Congruences", 4757557, 164040}, {"DefAppA Congr Rel", 4757669, 164043}, {"DefAppA compl resid", 4757783, 164046}, {"FormAppA ai=aj ->i=j", 4757900, 164049}, {"LemAppA DivEqRelByK", 4758030, 164052}, {"LemAppA Also ka_i is CRS", 4758148, 164055}, {"SubsAppA Euler", 4758261, 164058}, {"DefAppA Euler Totient", 4758372, 164061}, {"TheoAppA Sum Phi=n", 4758490, 164064}, {"FunctAppA Divisor sum", 4758604, 164067}, {"DefAppA Reduced RS", 4758966, 164076}, {"InputAppA CoPrimes", 4759081, 164079}, {"LemAppA AR_i also Red", 4759192, 164082}, {"TheoAppA Euler", 4759302, 164085}, {"TheoAppA Fermat", 4759406, 164088}, {"FormAppA Phi p^e=", 4759513, 164091}, {"DefAppA multiplicative", 4759643, 164094}, {"LemAppA Phi is mult", 4759762, 164097}, {"TheoAppA Euler Phi Form", 4759878, 164100}, {"SubsAppA lin congr", 4759994, 164103}, {"DefAppA linear CR", 4760105, 164106}, {"TheoAppA AX=B mod M", 4760211, 164109}, {"SubsAppA Chinese RT", 4760324, 164112}, {"TheoAppA Chinese RT", 4760438, 164115}, {"FormAppA ax=b mod m multi", 4760558, 164118}, {"ExamAppA Chin Rem Th", 4760694, 164121}, {"SecAppA QR", 4760798, 164124}, {"DefAppA quadratic CR", 4760901, 164127}, {"DefAppA QR", 4761003, 164130}, {"DefAppA Legendre S", 4761109, 164133}, {"DefAppA Jacobi S", 4761222, 164136}, {"TheoAppA Sum Chi", 4761333, 164139}, {"TheoAppA Chi(uv)", 4761440, 164142}, {"TheoAppA chi(u)chi(u+k)", 4761554, 164145}, {"FormAppA x^(p-1)/2 is prod QR", 4761681, 164148}, {"TheoAppA u/p=u^(p-1)/2", 4761823, 164151}, {"CorAppA Chi(-1)", 4761935, 164154}, {"TheoAppA Chi(2)", 4762041, 164157}, {"FormAppA Def Jac (2x)", 4762153, 164160}, {"TheoAppA Jacob iRelat", 4762286, 164163}, {"TheoAppA Quad Reci Gauss", 4762407, 164166}, {"SecAppA Continued Fractions", 4762534, 164169}, {"DefAppA Cont Frac", 4762651, 164172}, {"FormAppA Cont Frac", 4762763, 164175}, {"CFF", 4762876, 164178}, {"LemAppA rat->CF", 4763260, 164190}, {"AlgAppA CF", 4763359, 164193}, {"S5.67.1", 4763452, 164196}, {"DefAppA Cont Frac Appr", 4764257, 164219}, {"TheoAppA recurr CF", 4764374, 164222}, {"FormAppA qk>Fk", 4764483, 164225}, {"LemAppA pq-pq=-1", 4764604, 164228}, {"CorAppA CF gcd(p q)=1", 4764716, 164231}, {"FormAppA Ck-Ck-1", 4764828, 164234}, {"TheoAppA CF Best Appr", 4764956, 164237}, {"SecAppA Mobius", 4765066, 164240}, {"SubsAppA Mobius", 4765168, 164243}, {"DefAppA Mobius function", 4765282, 164246}, {"LemAppA Sum Mu=", 4765400, 164249}, {"LemAppA Sum Moebius", 4765509, 164252}, {"TheoAppA Moebius Inv", 4765624, 164255}, {"CorAppA Mult Moebius", 4765740, 164258}, {"SubsAppA Sylvester", 4765854, 164261}, {"TheoAppA Incl-Excl", 4765966, 164264}, {"SectAppA Problems", 4766078, 164267}, {"ProbAppA gcd a^m-1 a^n-1", 4766192, 164270}, {"ChapGaloisTh", 4766303, 164273}, {"SecAppB Algebra", 4766402, 164276}, {"SubsAppB Abstract Algebra", 4766514, 164279}, {"SubsubsAppB operation", 4766636, 164282}, {"DefAppB operation", 4766752, 164285}, {"DefAppB unit element", 4766861, 164288}, {"ExamAppB Integers+", 4766970, 164291}, {"ExamAppB Matrices2x2", 4767082, 164294}, {"SubsubsAppB group", 4767193, 164297}, {"DefAppB Group", 4767301, 164300}, {"DefAppB subgroup", 4767409, 164303}, {"ExamAppB MultiGroup", 4767515, 164306}, {"DefAppB additive group", 4767633, 164309}, {"SubsubsAppB ring", 4767743, 164312}, {"DefAppB Ring", 4767849, 164315}, {"DefAppB subring", 4767955, 164318}, {"SubsubsAppB ideal", 4768061, 164321}, {"DefAppB Ideal", 4768169, 164324}, {"DefAppB mult inverse", 4768281, 164327}, {"SubsubsAppB field", 4768391, 164330}, {"DefAppB field", 4768499, 164333}, {"DefAppB zero div", 4768606, 164336}, {"DefAppB subfield", 4768710, 164339}, {"DefAppB finite", 4768811, 164342}, {"DefAppB GF", 4768907, 164345}, {"TheoAppB Wedderburn", 4769009, 164348}, {"SubsubsAppB equiv rel", 4769123, 164351}, {"DefAppB Equiv Rel", 4769239, 164354}, {"DefAppB equiv class", 4769354, 164357}, {"TheoAppB Res Class", 4769462, 164360}, {"DefAppB Res Class Ring", 4769578, 164363}, {"SubsubsAppB cyclic group", 4769695, 164366}, {"DefAppB Cyclic Group", 4769817, 164369}, {"LemAppB Order Divides n", 4769932, 164372}, {"LemAppB Order a^k", 4770047, 164375}, {"TheoAppB Order Subgroup", 4770162, 164378}, {"SubsAppB Linear Algebra", 4770284, 164381}, {"SubsubsAppB vector spaces", 4770408, 164384}, {"DefAppB Vector space", 4770531, 164387}, {"DefAppB Vector", 4770645, 164390}, {"DefAppB Linear S S", 4770747, 164393}, {"DefAppB trivial vs", 4770861, 164396}, {"DefAppB span", 4770962, 164399}, {"SubsubsAppB linear indep", 4771071, 164402}, {"DefAppB Linear Dep", 4771192, 164405}, {"DefAppB Basis", 4771302, 164408}, {"DefAppB Standard basis", 4771416, 164411}, {"DefAppB dimension", 4771525, 164414}, {"SubsubsAppB inner product", 4771645, 164417}, {"DefAppB inner product", 4771769, 164420}, {"DefAppB pos def", 4771883, 164423}, {"FormAppB inner prod", 4771990, 164426}, {"DefAppB orthogonal", 4772119, 164429}, {"DefAppB orth compl", 4772234, 164432}, {"DefAppB self orth", 4772347, 164435}, {"SecAppB Field Constr", 4772463, 164438}, {"DefAppB Zm", 4772565, 164441}, {"TheoAppB Field iff Prime", 4772671, 164444}, {"DefAppB polyn", 4772782, 164447}, {"DefAppB degree", 4772880, 164450}, {"FormAppB Pol add mult", 4772986, 164453}, {"FormAppB Pol add mult two", 4773123, 164456}, {"TheoAppB F[x]Ring", 4773256, 164459}, {"DefAppB Pol Equiv Def", 4773368, 164462}, {"TheoAppB Pol ExtGCD", 4773481, 164465}, {"CorAppB A(x)U(x)=1 mod F(x)", 4773603, 164468}, {"FunctAppB PolExtGCD", 4773725, 164471}, {"TheoAppB n Zeros", 4773830, 164474}, {"DefAppB gen ideal", 4773937, 164477}, {"DefAppB princ ideal", 4774044, 164480}, {"TheoAppB Field Iff Irred", 4774158, 164483}, {"ExamAppB Add Mult", 4774275, 164486}, {"SecAppB Numb Irr Pol", 4774388, 164489}, {"DefAppB monic", 4774494, 164492}, {"DefAppB Iq(n)", 4774592, 164495}, {"FormAppB Sum Irred", 4774702, 164498}, {"TheoAppB Ip(m)=", 4774826, 164501}, {"FormAppB Iq(n)<=", 4774932, 164504}, {"TheoAppB Iq(n)>0", 4775055, 164507}, {"CorAppB Iq(n)~~", 4775162, 164510}, {"SecAppB Field Struct", 4775272, 164513}, {"SubsAppB cyclic structure", 4775389, 164516}, {"TheoAppB Field For p^m", 4775512, 164519}, {"DefAppB Prim El", 4775623, 164522}, {"TheoAppB Cyclic Struc", 4775738, 164525}, {"CorAppB a^q^n=a", 4775850, 164528}, {"CorAppB a in F iff a^q=a", 4775964, 164531}, {"ExamAppB 16 min pol", 4776082, 164534}, {"TableAppB F16-1", 4776192, 164537}, {"TableAppB F16-2", 4776321, 164541}, {"SubsAppB cardinality", 4776455, 164545}, {"DefAppB characteristic", 4776573, 164548}, {"DefAppB isomorphic", 4776690, 164551}, {"DefAppB ext field", 4776804, 164554}, {"SubsAppB calculus rules", 4776916, 164557}, {"TheoAppB (x-a)^p=", 4777032, 164560}, {"CorAppB Sum a_i^p=", 4777142, 164563}, {"TheoAppB Is In F?", 4777253, 164566}, {"TheoAppB F(conj)=0", 4777364, 164569}, {"TheoAppB Numb Conj", 4777476, 164572}, {"SubsAppB min pols", 4777587, 164575}, {"DefAppB Min Pol", 4777695, 164578}, {"CorAppB Prop Min Pol", 4777805, 164581}, {"DefAppB degree of element", 4777925, 164584}, {"DefAppB Prim Pol", 4778038, 164587}, {"DefAppB Log Table", 4778142, 164590}, {"SubsAppB further props", 4778253, 164593}, {"LemAppB M(x)Divx^p^n-x", 4778373, 164596}, {"TheoAppB Factor x^p^m-x", 4778493, 164599}, {"CorAppB Zeros Irr F", 4778609, 164602}, {"CorAppB When Subfield", 4778723, 164605}, {"SubsAppB cycl pols", 4778836, 164608}, {"DefAppB Cycl Pol", 4778946, 164611}, {"FormAppB Factor x^n-1", 4779062, 164614}, {"TheoAppB Form Cyclot", 4779195, 164617}, {"TheoAppB Number Prim Pol", 4779314, 164620}, {"RemAppB p->q", 4779425, 164623}, {"SectAppB Problems", 4779527, 164626}, {"ProbAppB 3", 4779626, 164629}, {"ProbAppB order axb", 4779729, 164632}, {"ProbAppB Gauss", 4779837, 164635}, {"DefAppB Trace", 4779940, 164638}, {"Chap Famous", 4780038, 164641}, {"Mathematician: Euclid of Alexandria", 4780156, 164644}, {"Mathematician: Leonhard Euler", 4780299, 164647}, {"Mathematician: Pierre de Fermat", 4780438, 164650}, {"Mathematician: Evariste Galois", 4780578, 164653}, {"Mathematician: Johann Carl Friedrich Gauss", 4780729, 164656}, {"Mathematician: Karl Gustav Jacob Jacobi", 4780889, 164659}, {"Mathematician: Adrien-Marie Legendre", 4781043, 164662}, {"Mathematician: August Ferdinand M\[ODoubleDot]bius", 4781208, 164665}, {"Mathematician: Joseph Henry Maclagen Wedderburn", 4781384, 164668}, {"Chap New Functions", 4781528, 164671}, {"NewFunction CoPrimeQ", 4781638, 164674}, {"InputAppA CoPrimeQ", 4781754, 164677}, {"NewFunctions DivisorSum", 4781866, 164680}, {"NewFunction Knapsack", 4781987, 164683}, {"NewFunction MultiEntropy", 4782354, 164692}, {"Chap References", 4782471, 164695}, {"RefAdle79", 4782567, 164698}, {"RefAdle83", 4782656, 164701}, {"RefAdle94", 4782744, 164704}, {"RefAdlD93", 4782833, 164707}, {"RefAdPR83", 4782921, 164710}, {"RefAig79", 4783008, 164713}, {"RefBaKvT99", 4783096, 164716}, {"RefBau97", 4783185, 164719}, {"RefBek82", 4783271, 164722}, {"RefBer68", 4783357, 164725}, {"RefBerMT78", 4783445, 164728}, {"RefBeJL86", 4783534, 164731}, {"RefBihS93", 4783622, 164734}, {"RefBoDML97", 4783711, 164737}, {"RefBos92", 4783800, 164740}, {"RefBric85", 4783887, 164743}, {"RefBric89", 4783976, 164746}, {"RefCanS98", 4784065, 164749}, {"RefChoR85", 4784154, 164752}, {"RefCohL82", 4784243, 164755}, {"RefCohn77", 4784331, 164758}, {"RefCopp84", 4784419, 164761}, {"RefCopFPR96", 4784509, 164764}, {"RefCov67", 4784599, 164767}, {"RefDemy94", 4784687, 164770}, {"RefDen82", 4784775, 164773}, {"RefDifH76", 4784862, 164776}, {"RefDijk97", 4784950, 164779}, {"RefElGa85", 4785038, 164782}, {"RefFiaS87", 4785127, 164785}, {"RefFips94", 4785216, 164788}, {"RefFrie73", 4785305, 164791}, {"RefGarJ79", 4785393, 164794}, {"RefGilMS74", 4785483, 164797}, {"RefGol67", 4785571, 164800}, {"RefHall67", 4785658, 164803}, {"RefHar45", 4785745, 164806}, {"RefHast88", 4785832, 164809}, {"RefHelR83", 4785920, 164812}, {"RefHuff52", 4786009, 164815}, {"RefJoha94a", 4786098, 164818}, {"RefJoha94b", 4786188, 164821}, {"RefJohKS93", 4786278, 164824}, {"RefKahn67", 4786368, 164827}, {"RefKhin57", 4786456, 164830}, {"RefKnud94", 4786544, 164833}, {"RefKnut69", 4786633, 164836}, {"RefKnut73", 4786722, 164839}, {"RefKnut81", 4786810, 164842}, {"RefKoch96", 4786899, 164845}, {"RefKonh81", 4786988, 164848}, {"RefKraf49", 4787076, 164851}, {"RefLagO83", 4787165, 164854}, {"RefLai92", 4787252, 164857}, {"RefLeeB88", 4787340, 164860}, {"RefLehm76", 4787429, 164863}, {"RefLenstA96", 4787519, 164866}, {"RefLenLL82", 4787610, 164869}, {"RefLens83", 4787699, 164872}, {"RefLens86", 4787788, 164875}, {"RefLiu68", 4787876, 164878}, {"RefLune87", 4787963, 164881}, {"RefMacW77", 4788052, 164884}, {"RefMas69", 4788139, 164887}, {"RefMatY93", 4788226, 164890}, {"RefMaur92", 4788315, 164893}, {"RefMcEl78", 4788403, 164896}, {"RefMcEl81", 4788491, 164899}, {"RefMcMi56", 4788579, 164902}, {"RefMene98", 4788667, 164905}, {"RefMeOkV93", 4788756, 164908}, {"RefMeOV97", 4788846, 164911}, {"RefMerH78", 4788934, 164914}, {"RefMey82", 4789021, 164917}, {"RefMill76", 4789108, 164920}, {"RefMill86", 4789196, 164923}, {"RefMoni80", 4789285, 164926}, {"RefMorB75", 4789374, 164929}, {"RefNied86", 4789463, 164932}, {"RefNybR93", 4789551, 164935}, {"RefOdly85", 4789640, 164938}, {"RefPatt75", 4789729, 164941}, {"RefPera86", 4789817, 164944}, {"RefPohH78", 4789906, 164947}, {"RefPoll75", 4789995, 164950}, {"RefPoll78", 4790083, 164953}, {"RefRabi79", 4790171, 164956}, {"RefRabi80a", 4790261, 164959}, {"RefRabi80b", 4790351, 164962}, {"RefRisL79", 4790440, 164965}, {"RefRivSA78", 4790529, 164968}, {"RefRose84", 4790619, 164971}, {"RefRuep86", 4790707, 164974}, {"RefSatA98", 4790795, 164977}, {"RefSchne96", 4790885, 164980}, {"RefSchno90", 4790975, 164983}, {"RefSchno91", 4791066, 164986}, {"RefScho95", 4791156, 164989}, {"RefSham79", 4791245, 164992}, {"RefSham82", 4791333, 164995}, {"RefShan49", 4791422, 164998}, {"RefShap83", 4791510, 165001}, {"RefSilv86", 4791598, 165004}, {"RefSilv98", 4791686, 165007}, {"RefSilT92", 4791775, 165010}, {"RefSimm92", 4791863, 165013}, {"RefSmar98", 4791952, 165016}, {"RefSolS77", 4792040, 165019}, {"RefStin95", 4792128, 165022}, {"RefSugK76", 4792216, 165025}, {"RefvTbu88", 4792304, 165028}, {"RefVaud98", 4792393, 165031}, {"RefVerT97", 4792482, 165034}, {"RefWell99", 4792571, 165037}, {"RefWien90", 4792659, 165040}, {"RefZivL77", 4792747, 165043}, {"RefZivL78", 4792835, 165046}, {"Chap Notations", 4792928, 165049}, {"Chap Index", 4793024, 165052} } *) (*NotebookFileOutline Notebook[{ Cell[568, 21, 148, 5, 103, "Title"], Cell[719, 28, 126, 5, 88, "Subtitle"], Cell[CellGroupData[{ Cell[870, 37, 44, 1, 50, "Chapter"], Cell[917, 40, 224, 10, 34, "Text"], Cell[1144, 52, 259, 10, 24, "Text"], Cell[1406, 64, 343, 14, 24, "Text"], Cell[1752, 80, 373, 14, 24, "Text"], Cell[2128, 96, 378, 14, 24, "Text"], Cell[2509, 112, 332, 14, 36, "Text"], Cell[2844, 128, 270, 10, 24, "Text"], Cell[3117, 140, 363, 14, 24, "Text"], Cell[3483, 156, 393, 18, 24, "Text"], Cell[3879, 176, 415, 18, 24, "Text"], Cell[4297, 196, 268, 9, 19, "Text"], Cell[4568, 207, 272, 9, 19, "Text"], Cell[4843, 218, 413, 17, 24, "Text"], Cell[5259, 237, 377, 14, 24, "Text"], Cell[5639, 253, 436, 17, 24, "Text"], Cell[6078, 272, 395, 17, 24, "Text"], Cell[6476, 291, 367, 14, 24, "Text"], Cell[6846, 307, 400, 18, 24, "Text"], Cell[7249, 327, 402, 17, 24, "Text"], Cell[7654, 346, 420, 17, 24, "Text"], Cell[8077, 365, 386, 17, 24, "Text"], Cell[8466, 384, 381, 17, 24, "Text"], Cell[8850, 403, 310, 13, 36, "Text"], Cell[9163, 418, 271, 10, 24, "Text"], Cell[9437, 430, 353, 14, 24, "Text"], Cell[9793, 446, 425, 17, 24, "Text"], Cell[10221, 465, 408, 17, 24, "Text"], Cell[10632, 484, 371, 17, 24, "Text"], Cell[11006, 503, 442, 17, 24, "Text"], Cell[11451, 522, 818, 29, 24, "Text"], Cell[12272, 553, 431, 17, 24, "Text"], Cell[12706, 572, 431, 17, 24, "Text"], Cell[13140, 591, 412, 17, 24, "Text"], Cell[13555, 610, 496, 20, 24, "Text"], Cell[14054, 632, 445, 17, 24, "Text"], Cell[14502, 651, 388, 16, 36, "Text"], Cell[14893, 669, 260, 10, 24, "Text"], Cell[15156, 681, 353, 14, 24, "Text"], Cell[15512, 697, 394, 17, 24, "Text"], Cell[15909, 716, 242, 9, 19, "Text"], Cell[16154, 727, 263, 9, 19, "Text"], Cell[16420, 738, 256, 9, 19, "Text"], Cell[16679, 749, 499, 20, 24, "Text"], Cell[17181, 771, 312, 14, 24, "Text"], Cell[17496, 787, 223, 9, 19, "Text"], Cell[17722, 798, 237, 9, 19, "Text"], Cell[17962, 809, 316, 14, 24, "Text"], Cell[18281, 825, 336, 14, 24, "Text"], Cell[18620, 841, 310, 13, 36, "Text"], Cell[18933, 856, 265, 10, 24, "Text"], Cell[19201, 868, 362, 14, 24, "Text"], Cell[19566, 884, 371, 14, 24, "Text"], Cell[19940, 900, 310, 13, 36, "Text"], Cell[20253, 915, 272, 10, 24, "Text"], Cell[20528, 927, 369, 14, 24, "Text"], Cell[20900, 943, 331, 14, 24, "Text"], Cell[21234, 959, 381, 14, 24, "Text"], Cell[21618, 975, 240, 9, 19, "Text"], Cell[21861, 986, 234, 9, 19, "Text"], Cell[22098, 997, 234, 9, 19, "Text"], Cell[22335, 1008, 307, 13, 36, "Text"], Cell[22645, 1023, 272, 10, 24, "Text"], Cell[22920, 1035, 334, 14, 24, "Text"], Cell[23257, 1051, 408, 17, 24, "Text"], Cell[23668, 1070, 422, 17, 24, "Text"], Cell[24093, 1089, 400, 17, 24, "Text"], Cell[24496, 1108, 420, 17, 24, "Text"], Cell[24919, 1127, 307, 13, 36, "Text"], Cell[25229, 1142, 280, 10, 24, "Text"], Cell[25512, 1154, 371, 14, 24, "Text"], Cell[25886, 1170, 425, 17, 24, "Text"], Cell[26314, 1189, 453, 17, 24, "Text"], Cell[26770, 1208, 389, 14, 24, "Text"], Cell[27162, 1224, 413, 17, 24, "Text"], Cell[27578, 1243, 254, 9, 19, "Text"], Cell[27835, 1254, 260, 9, 19, "Text"], Cell[28098, 1265, 264, 9, 19, "Text"], Cell[28365, 1276, 453, 17, 24, "Text"], Cell[28821, 1295, 249, 9, 19, "Text"], Cell[29073, 1306, 253, 9, 19, "Text"], Cell[29329, 1317, 261, 9, 19, "Text"], Cell[29593, 1328, 379, 14, 24, "Text"], Cell[29975, 1344, 431, 17, 24, "Text"], Cell[30409, 1363, 448, 16, 21, "Text"], Cell[30860, 1381, 506, 17, 21, "Text"], Cell[31369, 1400, 268, 9, 19, "Text"], Cell[31640, 1411, 418, 17, 24, "Text"], Cell[32061, 1430, 558, 23, 24, "Text"], Cell[32622, 1455, 416, 17, 24, "Text"], Cell[33041, 1474, 252, 9, 19, "Text"], Cell[33296, 1485, 698, 23, 24, "Text"], Cell[33997, 1510, 361, 14, 21, "Text"], Cell[34361, 1526, 310, 13, 36, "Text"], Cell[34674, 1541, 260, 10, 24, "Text"], Cell[34937, 1553, 317, 14, 24, "Text"], Cell[35257, 1569, 391, 17, 24, "Text"], Cell[35651, 1588, 420, 17, 24, "Text"], Cell[36074, 1607, 534, 18, 22, "Text"], Cell[36611, 1627, 799, 26, 22, "Text"], Cell[37413, 1655, 818, 27, 22, "Text"], Cell[38234, 1684, 390, 17, 24, "Text"], Cell[38627, 1703, 393, 17, 24, "Text"], Cell[39023, 1722, 430, 17, 24, "Text"], Cell[39456, 1741, 368, 14, 24, "Text"], Cell[39827, 1757, 419, 17, 24, "Text"], Cell[40249, 1776, 452, 17, 24, "Text"], Cell[40704, 1795, 480, 17, 21, "Text"], Cell[41187, 1814, 459, 17, 24, "Text"], Cell[41649, 1833, 424, 15, 19, "Text"], Cell[42076, 1850, 263, 9, 19, "Text"], Cell[42342, 1861, 241, 9, 19, "Text"], Cell[42586, 1872, 355, 14, 24, "Text"], Cell[42944, 1888, 410, 17, 24, "Text"], Cell[43357, 1907, 268, 9, 19, "Text"], Cell[43628, 1918, 292, 10, 19, "Text"], Cell[43923, 1930, 435, 17, 24, "Text"], Cell[44361, 1949, 396, 17, 24, "Text"], Cell[44760, 1968, 238, 9, 19, "Text"], Cell[45001, 1979, 252, 9, 19, "Text"], Cell[45256, 1990, 396, 14, 24, "Text"], Cell[45655, 2006, 404, 17, 24, "Text"], Cell[46062, 2025, 408, 17, 24, "Text"], Cell[46473, 2044, 265, 9, 19, "Text"], Cell[46741, 2055, 248, 9, 19, "Text"], Cell[46992, 2066, 401, 17, 24, "Text"], Cell[47396, 2085, 326, 14, 24, "Text"], Cell[47725, 2101, 406, 17, 24, "Text"], Cell[48134, 2120, 393, 17, 24, "Text"], Cell[48530, 2139, 242, 9, 19, "Text"], Cell[48775, 2150, 278, 9, 19, "Text"], Cell[49056, 2161, 254, 9, 19, "Text"], Cell[49313, 2172, 427, 17, 24, "Text"], Cell[49743, 2191, 568, 21, 24, "Text"], Cell[50314, 2214, 304, 13, 36, "Text"], Cell[50621, 2229, 276, 10, 24, "Text"], Cell[50900, 2241, 368, 14, 24, "Text"], Cell[51271, 2257, 355, 14, 24, "Text"], Cell[51629, 2273, 265, 9, 19, "Text"], Cell[51897, 2284, 242, 9, 19, "Text"], Cell[52142, 2295, 362, 14, 24, "Text"], Cell[52507, 2311, 390, 14, 24, "Text"], Cell[52900, 2327, 464, 17, 24, "Text"], Cell[53367, 2346, 459, 17, 24, "Text"], Cell[53829, 2365, 428, 17, 24, "Text"], Cell[54260, 2384, 310, 13, 36, "Text"], Cell[54573, 2399, 272, 10, 24, "Text"], Cell[54848, 2411, 340, 14, 24, "Text"], Cell[55191, 2427, 346, 14, 24, "Text"], Cell[55540, 2443, 379, 17, 24, "Text"], Cell[55922, 2462, 254, 9, 19, "Text"], Cell[56179, 2473, 240, 9, 19, "Text"], Cell[56422, 2484, 240, 9, 19, "Text"], Cell[56665, 2495, 395, 17, 24, "Text"], Cell[57063, 2514, 258, 9, 19, "Text"], Cell[57324, 2525, 254, 9, 19, "Text"], Cell[57581, 2536, 249, 9, 19, "Text"], Cell[57833, 2547, 393, 17, 24, "Text"], Cell[58229, 2566, 650, 22, 22, "Text"], Cell[58882, 2590, 261, 9, 19, "Text"], Cell[59146, 2601, 245, 9, 19, "Text"], Cell[59394, 2612, 508, 16, 19, "Text"], Cell[59905, 2630, 269, 9, 19, "Text"], Cell[60177, 2641, 412, 17, 24, "Text"], Cell[60592, 2660, 382, 14, 24, "Text"], Cell[60977, 2676, 341, 14, 24, "Text"], Cell[61321, 2692, 307, 13, 36, "Text"], Cell[61631, 2707, 275, 10, 24, "Text"], Cell[61909, 2719, 349, 14, 24, "Text"], Cell[62261, 2735, 413, 17, 24, "Text"], Cell[62677, 2754, 408, 17, 24, "Text"], Cell[63088, 2773, 260, 9, 19, "Text"], Cell[63351, 2784, 236, 9, 19, "Text"], Cell[63590, 2795, 236, 9, 19, "Text"], Cell[63829, 2806, 250, 9, 19, "Text"], Cell[64082, 2817, 561, 22, 24, "Text"], Cell[64646, 2841, 389, 17, 24, "Text"], Cell[65038, 2860, 397, 17, 24, "Text"], Cell[65438, 2879, 424, 17, 24, "Text"], Cell[65865, 2898, 618, 25, 24, "Text"], Cell[66486, 2925, 663, 25, 24, "Text"], Cell[67152, 2952, 335, 14, 24, "Text"], Cell[67490, 2968, 257, 9, 19, "Text"], Cell[67750, 2979, 239, 9, 19, "Text"], Cell[67992, 2990, 239, 9, 19, "Text"], Cell[68234, 3001, 307, 13, 36, "Text"], Cell[68544, 3016, 283, 10, 24, "Text"], Cell[68830, 3028, 345, 14, 24, "Text"], Cell[69178, 3044, 333, 14, 24, "Text"], Cell[69514, 3060, 370, 14, 24, "Text"], Cell[69887, 3076, 391, 17, 24, "Text"], Cell[70281, 3095, 414, 17, 24, "Text"], Cell[70698, 3114, 251, 9, 19, "Text"], Cell[70952, 3125, 273, 9, 19, "Text"], Cell[71228, 3136, 269, 9, 19, "Text"], Cell[71500, 3147, 395, 17, 24, "Text"], Cell[71898, 3166, 400, 17, 24, "Text"], Cell[72301, 3185, 307, 13, 36, "Text"], Cell[72611, 3200, 289, 10, 24, "Text"], Cell[72903, 3212, 363, 14, 24, "Text"], Cell[73269, 3228, 351, 14, 24, "Text"], Cell[73623, 3244, 256, 12, 39, "Text"], Cell[73882, 3258, 267, 10, 24, "Text"], Cell[74152, 3270, 345, 14, 24, "Text"], Cell[74500, 3286, 335, 14, 24, "Text"], Cell[74838, 3302, 379, 14, 24, "Text"], Cell[75220, 3318, 328, 14, 24, "Text"], Cell[75551, 3334, 344, 14, 24, "Text"], Cell[75898, 3350, 307, 13, 36, "Text"], Cell[76208, 3365, 239, 9, 19, "Text"], Cell[76450, 3376, 300, 13, 24, "Text"], Cell[76753, 3391, 289, 12, 24, "Text"], Cell[77045, 3405, 332, 12, 24, "Text"], Cell[77380, 3419, 350, 15, 24, "Text"], Cell[77733, 3436, 340, 15, 24, "Text"], Cell[78076, 3453, 371, 15, 24, "Text"], Cell[78450, 3470, 368, 15, 24, "Text"], Cell[78821, 3487, 284, 13, 24, "Text"], Cell[79108, 3502, 314, 12, 24, "Text"], Cell[79425, 3516, 349, 13, 24, "Text"], Cell[79777, 3531, 363, 15, 24, "Text"], Cell[80143, 3548, 376, 15, 24, "Text"], Cell[80522, 3565, 266, 12, 36, "Text"], Cell[80791, 3579, 228, 9, 19, "Text"], Cell[81022, 3590, 229, 9, 19, "Text"], Cell[81254, 3601, 371, 15, 24, "Text"], Cell[81628, 3618, 241, 9, 19, "Text"], Cell[81872, 3629, 228, 9, 19, "Text"], Cell[82103, 3640, 226, 9, 19, "Text"], Cell[82332, 3651, 228, 9, 19, "Text"], Cell[82563, 3662, 228, 9, 19, "Text"], Cell[82794, 3673, 248, 9, 19, "Text"], Cell[83045, 3684, 243, 9, 19, "Text"], Cell[83291, 3695, 363, 15, 24, "Text"], Cell[83657, 3712, 258, 9, 19, "Text"], Cell[83918, 3723, 270, 9, 19, "Text"], Cell[84191, 3734, 259, 9, 19, "Text"], Cell[84453, 3745, 240, 9, 19, "Text"], Cell[84696, 3756, 276, 9, 19, "Text"], Cell[84975, 3767, 257, 9, 19, "Text"], Cell[85235, 3778, 393, 15, 24, "Text"], Cell[85631, 3795, 375, 15, 24, "Text"], Cell[86009, 3812, 401, 15, 24, "Text"], Cell[86413, 3829, 375, 15, 24, "Text"], Cell[86791, 3846, 366, 15, 24, "Text"], Cell[87160, 3863, 358, 15, 24, "Text"], Cell[87521, 3880, 210, 8, 31, "Text"], Cell[87734, 3890, 247, 9, 19, "Text"], Cell[87984, 3901, 237, 8, 19, "Text"], Cell[88224, 3911, 225, 8, 19, "Text"], Cell[88452, 3921, 229, 8, 19, "Text"], Cell[88684, 3931, 227, 8, 19, "Text"], Cell[88914, 3941, 251, 8, 19, "Text"], Cell[89168, 3951, 245, 8, 19, "Text"], Cell[89416, 3961, 239, 8, 19, "Text"], Cell[89658, 3971, 267, 8, 19, "Text"], Cell[89928, 3981, 239, 7, 31, "Text"], Cell[90170, 3990, 164, 7, 34, "Text"], Cell[90337, 3999, 157, 7, 34, "Text"], Cell[90497, 4008, 167, 7, 34, "Text"], Cell[90667, 4017, 147, 7, 34, "Text"], Cell[90817, 4026, 40, 1, 34, "Text", PageBreakAbove->True] }, Closed]], Cell[CellGroupData[{ Cell[90894, 4032, 207, 7, 36, "Chapter", CellGroupingRules->{"SectionGrouping", 20}, PageBreakAbove->True, PageBreakBelow->False, CellTags->"Chap Preface"], Cell[91104, 4041, 3146, 53, 592, "Text"], Cell[94253, 4096, 1110, 22, 156, "Text"], Cell[95366, 4120, 505, 14, 181, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[95908, 4139, 143, 7, 38, "Chapter", CounterAssignments->{{"Chapter", 0}}, CellTags->"Chap Intro"], Cell[CellGroupData[{ Cell[96076, 4150, 157, 9, 47, "Section", CellTags->"SectIntro Intro"], Cell[96236, 4161, 759, 17, 108, "Text", CellTags->"DefIntro Cryptology"], Cell[96998, 4180, 94, 2, 34, "Text"], Cell[97095, 4184, 348, 8, 59, "Text", CellTags->"DefIntro Privacy"], Cell[97446, 4194, 326, 7, 59, "Text", CellTags->"DefIntro Authen"], Cell[97775, 4203, 221, 6, 34, "Text", CellTags->"DefIntro Integrity"], Cell[97999, 4211, 440, 10, 83, "Text"], Cell[98442, 4223, 270, 5, 59, "Text", PageBreakBelow->True] }, Closed]], Cell[CellGroupData[{ Cell[98749, 4233, 179, 8, 33, "Section", CellTags->"SectIntro Shannon"], Cell[98931, 4243, 743, 25, 83, "Text"], Cell[99677, 4270, 211, 4, 59, "Text"], Cell[99891, 4276, 20924, 883, 298, "Text"], Cell[120818, 5161, 102, 2, 62, "NumberedFigure"], Cell[120923, 5165, 1280, 40, 89, "Text", CellTags->"DefIntro Alphabet"], Cell[122206, 5207, 1332, 52, 63, "Text", CellTags->"DefIntro bigram"], Cell[123541, 5261, 720, 24, 61, "Text", CellTags->"DefIntro Language"], Cell[124264, 5287, 887, 28, 83, "Text", CellTags->"DefIntro Crypto Transf"], Cell[125154, 5317, 1316, 46, 59, "Text", CellTags->"DefIntro plaintext"], Cell[126473, 5365, 984, 42, 113, "Definition", CellTags->"DefIntro Crypto Syst"], Cell[127460, 5409, 605, 24, 60, "Text", CellTags->"DefIntro encryption"], Cell[128068, 5435, 908, 33, 33, "DisplayFormula"], Cell[128979, 5470, 1208, 40, 109, "Text", CellTags->"DefIntro secure channel"], Cell[130190, 5512, 931, 34, 33, "DisplayFormula"], Cell[131124, 5548, 563, 12, 83, "Text"], Cell[131690, 5562, 182, 6, 34, "Text", CellTags->"DefIntro Cryptanalist"], Cell[131875, 5570, 890, 32, 59, "Text", CellTags->"DefIntro Cryptanalist passive"], Cell[132768, 5604, 386, 9, 59, "Text", CellTags->"DefIntro Cryptanalist active"], Cell[133157, 5615, 71, 0, 34, "Text"], Cell[133231, 5617, 260, 7, 34, "Text", CellTags->"DefIntro Cipher Only Att."], Cell[133494, 5626, 345, 8, 59, "Text", CellTags->"DefIntro Known Pl. Att."], Cell[133842, 5636, 529, 16, 59, "Text", CellTags->"DefIntro Chosen Pl. Att."], Cell[134374, 5654, 216, 7, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[134627, 5666, 175, 8, 33, "Section", CellTags->"SectIntro Statistical"], Cell[134805, 5676, 310, 8, 59, "Text"], Cell[135118, 5686, 657, 22, 62, "Text", CellTags->"DefIntro Plaint Source"], Cell[135778, 5710, 340, 12, 33, "DisplayFormula"], Cell[136121, 5724, 21, 0, 34, "Text"], Cell[136145, 5726, 237, 9, 33, "DisplayFormula"], Cell[136385, 5737, 660, 24, 64, "Text"], Cell[137048, 5763, 524, 17, 35, "DisplayFormula"], Cell[137575, 5782, 657, 18, 62, "Text"], Cell[138235, 5802, 645, 23, 35, "DisplayFormula"], Cell[138883, 5827, 633, 21, 40, "DisplayFormula"], Cell[139519, 5850, 985, 33, 40, "DisplayFormula"], Cell[140507, 5885, 173, 6, 34, "Text", CellTags->"PropIntro Kolmogorov"], Cell[140683, 5893, 954, 34, 111, "Example", CellTags->"ExamIntro 1-grams"], Cell[141640, 5929, 711, 25, 35, "DisplayFormula"], Cell[142354, 5956, 413, 14, 59, "Text"], Cell[142770, 5972, 525, 18, 37, "DisplayFormula"], Cell[143298, 5992, 668, 24, 63, "Text"], Cell[143969, 6018, 620, 13, 247, "NumberedTable", CellTags->"TableIntr Prob English"], Cell[144592, 6033, 992, 38, 111, "Example"], Cell[145587, 6073, 925, 36, 35, "DisplayFormula"], Cell[146515, 6111, 328, 12, 34, "Text"], Cell[146846, 6125, 192, 4, 59, "Text"], Cell[147041, 6131, 2193, 62, 273, "Input", CellTags->"TableIntro Equil Distr"], Cell[149237, 6195, 108, 2, 62, "NumberedTable"], Cell[149348, 6199, 10914, 198, 1440, "Input", PageBreakAbove->True], Cell[160265, 6399, 1006, 31, 28, "Input", CellOpen->False, PageBreakAbove->True], Cell[CellGroupData[{ Cell[161296, 6434, 26100, 751, 363, "Output"], Cell[187399, 7187, 24557, 703, 363, "Output"], Cell[211959, 7892, 369, 14, 63, "NumberedTable"] }, Open ]], Cell[212343, 7909, 1862, 64, 200, "Example", CellTags->"ExamIntro Markov"], Cell[214208, 7975, 927, 35, 35, "DisplayFormula"], Cell[215138, 8012, 831, 31, 60, "Text"], Cell[215972, 8045, 511, 18, 37, "DisplayFormula"], Cell[216486, 8065, 511, 18, 37, "DisplayFormula"], Cell[217000, 8085, 511, 18, 37, "DisplayFormula"], Cell[217514, 8105, 858, 28, 59, "Text"], Cell[218375, 8135, 977, 29, 191, "Input", CellTags->"FormIntro Markov Eval"], Cell[219355, 8166, 95, 2, 44, "Output"], Cell[219453, 8170, 211, 5, 34, "Text"], Cell[219667, 8177, 971, 29, 88, "Text", CellTags->"DefIntro stationary"] }, Closed]], Cell[CellGroupData[{ Cell[220675, 8211, 135, 8, 33, "Section", CellTags->"SectIntro Problems"], Cell[220813, 8221, 640, 22, 109, "Problem"], Cell[221456, 8245, 987, 38, 81, "Problem"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[222492, 8289, 115, 6, 38, "Chapter", CellTags->"Chap Class"], Cell[CellGroupData[{ Cell[222632, 8299, 170, 8, 47, "Section", CellTags->"SectClass Caesar"], Cell[222805, 8309, 601, 24, 59, "Text"], Cell[CellGroupData[{ Cell[223431, 8337, 181, 12, 47, "Subsection", CellTags->"SubsClass Caesar"], Cell[223615, 8351, 497, 17, 59, "Text"], Cell[224115, 8370, 1037, 41, 43, "Text"], Cell[225155, 8413, 661, 20, 59, "Text"], Cell[225819, 8435, 464, 13, 95, "Input", CellTags->"DefClass Caesar"], Cell[226286, 8450, 42, 0, 34, "Text"], Cell[226331, 8452, 280, 8, 120, "Input"], Cell[226614, 8462, 70, 0, 44, "Output"], Cell[226687, 8464, 442, 17, 34, "Text", CellTags->"DefClass Caesar Cipher"], Cell[227132, 8483, 332, 11, 32, "DisplayFormula"], Cell[227467, 8496, 19, 0, 34, "Text"], Cell[227489, 8498, 246, 8, 32, "DisplayFormula"], Cell[227738, 8508, 892, 34, 64, "Text"], Cell[228633, 8544, 450, 14, 59, "Text", CellTags->"DefClass exh key search"], Cell[229086, 8560, 6704, 218, 186, "NumberedTable", CellTags->"TableClass Anal Caesar"], Cell[235793, 8780, 360, 10, 34, "Text"], Cell[236156, 8792, 340, 10, 95, "Input"], Cell[236499, 8804, 777, 14, 121, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[237313, 8823, 191, 12, 33, "Subsection", CellTags->"SubsClass Simple sub"], Cell[CellGroupData[{ Cell[237529, 8839, 100, 1, 63, "Subsubsection", CellTags->"SubsubsClass weakness simple"], Cell[237632, 8842, 413, 13, 59, "Text", CellTags->"DefClass SimpleSubst"], Cell[238048, 8857, 657, 24, 110, "Example"], Cell[238708, 8883, 618, 13, 95, "Input"], Cell[239329, 8898, 44, 0, 44, "Output"], Cell[239376, 8900, 464, 13, 63, "Text"], Cell[239843, 8915, 235, 7, 33, "DisplayFormula"], Cell[240081, 8924, 21, 0, 34, "Text"], Cell[240105, 8926, 274, 9, 32, "DisplayFormula"], Cell[240382, 8937, 351, 14, 41, "Text"], Cell[240736, 8953, 827, 30, 38, "DisplayFormula"], Cell[241566, 8985, 1597, 39, 184, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[243200, 9029, 104, 1, 37, "Subsubsection", CellTags->"DefClass Prob Word"], Cell[243307, 9032, 368, 6, 83, "Text"], Cell[243678, 9040, 336, 8, 59, "Text"], Cell[244017, 9050, 2043, 45, 394, "NumberedTable", CellTags->"TableClass Anal Simple Subst"], Cell[246063, 9097, 395, 7, 83, "Text"], Cell[246461, 9106, 307, 6, 75, "DisplayFormula"], Cell[246771, 9114, 292, 5, 59, "Text"], Cell[247066, 9121, 171, 5, 75, "DisplayFormula"], Cell[247240, 9128, 153, 3, 34, "Text"], Cell[247396, 9133, 76, 2, 31, "DisplayFormula"], Cell[247475, 9137, 42, 0, 34, "Text"], Cell[247520, 9139, 93, 2, 31, "DisplayFormula"], Cell[247616, 9143, 294, 9, 60, "Text"], Cell[247913, 9154, 777, 12, 70, "DisplayFormula"], Cell[248693, 9168, 1342, 44, 135, "Example", CellTags->"ExamClass Most Prob"], Cell[250038, 9214, 1379, 41, 171, "Input", CellTags->"InputClass Find Match"], Cell[251420, 9257, 198, 6, 32, "Print"], Cell[251621, 9265, 156, 6, 34, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[251826, 9277, 200, 12, 33, "Subsection", CellTags->"SubsClass Vigenere"], Cell[252029, 9291, 906, 27, 108, "Text", CellTags->"DefClass Vigenere"], Cell[252938, 9320, 950, 37, 110, "Example", CellTags->"ExamClass Vigenere"], Cell[253891, 9359, 16, 0, 34, "Text"], Cell[253910, 9361, 1287, 33, 74, "Text"], Cell[255200, 9396, 16, 0, 34, "Text"], Cell[255219, 9398, 4096, 62, 474, "NumberedTable", CellTags->"TableClass Vigenere"], Cell[259318, 9462, 618, 14, 108, "Text"], Cell[259939, 9478, 566, 17, 95, "Input"], Cell[260508, 9497, 616, 18, 59, "Text"], Cell[261127, 9517, 1124, 31, 247, "Input"], Cell[262254, 9550, 70, 0, 44, "Output"], Cell[262327, 9552, 100, 2, 34, "Text"], Cell[262430, 9556, 698, 21, 44, "DisplayFormula"], Cell[263131, 9579, 19, 0, 34, "Text"], Cell[263153, 9581, 656, 21, 40, "DisplayFormula"], Cell[263812, 9604, 20, 0, 34, "Text"], Cell[263835, 9606, 421, 14, 36, "NumberedEquation", CellTags->"FormClass Vigen Encr"], Cell[264259, 9622, 1533, 43, 156, "Text", CellTags->"DefClass Poly Subst"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[265841, 9671, 176, 8, 33, "Section", CellTags->"SectClass Incid Coin"], Cell[CellGroupData[{ Cell[266042, 9683, 200, 11, 47, "Subsection", CellTags->"SubSClass incid of coinc"], Cell[266245, 9696, 1820, 63, 86, "Text"], Cell[268068, 9761, 754, 22, 84, "Text"], Cell[268825, 9785, 901, 36, 43, "Text"], Cell[269729, 9823, 1108, 39, 40, "DisplayFormula"], Cell[270840, 9864, 2287, 84, 95, "Text"], Cell[273130, 9950, 199, 6, 34, "Text"], Cell[273332, 9958, 366, 16, 86, "Example"], Cell[273701, 9976, 237, 5, 53, "DisplayFormula"], Cell[273941, 9983, 1479, 52, 67, "Text"], Cell[275423, 10037, 1302, 34, 247, "Input"], Cell[276728, 10073, 679, 12, 96, "Output"], Cell[277410, 10087, 645, 20, 83, "Text"], Cell[278058, 10109, 522, 17, 95, "Input"], Cell[278583, 10128, 1355, 35, 323, "Input"], Cell[279941, 10165, 345, 5, 121, "Output"], Cell[280289, 10172, 3193, 122, 247, "Theorem", CellTags->"LemClass Kasiski"], Cell[283485, 10296, 933, 38, 62, "Text"], Cell[284421, 10336, 1394, 47, 90, "DisplayFormula"], Cell[285818, 10385, 1568, 61, 66, "Text"], Cell[287389, 10448, 344, 13, 36, "DisplayFormula"], Cell[287736, 10463, 116, 3, 34, "Text"], Cell[287855, 10468, 794, 27, 67, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[288686, 10500, 180, 11, 33, "Subsection", CellTags->"SubSClass Kasiski"], Cell[288869, 10513, 676, 18, 83, "Text"], Cell[289548, 10533, 160, 7, 34, "Text"], Cell[289711, 10542, 419, 17, 86, "Example"], Cell[290133, 10561, 1227, 33, 74, "Text"], Cell[291363, 10596, 593, 15, 83, "Text"], Cell[291959, 10613, 199, 7, 34, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[292207, 10626, 202, 10, 33, "Section", PageBreakAbove->True, CellTags->"SectClass Vernam"], Cell[292412, 10638, 179, 5, 34, "Text"], Cell[CellGroupData[{ Cell[292616, 10647, 185, 12, 47, "Subsection", CellTags->"SubsClas One-time"], Cell[292804, 10661, 874, 21, 132, "Text", CellTags->"DefClass Vernam"] }, Closed]], Cell[CellGroupData[{ Cell[293715, 10687, 189, 12, 33, "Subsection", CellTags->"SubsClass Playfair"], Cell[293907, 10701, 1032, 30, 133, "Text", CellTags->"DefClass Playfair"], Cell[294942, 10733, 277, 9, 115, "Text"], Cell[295222, 10744, 494, 20, 38, "Text"], Cell[295719, 10766, 1265, 45, 80, "Text"], Cell[296987, 10813, 621, 23, 61, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[297645, 10841, 195, 12, 33, "Subsection", CellTags->"SubsClas Transposition"], Cell[297843, 10855, 572, 16, 59, "Text", CellTags->"DefClass Transp cipher"], Cell[298418, 10873, 520, 17, 40, "Text"], Cell[298941, 10892, 878, 22, 108, "Text", CellTags->"DefClass Column Transp"], Cell[299822, 10916, 227, 5, 35, "Text"], Cell[300052, 10923, 265, 9, 34, "Text"], Cell[300320, 10934, 746, 29, 136, "Text"], Cell[301069, 10965, 148, 5, 34, "Text"], Cell[301220, 10972, 236, 8, 36, "Text"], Cell[301459, 10982, 481, 11, 83, "Text", CellTags->"DefClass product cipher"], Cell[301943, 10995, 695, 21, 83, "Text", CellTags->"DefClass stream cipher"], Cell[302641, 11018, 296, 7, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[302974, 11030, 176, 12, 33, "Subsection", CellTags->"SubSClass Hagelin"], Cell[303153, 11044, 236624, 3882, 504, "Text"], Cell[539780, 14928, 113, 3, 66, "NumberedFigure"], Cell[539896, 14933, 641, 13, 108, "Text"], Cell[CellGroupData[{ Cell[540562, 14950, 48083, 1900, 262, "Text", PageBreakWithin->False], Cell[588648, 16852, 238, 7, 83, "NumberedFigure", PageBreakWithin->False] }, Open ]], Cell[588901, 16862, 597, 17, 83, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[589535, 16884, 197, 13, 33, "Subsection", PageBreakAbove->True, CellTags->"SubSClass Enigma"], Cell[589735, 16899, 281960, 4625, 463, "Text"], Cell[871698, 21526, 83, 2, 62, "NumberedFigure"], Cell[871784, 21530, 13536, 518, 345, "Text"], Cell[885323, 22050, 110, 2, 62, "NumberedFigure"], Cell[885436, 22054, 1090, 21, 181, "Text"], Cell[886529, 22077, 95, 2, 34, "Text"], Cell[886627, 22081, 203, 6, 74, "DisplayFormula"] }, Open ]], Cell[886845, 22090, 272, 10, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[887154, 22105, 135, 8, 33, "Section", CellTags->"SectClass Problems"], Cell[887292, 22115, 546, 19, 111, "Problem"], Cell[887841, 22136, 542, 19, 103, "Problem"], Cell[888386, 22157, 501, 19, 103, "Problem"], Cell[888890, 22178, 973, 35, 101, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[889912, 22219, 111, 5, 38, "Chapter", CellTags->"Chap Shift"], Cell[CellGroupData[{ Cell[890048, 22228, 152, 8, 47, "Section", CellTags->"SectShift pseudo seq"], Cell[890203, 22238, 959, 23, 132, "Text"], Cell[891165, 22263, 252, 7, 34, "Text"], Cell[CellGroupData[{ Cell[891442, 22274, 24766, 965, 343, "Text"], Cell[916211, 23241, 343, 12, 65, "NumberedFigure", CellTags->"FigShift pseudo random"] }, Open ]], Cell[916569, 23256, 1148, 32, 135, "Text", CellTags->"PostShift Eventually Periodic"], Cell[917720, 23290, 569, 19, 62, "Text", CellTags->"DefShift pseudo random"], Cell[918292, 23311, 1027, 45, 118, "Definition", CellTags->"DefShift Period"], Cell[919322, 23358, 588, 23, 62, "Text", CellTags->"DefShift run"], Cell[919913, 23383, 501, 18, 33, "DisplayFormula"], Cell[920417, 23403, 52, 0, 34, "Text"], Cell[920472, 23405, 1555, 50, 106, "DisplayFormula", CellTags->"DefShift Gap Block"], Cell[922030, 23457, 500, 20, 37, "Text", CellTags->"DefShift AC(k)"], Cell[922533, 23479, 285, 10, 56, "NumberedEquation", CellTags->"FormShift AC(k)"], Cell[922821, 23491, 931, 36, 62, "Text"], Cell[923755, 23529, 406, 14, 33, "DisplayFormula"], Cell[924164, 23545, 421, 15, 33, "DisplayFormula"], Cell[924588, 23562, 311, 13, 36, "Text"], Cell[924902, 23577, 1461, 53, 149, "Example"], Cell[926366, 23632, 829, 27, 120, "Input"], Cell[927198, 23661, 175, 4, 62, "Output"], Cell[927376, 23667, 1014, 43, 61, "Text", CellTags->"DefShift AC in/out"], Cell[928393, 23712, 1423, 53, 178, "Definition", CellTags->"PostShift Golomb"], Cell[929819, 23767, 368, 12, 59, "Text"], Cell[CellGroupData[{ Cell[930212, 23783, 359, 11, 120, "Input"], Cell[930574, 23796, 28, 0, 44, "Output"], Cell[930605, 23798, 28, 0, 44, "Output"] }, Open ]], Cell[930648, 23801, 1026, 34, 83, "Text"], Cell[931677, 23837, 950, 30, 146, "Input"], Cell[932630, 23869, 28, 0, 44, "Output"], Cell[932661, 23871, 715, 16, 109, "Text"], Cell[933379, 23889, 1115, 48, 116, "Theorem"], Cell[934497, 23939, 1220, 43, 89, "Text"], Cell[935720, 23984, 240, 5, 59, "Text"], Cell[935963, 23991, 1881, 68, 138, "Text"], Cell[937847, 24061, 1743, 67, 112, "Text"], Cell[939593, 24130, 116, 3, 34, "Text"], Cell[939712, 24135, 830, 27, 86, "Text"], Cell[940545, 24164, 386, 13, 37, "Text"], Cell[940934, 24179, 1200, 44, 117, "Text", CellTags->"PostShift Crypt"] }, Closed]], Cell[CellGroupData[{ Cell[942171, 24228, 161, 9, 33, "Section", CellTags->"SectShift Linear"], Cell[CellGroupData[{ Cell[942357, 24241, 196, 11, 47, "Subsection", CellTags->"SubsShift linear"], Cell[942556, 24254, 240, 7, 34, "Text"], Cell[942799, 24263, 18715, 734, 280, 16294, 691, "GraphicsData", \ "PostScript", "Graphics"], Cell[961517, 24999, 141, 3, 62, "NumberedFigure", CellTags->"FigShift FSR"], Cell[961661, 25004, 1252, 48, 86, "Text", CellTags->"DefShift State"], Cell[962916, 25054, 994, 36, 63, "Text"], Cell[963913, 25092, 1525, 59, 112, "Example"], Cell[CellGroupData[{ Cell[965463, 25155, 1086, 33, 146, "Input"], Cell[966552, 25190, 126, 3, 32, "Print"], Cell[966681, 25195, 126, 3, 32, "Print"], Cell[966810, 25200, 124, 3, 32, "Print"], Cell[966937, 25205, 124, 3, 32, "Print"], Cell[967064, 25210, 124, 3, 32, "Print"], Cell[967191, 25215, 124, 3, 32, "Print"] }, Open ]], Cell[967330, 25221, 167, 5, 36, "Text"], Cell[967500, 25228, 638, 23, 33, "DisplayFormula"], Cell[968141, 25253, 179, 6, 35, "Text"], Cell[968323, 25261, 266, 9, 34, "Text", CellTags->"DefShift LFSR"], Cell[968592, 25272, 25802, 1039, 267, "Text"], Cell[994397, 26313, 146, 3, 62, "NumberedFigure", CellTags->"FigShift LFSR"], Cell[994546, 26318, 545, 18, 37, "Text"], Cell[995094, 26338, 513, 20, 38, "NumberedEquation", CellTags->"FormShift Lin Rec"], Cell[995610, 26360, 32, 0, 34, "Text"], Cell[995645, 26362, 440, 17, 35, "NumberedEquation", CellTags->"FormShift Full Lin Rec"], Cell[996088, 26381, 1281, 47, 60, "Text"], Cell[997372, 26430, 978, 36, 38, "NumberedEquation", CellTags->"FormShift Rec States"], Cell[998353, 26468, 2145, 74, 165, "Text", CellTags->"DefShift feedb coeff"], Cell[1000501, 26544, 681, 29, 88, "Example"], Cell[1001185, 26575, 11631, 507, 280, 9762, 473, "GraphicsData", \ "PostScript", "Graphics"], Cell[1012819, 27084, 221, 9, 62, "NumberedFigure", CellTags->"FigShift LFSR n=4"], Cell[1013043, 27095, 128, 4, 34, "Text"], Cell[CellGroupData[{ Cell[1013196, 27103, 802, 25, 120, "Input"], Cell[1014001, 27130, 93, 2, 44, "Output"], Cell[1014097, 27134, 253, 6, 32, "Print"], Cell[1014353, 27142, 253, 6, 32, "Print"], Cell[1014609, 27150, 253, 6, 32, "Print"], Cell[1014865, 27158, 253, 6, 32, "Print"], Cell[1015121, 27166, 253, 6, 32, "Print"], Cell[1015377, 27174, 253, 6, 32, "Print"], Cell[1015633, 27182, 253, 6, 32, "Print"], Cell[1015889, 27190, 253, 6, 32, "Print"], Cell[1016145, 27198, 253, 6, 32, "Print"], Cell[1016401, 27206, 255, 6, 32, "Print"], Cell[1016659, 27214, 255, 6, 32, "Print"], Cell[1016917, 27222, 255, 6, 32, "Print"], Cell[1017175, 27230, 255, 6, 32, "Print"], Cell[1017433, 27238, 255, 6, 32, "Print"], Cell[1017691, 27246, 255, 6, 32, "Print"] }, Open ]], Cell[1017961, 27255, 552, 22, 37, "Text"], Cell[1018516, 27279, 452, 14, 34, "Text"], Cell[1018971, 27295, 850, 26, 95, "Input"], Cell[1019824, 27323, 224, 5, 44, "Output"], Cell[1020051, 27330, 639, 23, 62, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1020727, 27358, 171, 11, 33, "Subsection", CellTags->"SubsShift PN"], Cell[1020901, 27371, 606, 26, 90, "Definition", CellTags->"DefShift PN Seq"], Cell[1021510, 27399, 358, 11, 59, "Text"], Cell[1021871, 27412, 912, 36, 117, "Theorem", CellTags->"LemShift All States"], Cell[1022786, 27450, 586, 19, 60, "Text", CellTags->"DefShift Char Pol"], Cell[1023375, 27471, 647, 23, 37, "NumberedEquation"], Cell[1024025, 27496, 282, 13, 36, "Text"], Cell[1024310, 27511, 1397, 53, 142, "Definition", CellTags->"DefShift Omega"], Cell[1025710, 27566, 301, 11, 36, "Text"], Cell[1026014, 27579, 634, 26, 91, "Theorem", CellTags->"LemShift Omega=linear"], Cell[1026651, 27607, 1280, 45, 88, "Text"], Cell[1027934, 27654, 480, 17, 51, "DisplayFormula"], Cell[1028417, 27673, 418, 14, 36, "Text"], Cell[1028838, 27689, 116, 3, 34, "Text"], Cell[1028957, 27694, 782, 32, 38, "Text", CellTags->"FormShift Reciprocal"], Cell[1029742, 27728, 994, 39, 37, "NumberedEquation", CellTags->"FormShift Rec pol"], Cell[1030739, 27769, 395, 15, 37, "Text", CellTags->"DefShift power series"], Cell[1031137, 27786, 357, 13, 35, "NumberedEquation", CellTags->"FormShift Gen Function"], Cell[1031497, 27801, 1341, 50, 88, "Text"], Cell[1032841, 27853, 1292, 54, 114, "Theorem", CellTags->"TheoShift S(x)f\[RawStar](x)=pol"], Cell[1034136, 27909, 119, 5, 34, "Text"], Cell[1034258, 27916, 4338, 156, 222, "DisplayFormula"], Cell[1038599, 28074, 116, 3, 34, "Text"], Cell[1038718, 28079, 1513, 54, 122, "Text"], Cell[1040234, 28135, 1048, 42, 111, "Example"], Cell[1041285, 28179, 1267, 39, 165, "Input"], Cell[1042555, 28220, 84, 2, 46, "Output"], Cell[1042642, 28224, 808, 32, 60, "Text"], Cell[CellGroupData[{ Cell[1043475, 28260, 1903, 65, 314, "Input"], Cell[1045381, 28327, 1062, 30, 61, "Print"], Cell[1046446, 28359, 84, 2, 46, "Output"] }, Open ]], Cell[1046545, 28364, 65, 0, 34, "Text"], Cell[1046613, 28366, 689, 28, 105, "Theorem", CellTags->"CorShift S=u/f"], Cell[1047305, 28396, 547, 22, 36, "Text"], Cell[1047855, 28420, 1469, 55, 85, "Text"], Cell[1049327, 28477, 116, 3, 34, "Text"], Cell[1049446, 28482, 60, 0, 34, "Text"], Cell[1049509, 28484, 1687, 65, 161, "Theorem", CellTags->"LemShift s+t seq"], Cell[1051199, 28551, 2118, 87, 87, "Text"], Cell[1053320, 28640, 1582, 53, 46, "DisplayFormula"], Cell[1054905, 28695, 840, 33, 34, "Text"], Cell[1055748, 28730, 116, 3, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1055901, 28738, 218, 11, 33, "Subsection", CellTags->"SubsShift which char"], Cell[1056122, 28751, 2739, 104, 114, "Text", CellTags->"DefShift period pol"], Cell[1058864, 28857, 1376, 49, 137, "Example"], Cell[1060243, 28908, 666, 20, 97, "Input"], Cell[1060912, 28930, 29, 0, 44, "Output"], Cell[1060944, 28932, 972, 32, 110, "Text", CellTags->"FactShift period"], Cell[1061919, 28966, 986, 41, 93, "Theorem", CellTags->"LemShift Period div m"], Cell[1062908, 29009, 1002, 40, 60, "Text"], Cell[1063913, 29051, 1273, 47, 46, "DisplayFormula"], Cell[1065189, 29100, 833, 31, 36, "Text"], Cell[1066025, 29133, 116, 3, 34, "Text"], Cell[1066144, 29138, 995, 41, 93, "Theorem", CellTags->"LemShift Period=m"], Cell[1067142, 29181, 978, 41, 43, "Text"], Cell[1068123, 29224, 716, 26, 47, "DisplayFormula"], Cell[1068842, 29252, 461, 16, 60, "Text"], Cell[1069306, 29270, 439, 15, 33, "DisplayFormula"], Cell[1069748, 29287, 69, 1, 34, "Text"], Cell[1069820, 29290, 520, 19, 35, "DisplayFormula"], Cell[1070343, 29311, 965, 40, 61, "Text"], Cell[1071311, 29353, 116, 3, 34, "Text"], Cell[1071430, 29358, 1080, 40, 115, "Example"], Cell[CellGroupData[{ Cell[1072535, 29402, 825, 25, 120, "Input"], Cell[1073363, 29429, 93, 2, 44, "Output"], Cell[1073459, 29433, 253, 6, 32, "Print"], Cell[1073715, 29441, 253, 6, 32, "Print"], Cell[1073971, 29449, 253, 6, 32, "Print"], Cell[1074227, 29457, 253, 6, 32, "Print"], Cell[1074483, 29465, 253, 6, 32, "Print"] }, Open ]], Cell[1074751, 29474, 536, 19, 37, "Text"], Cell[1075290, 29495, 291, 10, 81, "Input"], Cell[1075584, 29507, 1011, 32, 78, "Output"], Cell[1076598, 29541, 1294, 35, 62, "Text"], Cell[1077895, 29578, 87, 2, 69, "Input"], Cell[1077985, 29582, 240, 7, 69, "Input"], Cell[1078228, 29591, 179, 4, 46, "Output"], Cell[1078410, 29597, 881, 38, 93, "Theorem", CellTags->"LemShift PN=> Irred"], Cell[1079294, 29637, 2782, 107, 115, "Text"], Cell[1082079, 29746, 116, 3, 34, "Text"], Cell[1082198, 29751, 1775, 67, 177, "Example", CellTags->"ExamShift f1 f2"], Cell[CellGroupData[{ Cell[1083998, 29822, 864, 26, 120, "Input"], Cell[1084865, 29850, 103, 2, 44, "Output"], Cell[1084971, 29854, 266, 6, 32, "Print"], Cell[1085240, 29862, 266, 6, 32, "Print"], Cell[1085509, 29870, 266, 6, 32, "Print"], Cell[1085778, 29878, 266, 6, 32, "Print"], Cell[1086047, 29886, 266, 6, 32, "Print"], Cell[1086316, 29894, 266, 6, 32, "Print"], Cell[1086585, 29902, 266, 6, 32, "Print"], Cell[1086854, 29910, 266, 6, 32, "Print"], Cell[1087123, 29918, 266, 6, 32, "Print"], Cell[1087392, 29926, 268, 6, 32, "Print"], Cell[1087663, 29934, 268, 6, 32, "Print"], Cell[1087934, 29942, 268, 6, 32, "Print"], Cell[1088205, 29950, 268, 6, 32, "Print"], Cell[1088476, 29958, 268, 6, 32, "Print"], Cell[1088747, 29966, 268, 6, 32, "Print"], Cell[1089018, 29974, 268, 6, 32, "Print"], Cell[1089289, 29982, 268, 6, 32, "Print"], Cell[1089560, 29990, 268, 6, 32, "Print"], Cell[1089831, 29998, 268, 6, 32, "Print"], Cell[1090102, 30006, 268, 6, 32, "Print"], Cell[1090373, 30014, 268, 6, 32, "Print"] }, Open ]], Cell[1090656, 30023, 750, 25, 85, "Text"], Cell[1091409, 30050, 1018, 35, 85, "Text"], Cell[1092430, 30087, 647, 25, 113, "Theorem", CellTags->"TheoShift PN iff Prim"], Cell[1093080, 30114, 1923, 69, 141, "Text"], Cell[1095006, 30185, 116, 3, 34, "Text"], Cell[1095125, 30190, 525, 18, 37, "Text"], Cell[1095653, 30210, 256, 8, 69, "Input"], Cell[1095912, 30220, 172, 4, 46, "Output"], Cell[1096087, 30226, 87, 2, 34, "Text"], Cell[1096177, 30230, 864, 26, 120, "Input"], Cell[1097044, 30258, 829, 29, 62, "Text"], Cell[1097876, 30289, 364, 12, 69, "Input"], Cell[1098243, 30303, 928, 29, 78, "Output"], Cell[1099174, 30334, 303, 11, 34, "Text"], Cell[1099480, 30347, 708, 28, 113, "Theorem"], Cell[1100191, 30377, 103, 2, 44, "Output"], Cell[1100297, 30381, 266, 6, 32, "Print"], Cell[1100566, 30389, 266, 6, 32, "Print"], Cell[1100835, 30397, 266, 6, 32, "Print"], Cell[1101104, 30405, 266, 6, 32, "Print"], Cell[1101373, 30413, 266, 6, 32, "Print"], Cell[1101642, 30421, 266, 6, 32, "Print"], Cell[1101911, 30429, 266, 6, 32, "Print"], Cell[1102180, 30437, 266, 6, 32, "Print"], Cell[1102449, 30445, 266, 6, 32, "Print"], Cell[1102718, 30453, 268, 6, 32, "Print"], Cell[1102989, 30461, 268, 6, 32, "Print"], Cell[1103260, 30469, 268, 6, 32, "Print"], Cell[1103531, 30477, 268, 6, 32, "Print"], Cell[1103802, 30485, 268, 6, 32, "Print"], Cell[1104073, 30493, 268, 6, 32, "Print"], Cell[1104344, 30501, 268, 6, 32, "Print"], Cell[1104615, 30509, 268, 6, 32, "Print"], Cell[1104886, 30517, 268, 6, 32, "Print"], Cell[1105157, 30525, 268, 6, 32, "Print"], Cell[1105428, 30533, 268, 6, 32, "Print"], Cell[1105699, 30541, 268, 6, 32, "Print"], Cell[1105970, 30549, 268, 6, 32, "Print"], Cell[1106241, 30557, 268, 6, 32, "Print"], Cell[1106512, 30565, 268, 6, 32, "Print"], Cell[1106783, 30573, 268, 6, 32, "Print"], Cell[1107054, 30581, 268, 6, 32, "Print"], Cell[1107325, 30589, 268, 6, 32, "Print"], Cell[1107596, 30597, 268, 6, 32, "Print"], Cell[1107867, 30605, 268, 6, 32, "Print"], Cell[1108138, 30613, 268, 6, 32, "Print"], Cell[1108409, 30621, 268, 6, 32, "Print"], Cell[1108680, 30629, 518, 17, 59, "Text"], Cell[1109201, 30648, 269, 9, 34, "Text"], Cell[CellGroupData[{ Cell[1109495, 30661, 206, 7, 69, "Input"], Cell[1109704, 30670, 99, 1, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[1109852, 30677, 363, 17, 33, "Subsection", CellTags->"SubsShift alternative"], Cell[1110218, 30696, 896, 31, 64, "Text"], Cell[1111117, 30729, 109, 3, 34, "Text"], Cell[1111229, 30734, 681, 27, 41, "Text"], Cell[1111913, 30763, 442, 16, 38, "DisplayFormula"], Cell[1112358, 30781, 665, 23, 66, "Text"], Cell[1113026, 30806, 153, 6, 33, "DisplayFormula"], Cell[1113182, 30814, 817, 30, 61, "Text"], Cell[1114002, 30846, 695, 24, 38, "DisplayFormula", CellTags->"FormShift GF(2^n)"], Cell[1114700, 30872, 1135, 39, 89, "Text"], Cell[1115838, 30913, 2421, 89, 190, "Example"], Cell[CellGroupData[{ Cell[1118284, 31006, 784, 27, 104, "Input"], Cell[1119071, 31035, 108, 3, 46, "Output"], Cell[1119182, 31040, 118, 3, 46, "Output"] }, Open ]], Cell[1119315, 31046, 1440, 54, 168, "Theorem"], Cell[1120758, 31102, 1805, 64, 129, "Text"], Cell[1122566, 31168, 1064, 36, 37, "DisplayFormula"], Cell[1123633, 31206, 3119, 114, 171, "Text"], Cell[1126755, 31322, 116, 3, 34, "Text"], Cell[1126874, 31327, 837, 31, 65, "Text"], Cell[1127714, 31360, 2717, 96, 242, "Example"], Cell[CellGroupData[{ Cell[1130456, 31460, 1232, 37, 198, "Input"], Cell[1131691, 31499, 407, 8, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[1132147, 31513, 207, 11, 33, "Subsection", CellTags->"SubsShift crypt prop"], Cell[1132357, 31526, 532, 17, 59, "Text"], Cell[1132892, 31545, 639, 21, 60, "Text"], Cell[1133534, 31568, 2158, 81, 183, "Text"], Cell[1135695, 31651, 2738, 100, 118, "Text"], Cell[1138436, 31753, 230, 7, 34, "Text"], Cell[1138669, 31762, 644, 24, 60, "Text"], Cell[1139316, 31788, 116, 4, 34, "Text"], Cell[1139435, 31794, 1036, 34, 63, "Text", CellTags->"PostShift Ad C3"], Cell[1140474, 31830, 1616, 59, 127, "NumberedEquation", CellTags->"FormShift break PN"], Cell[1142093, 31891, 1423, 45, 134, "Text"], Cell[1143519, 31938, 750, 28, 110, "Example"], Cell[1144272, 31968, 535, 21, 149, "Input"], Cell[1144810, 31991, 223, 7, 44, "Output"], Cell[1145036, 32000, 1015, 42, 61, "Text"], Cell[1146054, 32044, 1529, 48, 161, "Input"], Cell[1147586, 32094, 382, 7, 44, "Output"], Cell[1147971, 32103, 349, 10, 59, "Text"], Cell[1148323, 32115, 971, 29, 85, "Text"], Cell[CellGroupData[{ Cell[1149319, 32148, 530, 20, 138, "Input"], Cell[1149852, 32170, 117, 3, 44, "Output"], Cell[1149972, 32175, 189, 6, 44, "Output"] }, Open ]], Cell[1150176, 32184, 445, 17, 34, "Text"], Cell[1150624, 32203, 360, 6, 83, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1151033, 32215, 155, 9, 33, "Section", CellTags->"SectShift Non-linear"], Cell[CellGroupData[{ Cell[1151213, 32228, 197, 11, 47, "Subsection", CellTags->"SubsShift minimal"], Cell[1151413, 32241, 1655, 45, 162, "Text"], Cell[1153071, 32288, 858, 35, 117, "Definition", CellTags->"DefShift Lin Compl"], Cell[1153932, 32325, 141, 3, 34, "Text"], Cell[1154076, 32330, 858, 35, 114, "Theorem", CellTags->"LemShift O(f)"ExamShift f1 f2 bis"], Cell[1159780, 32556, 1297, 43, 136, "Input"], Cell[1161080, 32601, 150, 4, 44, "Output"], Cell[1161233, 32607, 1008, 35, 67, "Text"], Cell[1162244, 32644, 1501, 47, 161, "Input"], Cell[1163748, 32693, 402, 7, 44, "Output"], Cell[1164153, 32702, 1130, 38, 88, "Text", CellTags->"LemShift gcd(u f)=1"], Cell[1165286, 32742, 1464, 57, 139, "Theorem"], Cell[1166753, 32801, 1961, 72, 98, "Text"], Cell[1168717, 32875, 116, 3, 34, "Text"], Cell[1168836, 32880, 3343, 129, 320, "Theorem", CellTags->"TheoShift Min Char Pol"], Cell[1172182, 33011, 1000, 39, 89, "Example", CellTags->"ExamShift Lin Equiv"], Cell[1173185, 33052, 922, 34, 37, "DisplayFormula"], Cell[1174110, 33088, 1543, 54, 88, "Text"], Cell[1175656, 33144, 836, 26, 97, "Input"], Cell[1176495, 33172, 108, 3, 46, "Output"], Cell[1176606, 33177, 2129, 78, 140, "Text"], Cell[1178738, 33257, 810, 28, 48, "DisplayFormula"], Cell[1179551, 33287, 490, 19, 36, "Text"], Cell[1180044, 33308, 547, 19, 47, "DisplayFormula"], Cell[1180594, 33329, 76, 1, 34, "Text"], Cell[1180673, 33332, 622, 22, 35, "DisplayFormula"], Cell[1181298, 33356, 65, 1, 34, "Text"], Cell[1181366, 33359, 508, 18, 35, "DisplayFormula"], Cell[1181877, 33379, 66, 1, 34, "Text"], Cell[1181946, 33382, 510, 19, 48, "DisplayFormula"], Cell[1182459, 33403, 116, 3, 34, "Text"], Cell[1182578, 33408, 1364, 54, 145, "Theorem", CellTags->"CorShift Lin Compl"] }, Closed]], Cell[CellGroupData[{ Cell[1183979, 33467, 201, 12, 33, "Subsection", CellTags->"SubsShift Berlekamp"], Cell[1184183, 33481, 1165, 34, 137, "Text"], Cell[1185351, 33517, 1748, 65, 142, "Definition", CellTags->"DefShift Lk and fk"], Cell[1187102, 33584, 1038, 39, 62, "Text"], Cell[1188143, 33625, 991, 41, 164, "Theorem", CellTags->"LemShift zeros1"], Cell[1189137, 33668, 687, 25, 63, "Text"], Cell[1189827, 33695, 116, 3, 34, "Text"], Cell[1189946, 33700, 1463, 56, 139, "Theorem", CellTags->"LemShift sk+tk segment"], Cell[1191412, 33758, 2112, 78, 94, "Text"], Cell[1193527, 33838, 116, 3, 34, "Text"], Cell[1193646, 33843, 559, 22, 37, "Text"], Cell[1194208, 33867, 1116, 45, 139, "Theorem", CellTags->"LemShift Lk+1>="], Cell[1195327, 33914, 2944, 110, 195, "Text"], Cell[1198274, 34026, 1125, 40, 34, "DisplayFormula"], Cell[1199402, 34068, 116, 3, 34, "Text"], Cell[1199521, 34073, 649, 19, 86, "Text"], Cell[1200173, 34094, 1106, 45, 139, "Theorem", CellTags->"TheoShift Ber-Mas"], Cell[1201282, 34141, 998, 34, 88, "Text"], Cell[1202283, 34177, 1638, 63, 186, "Text"], Cell[1203924, 34242, 603, 23, 33, "DisplayFormula"], Cell[1204530, 34267, 99, 1, 34, "Text"], Cell[1204632, 34270, 920, 37, 65, "Text"], Cell[1205555, 34309, 704, 25, 45, "NumberedEquation", CellTags->"FormShift BM j<=k-1"], Cell[1206262, 34336, 653, 25, 38, "Text"], Cell[1206918, 34363, 89, 1, 34, "Text"], Cell[1207010, 34366, 646, 24, 45, "NumberedEquation", CellTags->"FormShift BM j=k"], Cell[1207659, 34392, 237, 9, 34, "Text"], Cell[1207899, 34403, 379, 16, 56, "DisplayFormula"], Cell[1208281, 34421, 461, 14, 83, "Text"], Cell[1208745, 34437, 1100, 42, 54, "NumberedEquation", CellTags->"FormShift BM j<=m"], Cell[1209848, 34481, 811, 30, 62, "Text"], Cell[1210662, 34513, 1210, 44, 84, "NumberedEquation", CellTags->"FormShift f(x) in BM"], Cell[1211875, 34559, 271, 10, 37, "Text"], Cell[1212149, 34571, 986, 37, 60, "Text"], Cell[1213138, 34610, 3308, 122, 220, "DisplayFormula"], Cell[1216449, 34734, 420, 14, 36, "Text"], Cell[1216872, 34750, 116, 3, 34, "Text"], Cell[1216991, 34755, 569, 21, 38, "Text"], Cell[1217563, 34778, 113, 3, 34, "Text"], Cell[1217679, 34783, 6377, 271, 939, "Theorem", CellTags->"AlgShift Ber-Mas"], Cell[1224059, 35056, 448, 21, 86, "Example"], Cell[1224510, 35079, 609, 16, 38, "DisplayFormula"], Cell[1225122, 35097, 1315, 42, 83, "Text"], Cell[CellGroupData[{ Cell[1226462, 35143, 3043, 83, 331, "Input"], Cell[1229508, 35228, 296, 6, 32, "Print"], Cell[1229807, 35236, 296, 6, 32, "Print"], Cell[1230106, 35244, 296, 6, 32, "Print"], Cell[1230405, 35252, 296, 6, 32, "Print"], Cell[1230704, 35260, 296, 6, 32, "Print"], Cell[1231003, 35268, 359, 8, 34, "Print"], Cell[1231365, 35278, 408, 9, 34, "Print"], Cell[1231776, 35289, 408, 9, 34, "Print"], Cell[1232187, 35300, 408, 9, 34, "Print"], Cell[1232598, 35311, 410, 9, 34, "Print"], Cell[1233011, 35322, 410, 9, 34, "Print"], Cell[1233424, 35333, 396, 9, 34, "Print"], Cell[1233823, 35344, 396, 9, 34, "Print"], Cell[1234222, 35355, 396, 9, 34, "Print"], Cell[1234621, 35366, 396, 9, 34, "Print"], Cell[1235020, 35377, 396, 9, 34, "Print"], Cell[1235419, 35388, 396, 9, 34, "Print"], Cell[1235818, 35399, 416, 9, 34, "Print"], Cell[1236237, 35410, 416, 9, 34, "Print"], Cell[1236656, 35421, 414, 9, 34, "Print"], Cell[1237073, 35432, 414, 9, 34, "Print"], Cell[1237490, 35443, 414, 9, 34, "Print"], Cell[1237907, 35454, 414, 9, 34, "Print"], Cell[1238324, 35465, 414, 9, 34, "Print"], Cell[1238741, 35476, 424, 10, 34, "Print"], Cell[1239168, 35488, 440, 10, 34, "Print"], Cell[1239611, 35500, 593, 14, 34, "Print"], Cell[1240207, 35516, 452, 11, 34, "Print"], Cell[1240662, 35529, 452, 11, 34, "Print"], Cell[1241117, 35542, 593, 14, 34, "Print"], Cell[1241713, 35558, 593, 14, 34, "Print"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[1242355, 35578, 215, 11, 33, "Subsection", CellTags->"SubsShift Observations"], Cell[1242573, 35591, 773, 15, 132, "Text", CellTags->"DefShift branch point"], Cell[1243349, 35608, 1644, 60, 119, "Theorem", CellTags->"TheoShift unique pred"], Cell[1244996, 35670, 226, 9, 60, "Text"], Cell[1245225, 35681, 942, 32, 35, "DisplayFormula"], Cell[1246170, 35715, 1370, 46, 63, "Text"], Cell[1247543, 35763, 1600, 56, 62, "Text"], Cell[1249146, 35821, 116, 3, 34, "Text"], Cell[1249265, 35826, 382, 12, 59, "Text"], Cell[1249650, 35840, 12131, 507, 254, 10363, 474, "GraphicsData", \ "PostScript", "Graphics", PageBreakBelow->False], Cell[1261784, 36349, 220, 8, 63, "NumberedFigure", PageBreakAbove->False], Cell[1262007, 36359, 28870, 1153, 278, 25205, 1089, "GraphicsData", \ "PostScript", "Graphics", PageBreakBelow->False], Cell[1290880, 37514, 131, 3, 62, "NumberedFigure", PageBreakAbove->False] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1291060, 37523, 164, 10, 33, "Section", PageBreakAbove->False, CellTags->"SectShift Problems"], Cell[1291227, 37535, 1558, 55, 155, "Problem"], Cell[1292788, 37592, 797, 34, 59, "Problem"], Cell[1293588, 37628, 2579, 106, 109, "Problem"], Cell[1296170, 37736, 1844, 69, 151, "Problem", CounterIncrements->"Non"], Cell[CellGroupData[{ Cell[1298039, 37809, 440, 19, 61, "Problem"], Cell[1298482, 37830, 629, 24, 56, "DisplayFormula"], Cell[1299114, 37856, 652, 25, 37, "Text"], Cell[1299769, 37883, 287, 11, 38, "DisplayFormula"] }, Open ]], Cell[1300071, 37897, 985, 37, 93, "Problem"], Cell[1301059, 37936, 1695, 67, 112, "Problem"], Cell[1302757, 38005, 2710, 101, 156, "Problem"], Cell[1305470, 38108, 301, 12, 80, "Problem"], Cell[1305774, 38122, 31558, 1273, 191, 28467, 1219, "GraphicsData", \ "PostScript", "Graphics"], Cell[1337335, 39397, 2031, 72, 116, "Problem", CounterIncrements->"None"], Cell[1339369, 39471, 525, 17, 33, "DisplayFormula"], Cell[1339897, 39490, 95, 1, 43, "Problem", CounterIncrements->"None"], Cell[1339995, 39493, 527, 18, 33, "NumberedEquation"], Cell[1340525, 39513, 1783, 63, 130, "Problem", CounterIncrements->"None"], Cell[1342311, 39578, 800, 34, 64, "Problem"], Cell[1343114, 39614, 1330, 50, 62, "DisplayFormula"], Cell[1344447, 39666, 291, 11, 45, "Problem", CounterIncrements->"Non"], Cell[1344741, 39679, 786, 28, 35, "DisplayFormula"], Cell[1345530, 39709, 837, 28, 74, "Problem", CounterIncrements->"Non"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1346416, 39743, 100, 5, 38, "Chapter", CellTags->"Chap Block"], Cell[CellGroupData[{ Cell[1346541, 39752, 152, 8, 47, "Section", CellTags->"SectBlock principles"], Cell[CellGroupData[{ Cell[1346718, 39764, 185, 11, 47, "Subsection", CellTags->"SubsBlock Modes"], Cell[CellGroupData[{ Cell[1346928, 39779, 74, 1, 63, "Subsubsection", CellTags->"SubsubsBlock codebook"], Cell[1347005, 39782, 665, 17, 83, "Text", CellTags->"DefBlock block"], Cell[1347673, 39801, 498, 11, 83, "Text"], Cell[1348174, 39814, 578, 22, 61, "Text"], Cell[1348755, 39838, 317, 13, 33, "DisplayFormula"], Cell[1349075, 39853, 458, 17, 37, "Text"], Cell[1349536, 39872, 603, 16, 83, "Text"], Cell[1350142, 39890, 547, 11, 108, "Text", CellTags->"DefBlock codebook"], Cell[1350692, 39903, 11657, 449, 271, 9356, 408, "GraphicsData", \ "PostScript", "Graphics"], Cell[1362352, 40354, 143, 6, 83, "NumberedFigure", CellTags->"FigBlock codebook"] }, Open ]], Cell[CellGroupData[{ Cell[1362532, 40365, 95, 1, 63, "Subsubsection", CellTags->"SubsubsBlock cipher block chaining"], Cell[1362630, 40368, 977, 28, 135, "Text", CellTags->"DefBlock CBC"], Cell[1363610, 40398, 197, 7, 34, "Text"], Cell[1363810, 40407, 15167, 617, 275, 12190, 564, "GraphicsData", \ "PostScript", "Graphics"], Cell[1378980, 41026, 169, 3, 62, "NumberedFigure"], Cell[1379152, 41031, 434, 10, 83, "Text"], Cell[1379589, 41043, 19346, 745, 278, 16504, 694, "GraphicsData", \ "PostScript", "Graphics"], Cell[1398938, 41790, 169, 3, 62, "NumberedFigure"], Cell[1399110, 41795, 1890, 63, 139, "Text", CellTags->"RemBlock Ci=Cj"], Cell[1401003, 41860, 145, 3, 34, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[1401185, 41868, 88, 1, 63, "Subsubsection", CellTags->"SubsubsBlock cipher feedback"], Cell[1401276, 41871, 281, 8, 59, "Text", CellTags->"DefBlock CFM"], Cell[1401560, 41881, 487, 14, 59, "Text"], Cell[1402050, 41897, 850, 26, 108, "Text"], Cell[1402903, 41925, 27377, 1053, 258, 23645, 988, "GraphicsData", \ "PostScript", "Graphics"], Cell[1430283, 42980, 129, 6, 83, "NumberedFigure", CellTags->"FigBlock CFM"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[1430461, 42992, 204, 12, 33, "Subsection", CellTags->"SubsBlock Ident Ver"], Cell[1430668, 43006, 465, 9, 83, "Text"], Cell[1431136, 43017, 91, 2, 34, "Text"], Cell[1431230, 43021, 253, 10, 59, "Text"], Cell[1431486, 43033, 337, 8, 59, "Text"], Cell[1431826, 43043, 262, 11, 33, "NumberedEquation"], Cell[1432091, 43056, 284, 5, 83, "Text"], Cell[1432378, 43063, 1269, 39, 138, "Text", CellTags->"DefBlock challenge"], Cell[1433650, 43104, 2531, 97, 361, "NumberedFigure", CellTags->"FigBlock identity ver"], Cell[1436184, 43203, 394, 9, 83, "Text"], Cell[1436581, 43214, 117, 3, 34, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1436747, 43223, 125, 8, 33, "Section", CellTags->"SectBlock DES"], Cell[CellGroupData[{ Cell[1436897, 43235, 57, 1, 63, "Subsubsection", CellTags->"SubsubsDES DES"], Cell[1436957, 43238, 482, 12, 83, "Text", CellTags->"DefBlock DES"], Cell[1437442, 43252, 398, 6, 83, "Text"], Cell[1437843, 43260, 778, 23, 108, "Text"], Cell[1438624, 43285, 13661, 521, 258, 11186, 477, "GraphicsData", \ "PostScript", "Graphics"], Cell[1452288, 43808, 125, 3, 62, "NumberedFigure", PageBreakAbove->False], Cell[1452416, 43813, 485, 17, 86, "Text"], Cell[1452904, 43832, 798, 32, 56, "NumberedEquation", CellTags->"FormBlock DES encr"], Cell[1453705, 43866, 1040, 35, 137, "Text"], Cell[1454748, 43903, 16725, 697, 270, 13638, 642, "GraphicsData", \ "PostScript", "Graphics"], Cell[1471476, 44602, 150, 4, 62, "NumberedFigure", PageBreakAbove->False, CellTags->"FigDES DES round"], Cell[1471629, 44608, 413, 12, 59, "Text"], Cell[1472045, 44622, 767, 30, 56, "DisplayFormula"], Cell[1472815, 44654, 120, 3, 34, "Text"], Cell[1472938, 44659, 184, 4, 59, "Text"], Cell[1473125, 44665, 293, 7, 60, "Text"], Cell[1473421, 44674, 255, 4, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1473713, 44683, 71, 1, 37, "Subsubsection", CellTags->"SubsubsDES Triple DES"], Cell[1473787, 44686, 512, 12, 83, "Text", CellTags->"DefBlock Triple DES"], Cell[1474302, 44700, 12078, 501, 179, 10326, 469, "GraphicsData", \ "PostScript", "Graphics"], Cell[1486383, 45203, 83, 2, 62, "NumberedFigure"], Cell[1486469, 45207, 538, 13, 83, "Text"], Cell[1487010, 45222, 244, 4, 59, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1487303, 45232, 127, 8, 33, "Section", CellTags->"SectBlock IDEA"], Cell[1487433, 45242, 378, 6, 83, "Text"], Cell[1487814, 45250, 1542, 51, 134, "Text", CellTags->"DefBlock IDEA"], Cell[1489359, 45303, 122, 3, 34, "Text"], Cell[1489484, 45308, 186, 5, 59, "Text"], Cell[1489673, 45315, 264, 9, 34, "Text"], Cell[1489940, 45326, 248, 8, 69, "Input"], Cell[1490191, 45336, 93, 2, 44, "Output"], Cell[1490287, 45340, 585, 19, 72, "Text"], Cell[1490875, 45361, 260, 7, 60, "Text"], Cell[1491138, 45370, 421, 13, 34, "Text"], Cell[CellGroupData[{ Cell[1491584, 45387, 566, 19, 146, "Input"], Cell[1492153, 45408, 29, 0, 44, "Output"], Cell[1492185, 45410, 29, 0, 44, "Output"], Cell[1492217, 45412, 28, 0, 44, "Output"], Cell[1492248, 45414, 93, 2, 44, "Output"] }, Open ]], Cell[1492356, 45419, 363, 13, 60, "Text", CellTags->"DefBlock mult oper"], Cell[1492722, 45434, 1325, 46, 134, "Text"], Cell[1494050, 45482, 615, 22, 62, "Text"], Cell[CellGroupData[{ Cell[1494690, 45508, 993, 33, 120, "Input"], Cell[1495686, 45543, 28, 0, 44, "Output"], Cell[1495717, 45545, 93, 2, 44, "Output"] }, Open ]], Cell[1495825, 45550, 335, 12, 59, "Text"], Cell[1496163, 45564, 50773, 2014, 310, 45678, 1927, "GraphicsData", \ "PostScript", "Graphics"], Cell[1546939, 47580, 220, 5, 83, "NumberedFigure", CellTags->"FigBlock Idea"], Cell[1547162, 47587, 114, 3, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1547313, 47595, 141, 8, 33, "Section", CellTags->"SectBlock Further"], Cell[1547457, 47605, 704, 23, 59, "Text", CellTags->"DefBlock RC5"], Cell[1548164, 47630, 424, 11, 59, "Text"], Cell[1548591, 47643, 987, 30, 108, "Text", CellTags->"DefBlock lin and diff crypt"], Cell[1549581, 47675, 646, 12, 108, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1550264, 47692, 135, 8, 33, "Section", CellTags->"SectBlock Problems"], Cell[1550402, 47702, 432, 18, 66, "Problem"], Cell[1550837, 47722, 851, 32, 103, "Problem"], Cell[1551691, 47756, 665, 23, 101, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1552405, 47785, 126, 6, 38, "Chapter", PageBreakAbove->True, CellTags->"Chap Shannon"], Cell[CellGroupData[{ Cell[1552556, 47795, 167, 8, 47, "Section", CellTags->"SectShann Entropy"], Cell[1552726, 47805, 483, 14, 60, "Text"], Cell[1553212, 47821, 278, 5, 59, "Text"], Cell[1553493, 47828, 464, 14, 60, "Text"], Cell[1553960, 47844, 389, 16, 33, "DisplayFormula"], Cell[1554352, 47862, 495, 20, 62, "Text"], Cell[1554850, 47884, 284, 9, 33, "NumberedEquation", CellTags->"FormShann information"], Cell[1555137, 47895, 652, 20, 84, "Text", CellTags->"DefShann information"], Cell[1555792, 47917, 809, 31, 60, "Text"], Cell[1556604, 47950, 928, 29, 84, "Text"], Cell[1557535, 47981, 980, 26, 132, "Text"], Cell[1558518, 48009, 335, 13, 37, "NumberedEquation", CellTags->"FormShann infor 1/2^k"], Cell[1558856, 48024, 2011, 81, 64, "Text", CellTags->"DefShann entropy"], Cell[1560870, 48107, 460, 17, 35, "NumberedEquation", CellTags->"FormShann entropy"], Cell[1561333, 48126, 611, 27, 36, "Text"], Cell[1561947, 48155, 640, 25, 33, "NumberedEquation", CellTags->"FormShann entropy n=2"], Cell[1562590, 48182, 1009, 35, 86, "Text"], Cell[1563602, 48219, 445, 16, 69, "Input"], Cell[CellGroupData[{ Cell[1564072, 48239, 174, 5, 69, "Input"], Cell[1564249, 48246, 6943, 120, 360, "Output"] }, Open ]], Cell[1571207, 48369, 222, 8, 36, "Text"], Cell[1571432, 48379, 476, 15, 107, "Input", CellTags->"InputShann MultiEntropy"], Cell[1571911, 48396, 306, 10, 69, "Input"], Cell[1572220, 48408, 28, 0, 44, "Output"], Cell[1572251, 48410, 251, 9, 34, "Text"], Cell[1572505, 48421, 398, 12, 74, "DisplayFormula", CellTags->"InterShann entropy"], Cell[1572906, 48435, 217, 6, 34, "Text"], Cell[1573126, 48443, 486, 16, 33, "DisplayFormula", CellTags->"PropShann P1"], Cell[1573615, 48461, 834, 27, 56, "DisplayFormula", CellTags->"PropShann P2"], Cell[1574452, 48490, 517, 17, 33, "DisplayFormula", CellTags->"PropShann P3"], Cell[1574972, 48509, 1293, 47, 53, "DisplayFormula", CellTags->"PropShann P5"], Cell[1576268, 48558, 287, 7, 59, "Text"], Cell[1576558, 48567, 123, 3, 34, "Text"], Cell[1576684, 48572, 186, 5, 34, "Text"], Cell[1576873, 48579, 1342, 48, 120, "Text"], Cell[1578218, 48629, 776, 29, 41, "DisplayFormula"], Cell[1578997, 48660, 743, 25, 62, "Text"], Cell[1579743, 48687, 1343, 52, 148, "Example", CellTags->"ExamShann unfair coin"], Cell[1581089, 48741, 888, 24, 108, "Text"], Cell[1581980, 48767, 441, 19, 180, "Text"], Cell[1582424, 48788, 83, 1, 34, "Text"], Cell[1582510, 48791, 400, 16, 42, "DisplayFormula"], Cell[1582913, 48809, 483, 15, 59, "Text"], Cell[1583399, 48826, 518, 12, 83, "Text"], Cell[1583920, 48840, 1412, 54, 144, "Example", CellTags->"ExamShann English"], Cell[1585335, 48896, 502, 14, 83, "Text"], Cell[1585840, 48912, 200, 5, 74, "DisplayFormula"], Cell[1586043, 48919, 233, 7, 34, "Text"], Cell[1586279, 48928, 1907, 73, 203, "Definition", CellTags->"DefShann redundancy"], Cell[1588189, 49003, 1229, 42, 87, "Text"], Cell[1589421, 49047, 203, 4, 59, "Text"], Cell[1589627, 49053, 1170, 25, 158, "Text"], Cell[1590800, 49080, 2436, 74, 187, "Text"], Cell[1593239, 49156, 395, 14, 33, "DisplayFormula"], Cell[1593637, 49172, 148, 6, 34, "Text"], Cell[1593788, 49180, 184, 7, 32, "DisplayFormula"], Cell[1593975, 49189, 408, 14, 59, "Text"], Cell[1594386, 49205, 1549, 57, 199, "Definition", CellTags->"DefShann unicity dist"], Cell[1595938, 49264, 353, 6, 83, "Text"], Cell[1596294, 49272, 499, 15, 83, "Text"], Cell[1596796, 49289, 649, 24, 42, "DisplayFormula"], Cell[1597448, 49315, 963, 31, 109, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1598448, 49351, 178, 8, 33, "Section", CellTags->"SectShann Mutual"], Cell[1598629, 49361, 318, 5, 83, "Text"], Cell[1598950, 49368, 721, 28, 62, "Text", CellTags->"DefShann joint dis"], Cell[1599674, 49398, 233, 8, 35, "DisplayFormula"], Cell[1599910, 49408, 603, 23, 37, "Text", CellTags->"DefShann cond prob"], Cell[1600516, 49433, 228, 8, 34, "DisplayFormula"], Cell[1600747, 49443, 41, 0, 34, "Text"], Cell[1600791, 49445, 510, 15, 35, "NumberedEquation", CellTags->"FormShann p(x|y)"], Cell[1601304, 49462, 366, 16, 36, "Text"], Cell[1601673, 49480, 746, 24, 35, "NumberedEquation", CellTags->"FormShann H(X|y)"], Cell[1602422, 49506, 945, 38, 61, "Text", CellTags->"DefShann cond entropy"], Cell[1603370, 49546, 3159, 100, 206, "NumberedEquation", CellTags->"FormShann H(X|Y)"], Cell[1606532, 49648, 346, 14, 34, "Text"], Cell[1606881, 49664, 754, 31, 112, "Theorem", CellTags->"TheoShann chain rule"], Cell[1607638, 49697, 312, 14, 59, "Text"], Cell[1607953, 49713, 2909, 93, 169, "DisplayFormula"], Cell[1610865, 49808, 112, 1, 34, "Text"], Cell[1610980, 49811, 116, 3, 34, "Text"], Cell[1611099, 49816, 464, 18, 59, "Text"], Cell[1611566, 49836, 979, 41, 176, "Theorem"], Cell[1612548, 49879, 567, 19, 38, "Text"], Cell[1613118, 49900, 3036, 98, 171, "DisplayFormula"], Cell[1616157, 50000, 136, 3, 34, "Text"], Cell[1616296, 50005, 116, 3, 34, "Text"], Cell[1616415, 50010, 1072, 36, 89, "Text"], Cell[1617490, 50048, 1912, 62, 108, "DisplayFormula"], Cell[1619405, 50112, 412, 14, 38, "Text"], Cell[1619820, 50128, 639, 26, 38, "Text", CellTags->"DefShann mutual inf"], Cell[1620462, 50156, 2668, 87, 163, "NumberedEquation", CellTags->"FormShann I(x;y)"], Cell[1623133, 50245, 948, 34, 90, "Theorem", CellTags->"TheoShann I(X;Y)"], Cell[1624084, 50281, 227, 9, 34, "Text"], Cell[1624314, 50292, 3056, 102, 185, "DisplayFormula"], Cell[1627373, 50396, 206, 7, 34, "Text"], Cell[1627582, 50405, 116, 3, 34, "Text"], Cell[1627701, 50410, 445, 18, 34, "Text"], Cell[1628149, 50430, 1452, 60, 111, "Example", CellTags->"DefShann BSC"], Cell[1629604, 50492, 1009, 33, 41, "DisplayFormula"], Cell[1630616, 50527, 1310, 45, 62, "Text"], Cell[1631929, 50574, 1125, 43, 91, "DisplayFormula"], Cell[1633057, 50619, 1042, 35, 111, "Text"], Cell[1634102, 50656, 472, 13, 60, "Text"], Cell[1634577, 50671, 337, 11, 33, "DisplayFormula"], Cell[1634917, 50684, 45, 0, 34, "Text"], Cell[1634965, 50686, 337, 11, 33, "DisplayFormula"], Cell[1635305, 50699, 649, 23, 63, "Text"], Cell[1635957, 50724, 361, 14, 36, "NumberedEquation", CellTags->"FormShann H(M|KC)"], Cell[1636321, 50740, 339, 13, 34, "Text"], Cell[1636663, 50755, 660, 26, 116, "Theorem"], Cell[1637326, 50783, 244, 4, 59, "Text"], Cell[1637573, 50789, 400, 13, 59, "Text"], Cell[1637976, 50804, 1563, 55, 84, "DisplayFormula"], Cell[1639542, 50861, 358, 7, 83, "Text"], Cell[1639903, 50870, 489, 14, 36, "DisplayFormula"], Cell[1640395, 50886, 180, 7, 34, "Text"], Cell[1640578, 50895, 812, 28, 36, "DisplayFormula"], Cell[1641393, 50925, 116, 3, 34, "Text"], Cell[1641512, 50930, 763, 32, 116, "Definition", CellTags->"DefShann uncond secure"], Cell[1642278, 50964, 543, 21, 137, "Theorem"], Cell[1642824, 50987, 179, 4, 59, "Text"], Cell[1643006, 50993, 601, 27, 90, "Example"], Cell[1643610, 51022, 544, 20, 46, "DisplayFormula"], Cell[1644157, 51044, 1314, 44, 111, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1645508, 51093, 163, 9, 33, "Section", PageBreakAbove->Automatic, CellTags->"SectShann Problems"], Cell[1645674, 51104, 743, 32, 70, "Problem"], Cell[1646420, 51138, 363, 17, 58, "Problem"], Cell[1646786, 51157, 59, 1, 35, "Problem", CounterIncrements->"Non"], Cell[1646848, 51160, 732, 26, 56, "DisplayFormula"], Cell[1647583, 51188, 89, 1, 43, "Problem", CounterIncrements->"Non"], Cell[1647675, 51191, 588, 19, 50, "DisplayFormula"], Cell[1648266, 51212, 279, 11, 43, "Problem", CounterIncrements->"Non"], Cell[1648548, 51225, 950, 35, 101, "Problem"], Cell[1649501, 51262, 1462, 55, 125, "Problem"], Cell[1650966, 51319, 1371, 52, 101, "Problem", PageBreakBelow->Automatic], Cell[1652340, 51373, 556, 20, 112, "Text"], Cell[1652899, 51395, 636, 21, 86, "Problem", PageBreakBelow->Automatic, CounterIncrements->"Non"], Cell[1653538, 51418, 445, 19, 58, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1654032, 51443, 113, 5, 38, "Chapter", CellTags->"Chap Huff"], Cell[1654148, 51450, 816, 24, 108, "Text", CellTags->"DefHuff data compress"], Cell[CellGroupData[{ Cell[1654989, 51478, 178, 8, 47, "Section", CellTags->"SectHuff basics"], Cell[1655170, 51488, 1973, 67, 137, "Text", CellTags->"DefHuff code"], Cell[1657146, 51557, 279, 11, 35, "NumberedEquation"], Cell[1657428, 51570, 655, 15, 108, "Text"], Cell[1658086, 51587, 610, 24, 112, "Definition", CellTags->"DefHuffman U.D."], Cell[1658699, 51613, 2178, 78, 251, "Example", CellTags->"ExamHuff unfair coin"], Cell[1660880, 51693, 902, 37, 113, "Theorem", CellTags->"TheoHuff McMillan"], Cell[1661785, 51732, 425, 13, 92, "NumberedEquation", CellTags->"FormHuff McMillan"], Cell[1662213, 51747, 1187, 39, 100, "Text"], Cell[1663403, 51788, 737, 26, 51, "DisplayFormula"], Cell[1664143, 51816, 1476, 53, 143, "Text"], Cell[1665622, 51871, 566, 20, 45, "DisplayFormula"], Cell[1666191, 51893, 396, 13, 34, "Text"], Cell[1666590, 51908, 116, 3, 34, "Text"], Cell[1666709, 51913, 314, 8, 59, "Text"], Cell[1667026, 51923, 498, 21, 90, "Definition", CellTags->"DefHuff prefix code"], Cell[1667527, 51946, 854, 19, 157, "Text"], Cell[1668384, 51967, 307, 14, 90, "Theorem", CellTags->"LemHuff prefix=>UD"], Cell[1668694, 51983, 760, 32, 91, "Theorem", CellTags->"TheoHuff Kraft"], Cell[1669457, 52017, 443, 13, 92, "NumberedEquation", CellTags->"FormHuff Kraft"], Cell[1669903, 52032, 1003, 34, 109, "Text"], Cell[1670909, 52068, 1474, 52, 82, "Text"], Cell[1672386, 52122, 755, 27, 52, "DisplayFormula"], Cell[1673144, 52151, 1164, 46, 62, "Text"], Cell[1674311, 52199, 954, 35, 62, "Text"], Cell[1675268, 52236, 2243, 79, 112, "DisplayFormula"], Cell[1677514, 52317, 84, 1, 34, "Text"], Cell[1677601, 52320, 907, 32, 47, "DisplayFormula"], Cell[1678511, 52354, 106, 1, 34, "Text"], Cell[1678620, 52357, 116, 3, 34, "Text"], Cell[1678739, 52362, 2048, 83, 173, "Example"], Cell[CellGroupData[{ Cell[1680812, 52449, 1321, 42, 139, "Input"], Cell[1682136, 52493, 49, 1, 32, "Print"], Cell[1682188, 52496, 72, 2, 32, "Print"], Cell[1682263, 52500, 82, 2, 32, "Print"], Cell[1682348, 52504, 92, 2, 32, "Print"], Cell[1682443, 52508, 92, 2, 32, "Print"] }, Open ]], Cell[1682550, 52513, 91, 1, 34, "Text"], Cell[1682644, 52516, 542, 13, 83, "Text"], Cell[1683189, 52531, 1623, 64, 184, "Theorem"], Cell[1684815, 52597, 487, 19, 34, "Text"], Cell[1685305, 52618, 2092, 75, 120, "DisplayFormula"], Cell[1687400, 52695, 116, 3, 34, "Text"], Cell[1687519, 52700, 995, 40, 157, "Theorem"], Cell[1688517, 52742, 794, 32, 38, "Text"], Cell[1689314, 52776, 489, 17, 37, "DisplayFormula"], Cell[1689806, 52795, 611, 22, 60, "Text"], Cell[1690420, 52819, 1218, 41, 35, "DisplayFormula"], Cell[1691641, 52862, 116, 3, 34, "Text"], Cell[1691760, 52867, 876, 33, 157, "Theorem"], Cell[1692639, 52902, 564, 19, 59, "Text"], Cell[1693206, 52923, 456, 17, 33, "DisplayFormula"], Cell[1693665, 52942, 31, 0, 34, "Text"], Cell[1693699, 52944, 446, 16, 46, "NumberedEquation"], Cell[1694148, 52962, 583, 20, 73, "Text"], Cell[1694734, 52984, 179, 6, 34, "Text"], Cell[1694916, 52992, 2435, 87, 303, "Theorem", CellTags->"TheoHuff P1-P5"], Cell[1697354, 53081, 1196, 51, 85, "Text"], Cell[1698553, 53134, 852, 31, 33, "DisplayFormula"], Cell[1699408, 53167, 593, 22, 60, "Text"], Cell[1700004, 53191, 582, 19, 59, "Text"], Cell[1700589, 53212, 837, 31, 72, "Text"], Cell[1701429, 53245, 669, 22, 62, "Text"], Cell[1702101, 53269, 2606, 95, 91, "Text"], Cell[1704710, 53366, 116, 3, 34, "Text"], Cell[1704829, 53371, 169, 3, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1705035, 53379, 138, 8, 33, "Section", CellTags->"SectHuff Huffman"], Cell[1705176, 53389, 859, 25, 109, "Text", CellTags->"AlgHuff Huffman"], Cell[1706038, 53416, 114, 3, 34, "Text"], Cell[1706155, 53421, 1462, 52, 112, "Text", CellTags->"DefHuff reduction"], Cell[1707620, 53475, 1576, 52, 112, "Text", CellTags->"DefHuff Splitting"], Cell[1709199, 53529, 1148, 43, 83, "DisplayFormula"], Cell[1710350, 53574, 693, 26, 62, "Text"], Cell[1711046, 53602, 610, 26, 86, "Example", CellTags->"ExamHuff coding"], Cell[1711659, 53630, 390, 12, 56, "DisplayFormula"], Cell[1712052, 53644, 513, 17, 63, "Text"], Cell[1712568, 53663, 433, 14, 57, "DisplayFormula"], Cell[1713004, 53679, 70, 1, 34, "Text"], Cell[1713077, 53682, 482, 16, 57, "DisplayFormula"], Cell[1713562, 53700, 42, 1, 34, "Text"], Cell[1713607, 53703, 525, 18, 57, "DisplayFormula"], Cell[1714135, 53723, 49, 1, 34, "Text"], Cell[1714187, 53726, 580, 20, 57, "DisplayFormula"], Cell[1714770, 53748, 609, 20, 85, "Text"], Cell[1715382, 53770, 1030, 35, 64, "DisplayFormula"], Cell[1716415, 53807, 41, 1, 34, "Text"], Cell[1716459, 53810, 1028, 35, 64, "DisplayFormula"], Cell[1717490, 53847, 41, 1, 34, "Text"], Cell[1717534, 53850, 1052, 36, 64, "DisplayFormula"], Cell[1718589, 53888, 41, 1, 34, "Text"], Cell[1718633, 53891, 1060, 36, 64, "DisplayFormula"], Cell[1719696, 53929, 83, 1, 34, "Text"], Cell[1719782, 53932, 1088, 36, 59, "DisplayFormula"], Cell[1720873, 53970, 1434, 55, 65, "Text"], Cell[1722310, 54027, 476, 15, 107, "Input", CellTags->"InputShann MultiEntropy"], Cell[CellGroupData[{ Cell[1722811, 54046, 910, 31, 255, "Input"], Cell[1723724, 54079, 46, 0, 44, "Output"], Cell[1723773, 54081, 31, 0, 44, "Output"], Cell[1723807, 54083, 31, 0, 44, "Output"] }, Open ]], Cell[1723853, 54086, 694, 20, 59, "Text"], Cell[1724550, 54108, 1037, 28, 171, "Input"], Cell[1725590, 54138, 45, 0, 44, "Output"], Cell[1725638, 54140, 238, 7, 34, "Text"], Cell[1725879, 54149, 525, 12, 95, "Input"], Cell[1726407, 54163, 62, 0, 44, "Output"], Cell[1726472, 54165, 465, 15, 59, "Text"], Cell[1726940, 54182, 154, 4, 69, "Input"], Cell[1727097, 54188, 47, 0, 44, "Output"], Cell[1727147, 54190, 337, 10, 59, "Text"], Cell[CellGroupData[{ Cell[1727509, 54204, 559, 13, 146, "Input"], Cell[1728071, 54219, 45, 0, 44, "Output"], Cell[1728119, 54221, 31, 0, 44, "Output"] }, Open ]], Cell[1728165, 54224, 594, 10, 132, "Text"], Cell[1728762, 54236, 27877, 1087, 306, 24150, 1022, "GraphicsData", \ "PostScript", "Graphics", PageBreakBelow->False], Cell[1756642, 55325, 189, 4, 62, "NumberedFigure", PageBreakAbove->False], Cell[1756834, 55331, 4692, 169, 237, "Theorem", CellTags->"LemHuff Huffman"], Cell[1761529, 55502, 1609, 64, 65, "Text"], Cell[1763141, 55568, 3033, 103, 87, "DisplayFormula"], Cell[1766177, 55673, 2199, 78, 119, "Text"], Cell[1768379, 55753, 116, 3, 34, "Text"], Cell[1768498, 55758, 1044, 37, 113, "Theorem"], Cell[1769545, 55797, 654, 24, 59, "Text"], Cell[1770202, 55823, 116, 3, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1770355, 55831, 182, 8, 33, "Section", CellTags->"SectHuff Lempel-Ziv"], Cell[1770540, 55841, 699, 22, 83, "Text", CellTags->"DefHuff univ data comp"], Cell[1771242, 55865, 1494, 40, 184, "Text", CellTags->"DefHuff sliding"], Cell[1772739, 55907, 161, 3, 34, "Text"], Cell[1772903, 55912, 2793, 83, 81, "Text"], Cell[1775699, 55997, 812, 22, 108, "Text"], Cell[1776514, 56021, 776, 16, 132, "Text"], Cell[1777293, 56039, 481, 8, 108, "Text"], Cell[CellGroupData[{ Cell[1777799, 56051, 74, 1, 63, "Subsubsection", CellTags->"SubsubsHuff Ziv init"], Cell[1777876, 56054, 1015, 36, 83, "Text", CellTags->"DefHuff dictionary"], Cell[1778894, 56092, 204, 7, 34, "Text"], Cell[1779101, 56101, 436, 17, 183, "Text"], Cell[1779540, 56120, 219, 4, 59, "Text"], Cell[1779762, 56126, 431, 15, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1780230, 56146, 68, 1, 37, "Subsubsection", CellTags->"SubsubsHuff Ziv enco"], Cell[1780301, 56149, 1717, 72, 261, "Theorem", CellTags->"AlgHuff encoding Lempel Ziv"], Cell[1782021, 56223, 1714, 50, 181, "Text"], Cell[1783738, 56275, 387, 6, 83, "Text"], Cell[1784128, 56283, 957, 39, 126, "Example", CellTags->"ExamHuff L-Z coding"], Cell[1785088, 56324, 449, 16, 95, "Input"], Cell[1785540, 56342, 293, 10, 44, "Output"], Cell[1785836, 56354, 955, 24, 133, "Text"], Cell[1786794, 56380, 314, 10, 69, "Input"], Cell[1787111, 56392, 50, 1, 34, "Text"], Cell[1787164, 56395, 486, 15, 120, "Input"], Cell[1787653, 56412, 72, 1, 44, "Output"], Cell[1787728, 56415, 695, 25, 34, "Text"], Cell[CellGroupData[{ Cell[1788448, 56444, 1719, 52, 171, "Input"], Cell[1790170, 56498, 572, 17, 32, "Print"], Cell[1790745, 56517, 649, 19, 32, "Print"], Cell[1791397, 56538, 748, 22, 32, "Print"], Cell[1792148, 56562, 832, 24, 32, "Print"], Cell[1792983, 56588, 832, 24, 32, "Print"], Cell[1793818, 56614, 916, 26, 58, "Print"], Cell[1794737, 56642, 916, 26, 58, "Print"], Cell[1795656, 56670, 1000, 28, 58, "Print"], Cell[1796659, 56700, 1000, 28, 58, "Print"], Cell[1797662, 56730, 1084, 30, 58, "Print"], Cell[1798749, 56762, 1084, 30, 58, "Print"], Cell[1799836, 56794, 1084, 30, 58, "Print"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[1800969, 56830, 122, 3, 40, "Subsubsection", CellTags->"SubsubsHuff Ziv deco"], Cell[1801094, 56835, 718, 21, 108, "Text"], Cell[1801815, 56858, 649, 16, 108, "Text"], Cell[1802467, 56876, 196, 6, 34, "Text"], Cell[1802666, 56884, 860, 31, 83, "Text"], Cell[1803529, 56917, 1476, 49, 156, "Text"], Cell[1805008, 56968, 2319, 76, 205, "Text"], Cell[1807330, 57046, 2437, 80, 205, "Text"], Cell[1809770, 57128, 3217, 105, 278, "Text"], Cell[1812990, 57235, 85, 1, 34, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1813124, 57242, 134, 8, 33, "Section", CellTags->"SectHuff Problems"], Cell[1813261, 57252, 411, 17, 66, "Problem"], Cell[1813675, 57271, 979, 33, 102, "Problem"], Cell[1814657, 57306, 1328, 51, 81, "Problem"], Cell[1815988, 57359, 547, 20, 80, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1816584, 57385, 111, 5, 38, "Chapter", CellTags->"Chap Public"], Cell[CellGroupData[{ Cell[1816720, 57394, 145, 8, 47, "Section", CellTags->"SectPubl model"], Cell[CellGroupData[{ Cell[1816890, 57406, 187, 11, 47, "Subsection", CellTags->"SubsPubl Motivation"], Cell[1817080, 57419, 137, 3, 34, "Text"], Cell[1817220, 57424, 1039, 34, 174, "Text"], Cell[1818262, 57460, 515, 11, 108, "Text"], Cell[1818780, 57473, 112, 3, 34, "Text"], Cell[1818895, 57478, 430, 15, 59, "Text", CellTags->"DefPubl Public Key"], Cell[1819328, 57495, 21091, 822, 163, 18218, 771, "GraphicsData", \ "PostScript", "Graphics"], Cell[1840422, 58319, 143, 3, 62, "NumberedFigure", CellTags->"FigPubl Public"], Cell[1840568, 58324, 988, 35, 110, "Text"], Cell[1841559, 58361, 358, 14, 32, "DisplayFormula", CellTags->"PropPubl PK1"], Cell[1841920, 58377, 464, 20, 32, "DisplayFormula", CellTags->"PropPubl PK2"], Cell[1842387, 58399, 607, 25, 34, "DisplayFormula", CellTags->"PropPubl PK3"], Cell[1842997, 58426, 464, 20, 32, "DisplayFormula", CellTags->"PropPubl PK4"], Cell[1843464, 58448, 607, 25, 34, "DisplayFormula", CellTags->"PropPubl PK5"], Cell[1844074, 58475, 158, 3, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1844269, 58483, 186, 11, 33, "Subsection", CellTags->"SubsPubl Confidentiality"], Cell[1844458, 58496, 65, 0, 34, "Text"], Cell[1844526, 58498, 540, 21, 59, "Text"], Cell[1845069, 58521, 171, 7, 31, "DisplayFormula"], Cell[1845243, 58530, 366, 15, 34, "Text"], Cell[1845612, 58547, 424, 16, 47, "DisplayFormula"], Cell[1846039, 58565, 525, 15, 60, "Text"], Cell[1846567, 58582, 74, 0, 34, "Text"], Cell[1846644, 58584, 946, 33, 152, "DisplayFormula"], Cell[1847593, 58619, 100, 1, 62, "NumberedTable", CellTags->"TablePubl Secrecy"], Cell[1847696, 58622, 565, 19, 61, "Text"], Cell[1848264, 58643, 469, 17, 60, "Text", CellTags->"DefPubl one-way"], Cell[1848736, 58662, 525, 19, 55, "DisplayFormula"], Cell[1849264, 58683, 248, 9, 36, "Text", CellTags->"DefPubl trapdoor"], Cell[1849515, 58694, 317, 11, 33, "DisplayFormula"], Cell[1849835, 58707, 258, 7, 60, "Text"], Cell[1850096, 58716, 917, 26, 111, "Text"], Cell[1851016, 58744, 658, 23, 61, "Text"], Cell[1851677, 58769, 851, 27, 85, "Text"], Cell[1852531, 58798, 494, 16, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1853062, 58819, 182, 11, 33, "Subsection", CellTags->"SubsPubl Signature"], Cell[1853247, 58832, 65, 0, 34, "Text"], Cell[1853315, 58834, 352, 14, 34, "Text"], Cell[1853670, 58850, 171, 7, 31, "DisplayFormula"], Cell[1853844, 58859, 349, 15, 34, "Text"], Cell[1854196, 58876, 424, 16, 47, "DisplayFormula"], Cell[1854623, 58894, 756, 32, 59, "Text"], Cell[1855382, 58928, 1236, 42, 108, "Text", CellTags->"DiscPubl Discussion Signature"], Cell[1856621, 58972, 98, 2, 34, "Text"], Cell[1856722, 58976, 835, 29, 152, "DisplayFormula"], Cell[1857560, 59007, 121, 4, 83, "NumberedTable", CellTags->"TablePubl Signature"], Cell[1857684, 59013, 244, 9, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1857965, 59027, 202, 11, 33, "Subsection", CellTags->"SubsPubl Secr+Sign"], Cell[1858170, 59040, 75, 0, 34, "Text"], Cell[1858248, 59042, 469, 15, 59, "Text"], Cell[1858720, 59059, 223, 9, 31, "DisplayFormula"], Cell[1858946, 59070, 363, 17, 34, "Text"], Cell[1859312, 59089, 867, 31, 47, "DisplayFormula"], Cell[1860182, 59122, 1006, 41, 59, "Text"], Cell[1861191, 59165, 57, 0, 34, "Text"], Cell[1861251, 59167, 1289, 49, 173, "DisplayFormula"], Cell[1862543, 59218, 92, 3, 83, "NumberedTable"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1862684, 59227, 134, 8, 33, "Section", CellTags->"SectPubl Problems"], Cell[1862821, 59237, 2376, 93, 174, "Problem"], Cell[1865200, 59332, 428, 10, 78, "Problem"], Cell[1865631, 59344, 663, 24, 57, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1866343, 59374, 120, 5, 38, "Chapter", CellTags->"Chap Discr"], Cell[CellGroupData[{ Cell[1866488, 59383, 162, 8, 47, "Section", CellTags->"SectDiscr Diffie Hellman"], Cell[CellGroupData[{ Cell[1866675, 59395, 198, 11, 47, "Subsection", CellTags->"SubSDiscr Log Problem"], Cell[1866876, 59408, 1333, 47, 112, "Text"], Cell[1868212, 59457, 169, 5, 33, "NumberedEquation", CellTags->"FormDiscr c=a^m"], Cell[1868384, 59464, 191, 9, 36, "Text"], Cell[1868578, 59475, 1649, 64, 148, "Example"], Cell[CellGroupData[{ Cell[1870252, 59543, 198, 6, 69, "Input"], Cell[1870453, 59551, 116, 3, 44, "Output"] }, Open ]], Cell[1870584, 59557, 1542, 52, 138, "Example", CellTags->"ExamDiscr 2 primitive"], Cell[1872129, 59611, 65, 1, 69, "Input"], Cell[1872197, 59614, 291, 8, 69, "Input"], Cell[1872491, 59624, 117, 2, 44, "Output"], Cell[1872611, 59628, 636, 17, 87, "Text"], Cell[1873250, 59647, 68, 1, 69, "Input"], Cell[1873321, 59650, 171, 6, 44, "Output"], Cell[1873495, 59658, 57, 1, 34, "Text"], Cell[CellGroupData[{ Cell[1873577, 59663, 376, 11, 104, "Input"], Cell[1873956, 59676, 74, 1, 44, "Output"], Cell[1874033, 59679, 74, 1, 44, "Output"] }, Open ]], Cell[1874122, 59683, 293, 11, 34, "Text"], Cell[1874418, 59696, 1428, 46, 95, "Text", CellTags->"FormDiscr 2 log q"], Cell[1875849, 59744, 626, 24, 86, "Example", CellTags->"ExamDiscr Exp 171"], Cell[1876478, 59770, 91, 2, 69, "Input"], Cell[1876572, 59774, 139, 4, 44, "Output"], Cell[1876714, 59780, 988, 29, 109, "Text"], Cell[1877705, 59811, 678, 23, 93, "Input"], Cell[1878386, 59836, 53, 1, 46, "Output"], Cell[1878442, 59839, 192, 4, 59, "Text"], Cell[1878637, 59845, 1385, 56, 136, "Definition", CellTags->"DefDiscr addition chain"], Cell[1880025, 59903, 1261, 44, 111, "Text"], Cell[1881289, 59949, 692, 25, 147, "Example"], Cell[1881984, 59976, 288, 9, 34, "Text"], Cell[1882275, 59987, 245, 7, 69, "Input"], Cell[1882523, 59996, 35, 0, 44, "Output"], Cell[1882561, 59998, 753, 29, 65, "Text", CellTags->"DefDiscr dis log prob"], Cell[1883317, 60029, 1146, 40, 115, "Text", CellTags->"FormDiscr Knuth q^1/2"], Cell[1884466, 60071, 333, 12, 169, "NumberedTable", CellTags->"TableDiscr discrep"] }, Closed]], Cell[CellGroupData[{ Cell[1884836, 60088, 211, 11, 33, "Subsection", CellTags->"SubsDiscr Dif-Hel Key Exch"], Cell[1885050, 60101, 539, 13, 83, "Text", CellTags->"DefDiscr key exch"], Cell[1885592, 60116, 107, 4, 34, "Text"], Cell[1885702, 60122, 1313, 52, 87, "Text"], Cell[1887018, 60176, 102, 4, 34, "Text"], Cell[1887123, 60182, 400, 12, 59, "Text"], Cell[1887526, 60196, 272, 11, 35, "DisplayFormula"], Cell[1887801, 60209, 399, 15, 38, "Text"], Cell[1888203, 60226, 582, 22, 35, "DisplayFormula"], Cell[1888788, 60250, 325, 14, 38, "Text"], Cell[1889116, 60266, 1176, 45, 92, "Text"], Cell[1890295, 60313, 521, 17, 60, "Text"], Cell[1890819, 60332, 492, 16, 83, "Text"], Cell[1891314, 60350, 1885, 68, 280, "NumberedTable", CellTags->"DefDiscr Diffie Hellman"], Cell[1893202, 60420, 1081, 42, 148, "Example", CellTags->"ExamDiscr Key Exch"], Cell[CellGroupData[{ Cell[1894308, 60466, 253, 7, 95, "Input"], Cell[1894564, 60475, 30, 0, 44, "Output"], Cell[1894597, 60477, 29, 0, 44, "Output"] }, Open ]], Cell[1894641, 60480, 333, 12, 34, "Text"], Cell[1894977, 60494, 98, 2, 69, "Input"], Cell[1895078, 60498, 30, 0, 44, "Output"], Cell[1895111, 60500, 282, 11, 34, "Text"], Cell[1895396, 60513, 100, 2, 69, "Input"], Cell[1895499, 60517, 30, 0, 44, "Output"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1895578, 60523, 174, 8, 33, "Section", CellTags->"SectDiscr Other Log Systems"], Cell[CellGroupData[{ Cell[1895777, 60535, 198, 11, 47, "Subsection", CellTags->"SubsDiscr ElGamal"], Cell[1895978, 60548, 455, 12, 83, "Text"], Cell[CellGroupData[{ Cell[1896458, 60564, 86, 1, 63, "Subsubsection", CellTags->"SubsubsDisc ElGamal setting it up"], Cell[1896547, 60567, 599, 20, 63, "Text"], Cell[1897149, 60589, 844, 31, 64, "Text"], Cell[1897996, 60622, 887, 36, 62, "Text"], Cell[1898886, 60660, 220, 4, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1899143, 60669, 92, 1, 37, "Subsubsection", CellTags->"SubsubsDiscr ElGamal secrecy"], Cell[1899238, 60672, 106, 1, 34, "Text"], Cell[1899347, 60675, 407, 14, 36, "Text"], Cell[1899757, 60691, 245, 10, 34, "Text"], Cell[1900005, 60703, 220, 11, 34, "Text"], Cell[1900228, 60716, 170, 8, 34, "Text"], Cell[1900401, 60726, 92, 1, 34, "Text"], Cell[1900496, 60729, 386, 14, 34, "Text"], Cell[1900885, 60745, 692, 25, 31, "DisplayFormula"], Cell[1901580, 60772, 700, 28, 84, "Text"], Cell[1902283, 60802, 614, 19, 84, "Text"], Cell[1902900, 60823, 634, 21, 120, "Input"], Cell[1903537, 60846, 29, 0, 44, "Output"], Cell[1903569, 60848, 30, 0, 44, "Output"], Cell[1903602, 60850, 29, 0, 44, "Output"], Cell[1903634, 60852, 1110, 42, 61, "Text"], Cell[CellGroupData[{ Cell[1904769, 60898, 332, 10, 95, "Input"], Cell[1905104, 60910, 30, 0, 44, "Output"] }, Open ]], Cell[1905149, 60913, 572, 21, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1905758, 60939, 96, 1, 37, "Subsubsection", CellTags->"SubsubsDiscr ElGamal signature"], Cell[1905857, 60942, 104, 1, 34, "Text"], Cell[1905964, 60945, 412, 14, 36, "Text"], Cell[1906379, 60961, 353, 14, 36, "Text"], Cell[1906735, 60977, 234, 11, 34, "Text"], Cell[1906972, 60990, 377, 15, 33, "NumberedEquation", CellTags->"FormDiscr ElGamal"], Cell[1907352, 61007, 276, 11, 34, "Text"], Cell[1907631, 61020, 388, 15, 34, "Text"], Cell[1908022, 61037, 111, 1, 34, "Text"], Cell[1908136, 61040, 291, 10, 59, "Text"], Cell[1908430, 61052, 353, 13, 34, "DisplayFormula"], Cell[1908786, 61067, 58, 0, 34, "Text"], Cell[1908847, 61069, 900, 35, 34, "DisplayFormula"], Cell[1909750, 61106, 707, 28, 84, "Text"], Cell[1910460, 61136, 550, 17, 84, "Text"], Cell[CellGroupData[{ Cell[1911035, 61157, 744, 24, 95, "Input"], Cell[1911782, 61183, 29, 0, 44, "Output"], Cell[1911814, 61185, 30, 0, 44, "Output"] }, Open ]], Cell[1911859, 61188, 703, 26, 61, "Text"], Cell[1912565, 61216, 505, 16, 95, "Input"], Cell[1913073, 61234, 31, 0, 44, "Output"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1913153, 61240, 196, 11, 33, "Subsection", CellTags->"SubsDiscr Variations on ElGamal"], Cell[1913352, 61253, 1040, 41, 60, "Text", CellTags->"DefDiscr sign eq."], Cell[1914395, 61296, 356, 12, 59, "Text"], Cell[CellGroupData[{ Cell[1914776, 61312, 81, 1, 63, "Subsubsection", CellTags->"SubsubsDisc DSS"], Cell[1914860, 61315, 281, 11, 34, "Text", CellTags->"DefDiscr DSS"], Cell[1915144, 61328, 333, 12, 33, "DisplayFormula"], Cell[1915480, 61342, 834, 23, 132, "Text", CellTags->"DefDiscr SHA"], Cell[1916317, 61367, 87, 2, 34, "Text"], Cell[1916407, 61371, 977, 35, 91, "Text"], Cell[1917387, 61408, 1032, 40, 63, "Text"], Cell[1918422, 61450, 556, 23, 36, "Text"], Cell[1918981, 61475, 644, 22, 60, "Text"], Cell[1919628, 61499, 586, 23, 55, "DisplayFormula"], Cell[1920217, 61524, 179, 6, 34, "Text"], Cell[1920399, 61532, 1059, 41, 102, "DisplayFormula"], Cell[1921461, 61575, 338, 11, 59, "Text"], Cell[1921802, 61588, 164, 5, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1922003, 61598, 85, 1, 37, "Subsubsection", CellTags->"SubsubsDisc Schnorr"], Cell[1922091, 61601, 371, 15, 34, "Text", CellTags->"DefDiscr Schnorr"], Cell[1922465, 61618, 296, 11, 33, "DisplayFormula"] }, Closed]], Cell[CellGroupData[{ Cell[1922798, 61634, 93, 1, 37, "Subsubsection", CellTags->"SubsubsDisc Nyberg"], Cell[1922894, 61637, 363, 14, 34, "Text", CellTags->"DefDiscr Nyberg-R"], Cell[1923260, 61653, 243, 10, 31, "DisplayFormula"], Cell[1923506, 61665, 159, 6, 34, "Text"], Cell[1923668, 61673, 296, 11, 33, "DisplayFormula"], Cell[1923967, 61686, 282, 11, 34, "Text"], Cell[1924252, 61699, 808, 27, 38, "DisplayFormula"], Cell[1925063, 61728, 318, 12, 34, "Text"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1925442, 61747, 166, 8, 33, "Section", CellTags->"SectDiscr How to take logs"], Cell[1925611, 61757, 632, 17, 84, "Text"], Cell[1926246, 61776, 315, 8, 60, "Text"], Cell[CellGroupData[{ Cell[1926586, 61788, 198, 11, 47, "Subsection", CellTags->"AlgDiscr Pohlig Hellman"], Cell[1926787, 61801, 489, 17, 62, "Text"], Cell[CellGroupData[{ Cell[1927301, 61822, 217, 8, 65, "Subsubsection", CellTags->"CaseDiscr q-1 is 2power"], Cell[1927521, 61832, 616, 23, 61, "Text"], Cell[CellGroupData[{ Cell[1928162, 61859, 156, 5, 69, "Input"], Cell[1928321, 61866, 31, 0, 44, "Output"] }, Open ]], Cell[1928367, 61869, 887, 32, 62, "Text"], Cell[1929257, 61903, 657, 24, 35, "DisplayFormula"], Cell[1929917, 61929, 1897, 73, 114, "Text"], Cell[1931817, 62004, 1844, 70, 107, "DisplayFormula"], Cell[1933664, 62076, 733, 29, 64, "Text"], Cell[1934400, 62107, 381, 15, 34, "Text"], Cell[1934784, 62124, 1418, 55, 107, "DisplayFormula"], Cell[1936205, 62181, 1093, 44, 66, "Text"], Cell[1937301, 62227, 184, 8, 34, "Text"], Cell[1937488, 62237, 556, 19, 35, "DisplayFormula"], Cell[1938047, 62258, 590, 22, 68, "Text"], Cell[1938640, 62282, 770, 24, 86, "Text"], Cell[1939413, 62308, 516, 21, 60, "Text", CellTags->"RemDiscr Pohlig"], Cell[1939932, 62331, 1510, 65, 125, "Example"], Cell[1941445, 62398, 95, 2, 69, "Input"], Cell[1941543, 62402, 29, 0, 44, "Output"], Cell[1941575, 62404, 834, 33, 38, "Text"], Cell[1942412, 62439, 95, 2, 69, "Input"], Cell[1942510, 62443, 29, 0, 44, "Output"], Cell[1942542, 62445, 934, 37, 40, "Text"], Cell[1943479, 62484, 96, 2, 69, "Input"], Cell[1943578, 62488, 28, 0, 44, "Output"], Cell[1943609, 62490, 646, 27, 38, "Text"], Cell[1944258, 62519, 96, 2, 69, "Input"], Cell[1944357, 62523, 29, 0, 44, "Output"], Cell[1944389, 62525, 479, 18, 38, "Text"], Cell[CellGroupData[{ Cell[1944893, 62547, 96, 2, 69, "Input"], Cell[1944992, 62551, 28, 0, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[1945069, 62557, 199, 7, 39, "Subsubsection", CellTags->"CaseDiscr small powers"], Cell[1945271, 62566, 869, 30, 66, "Text"], Cell[1946143, 62598, 145, 5, 34, "Text"], Cell[1946291, 62605, 494, 19, 33, "NumberedEquation", CellTags->"FormDiscr m^(i)"], Cell[1946788, 62626, 948, 34, 86, "Text"], Cell[1947739, 62662, 767, 27, 35, "DisplayFormula"], Cell[1948509, 62691, 1379, 54, 90, "Text"], Cell[1949891, 62747, 1133, 42, 65, "Text", CellTags->"DefDiscr Table PH"], Cell[1951027, 62791, 1057, 36, 41, "DisplayFormula"], Cell[1952087, 62829, 311, 13, 38, "Text"], Cell[1952401, 62844, 893, 35, 69, "Text"], Cell[1953297, 62881, 371, 11, 60, "Text"], Cell[1953671, 62894, 323, 10, 41, "Text"], Cell[1953997, 62906, 749, 25, 38, "DisplayFormula"], Cell[1954749, 62933, 186, 4, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1954972, 62942, 100, 1, 37, "Subsubsection", CellTags->"CaseDiscr Exam P-H"], Cell[1955075, 62945, 316, 15, 49, "Example"], Cell[1955394, 62962, 275, 11, 36, "Text"], Cell[1955672, 62975, 301, 12, 36, "Text"], Cell[1955976, 62989, 111, 4, 34, "Text"], Cell[1956090, 62995, 550, 18, 60, "Text"], Cell[CellGroupData[{ Cell[1956665, 63017, 323, 10, 95, "Input"], Cell[1956991, 63029, 230, 8, 44, "Output"], Cell[1957224, 63039, 31, 0, 44, "Output"] }, Open ]], Cell[1957270, 63042, 1490, 56, 90, "Text"], Cell[CellGroupData[{ Cell[1958785, 63102, 682, 24, 120, "Input"], Cell[1959470, 63128, 31, 0, 44, "Output"], Cell[1959504, 63130, 31, 0, 44, "Output"], Cell[1959538, 63132, 31, 0, 44, "Output"] }, Open ]], Cell[1959584, 63135, 568, 22, 36, "Text"], Cell[CellGroupData[{ Cell[1960177, 63161, 1279, 40, 146, "Input"], Cell[1961459, 63203, 76, 2, 44, "Output"], Cell[1961538, 63207, 89, 2, 44, "Output"], Cell[1961630, 63211, 117, 3, 44, "Output"] }, Open ]], Cell[1961762, 63217, 59, 1, 34, "Text"], Cell[1961824, 63220, 394, 13, 60, "DisplayFormula"], Cell[1962221, 63235, 407, 13, 60, "DisplayFormula"], Cell[1962631, 63250, 437, 14, 60, "DisplayFormula"], Cell[1963071, 63266, 182, 4, 59, "Text"], Cell[1963256, 63272, 479, 17, 71, "DisplayFormula"], Cell[1963738, 63291, 479, 17, 71, "DisplayFormula"], Cell[1964220, 63310, 479, 17, 71, "DisplayFormula"], Cell[1964702, 63329, 353, 11, 34, "Text"], Cell[CellGroupData[{ Cell[1965080, 63344, 690, 21, 120, "Input"], Cell[1965773, 63367, 31, 0, 44, "Output"], Cell[1965807, 63369, 31, 0, 44, "Output"], Cell[1965841, 63371, 31, 0, 44, "Output"] }, Open ]], Cell[1965887, 63374, 591, 24, 34, "Text"], Cell[1966481, 63400, 74, 1, 34, "Text"], Cell[1966558, 63403, 458, 18, 36, "Text"], Cell[1967019, 63423, 648, 23, 60, "Text"], Cell[1967670, 63448, 302, 14, 36, "Text"], Cell[1967975, 63464, 879, 33, 61, "DisplayFormula"], Cell[1968857, 63499, 272, 12, 36, "Text"], Cell[1969132, 63513, 302, 14, 36, "Text"], Cell[1969437, 63529, 1853, 71, 121, "DisplayFormula"], Cell[1971293, 63602, 353, 14, 36, "Text"], Cell[1971649, 63618, 302, 14, 36, "Text"], Cell[1971954, 63634, 877, 33, 61, "DisplayFormula"], Cell[1972834, 63669, 273, 12, 36, "Text"], Cell[1973110, 63683, 140, 6, 34, "Text"], Cell[1973253, 63691, 404, 13, 33, "DisplayFormula"], Cell[1973660, 63706, 207, 6, 69, "Input"], Cell[1973870, 63714, 31, 0, 44, "Output"], Cell[1973904, 63716, 65, 1, 34, "Text"], Cell[1973972, 63719, 100, 2, 69, "Input"], Cell[1974075, 63723, 31, 0, 44, "Output"], Cell[1974109, 63725, 851, 33, 60, "Text"], Cell[1974963, 63760, 214, 6, 69, "Input"], Cell[1975180, 63768, 31, 0, 44, "Output"], Cell[1975214, 63770, 1177, 41, 96, "Text"], Cell[1976394, 63813, 373, 11, 60, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[1976816, 63830, 197, 11, 33, "Subsection", CellTags->"SubSDiscr Baby Step"], Cell[1977016, 63843, 469, 12, 84, "Text"], Cell[1977488, 63857, 1676, 64, 147, "Example"], Cell[CellGroupData[{ Cell[1979189, 63925, 800, 25, 120, "Input"], Cell[1979992, 63952, 333, 8, 63, "Output"], Cell[1980328, 63962, 29, 0, 44, "Output"] }, Open ]], Cell[1980372, 63965, 302, 12, 36, "Text"], Cell[1980677, 63979, 2859, 106, 142, "Text"], Cell[1983539, 64087, 388, 11, 120, "Input"], Cell[1983930, 64100, 333, 8, 63, "Output"], Cell[1984266, 64110, 939, 30, 85, "Text"], Cell[CellGroupData[{ Cell[1985230, 64144, 639, 21, 154, "Input"], Cell[1985872, 64167, 28, 0, 44, "Output"], Cell[1985903, 64169, 29, 0, 44, "Output"] }, Open ]], Cell[1985947, 64172, 533, 22, 36, "Text"], Cell[1986483, 64196, 241, 8, 74, "Input"], Cell[1986727, 64206, 31, 0, 44, "Output"], Cell[1986761, 64208, 478, 18, 36, "Text"], Cell[1987242, 64228, 97, 2, 69, "Input"], Cell[1987342, 64232, 29, 0, 44, "Output"], Cell[1987374, 64234, 72, 0, 34, "Text"], Cell[1987449, 64236, 2625, 100, 274, "Theorem", CellTags->"AlgDiscr Baby Giant"], Cell[1990077, 64338, 1423, 48, 112, "Text"], Cell[1991503, 64388, 201, 9, 36, "Text"], Cell[1991707, 64399, 366, 13, 33, "DisplayFormula"], Cell[1992076, 64414, 73, 1, 34, "Text"], Cell[1992152, 64417, 334, 10, 41, "DisplayFormula"], Cell[1992489, 64429, 462, 18, 36, "Text"], Cell[1992954, 64449, 304, 11, 31, "DisplayFormula"], Cell[1993261, 64462, 1050, 37, 92, "Text"], Cell[1994314, 64501, 116, 3, 34, "Text"], Cell[1994433, 64506, 423, 15, 62, "Text"], Cell[1994859, 64523, 718, 22, 88, "Text"], Cell[1995580, 64547, 139, 3, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[1995756, 64555, 189, 11, 33, "Subsection", CellTags->"SubSDiscr Pollard"], Cell[1995948, 64568, 416, 12, 59, "Text"], Cell[1996367, 64582, 1532, 61, 87, "Text"], Cell[1997902, 64645, 2013, 68, 161, "Example", CellTags->"ExamDiscr Pollard"], Cell[CellGroupData[{ Cell[1999940, 64717, 445, 12, 171, "Input"], Cell[2000388, 64731, 31, 0, 44, "Output"], Cell[2000422, 64733, 174, 6, 44, "Output"], Cell[2000599, 64741, 31, 0, 44, "Output"], Cell[2000633, 64743, 30, 0, 44, "Output"], Cell[2000666, 64745, 31, 0, 44, "Output"] }, Open ]], Cell[2000712, 64748, 131, 4, 34, "Text"], Cell[2000846, 64754, 263, 10, 31, "DisplayFormula"], Cell[2001112, 64766, 644, 22, 60, "Text"], Cell[2001759, 64790, 103, 2, 69, "Input"], Cell[2001865, 64794, 28, 0, 44, "Output"], Cell[2001896, 64796, 639, 26, 36, "Text"], Cell[2002538, 64824, 354, 13, 32, "DisplayFormula"], Cell[2002895, 64839, 432, 18, 37, "Text"], Cell[2003330, 64859, 1541, 60, 81, "NumberedEquation"], Cell[2004874, 64921, 711, 27, 37, "Text"], Cell[2005588, 64950, 279, 10, 35, "DisplayFormula"], Cell[2005870, 64962, 225, 9, 36, "Text"], Cell[2006098, 64973, 1303, 52, 76, "DisplayFormula"], Cell[2007404, 65027, 1308, 52, 76, "DisplayFormula"], Cell[2008715, 65081, 39, 0, 34, "Text"], Cell[2008757, 65083, 3028, 111, 88, "DisplayFormula"], Cell[2011788, 65196, 2230, 87, 103, "Text"], Cell[2014021, 65285, 2269, 91, 115, "Text", CellTags->"DefDiscr Floyd"], Cell[2016293, 65378, 657, 26, 84, "Text"], Cell[2016953, 65406, 263, 10, 31, "DisplayFormula"], Cell[2017219, 65418, 530, 18, 37, "Text"], Cell[2017752, 65438, 768, 23, 103, "Input"], Cell[2018523, 65463, 575, 21, 36, "Text"], Cell[2019101, 65486, 998, 30, 197, "Input"], Cell[2020102, 65518, 29, 0, 44, "Output"], Cell[2020134, 65520, 865, 33, 61, "Text"], Cell[2021002, 65555, 1408, 44, 153, "Input"], Cell[CellGroupData[{ Cell[2022435, 65603, 2217, 66, 298, "Input"], Cell[2024655, 65671, 142, 4, 32, "Print"], Cell[2024800, 65677, 379, 8, 32, "Print"], Cell[2025182, 65687, 443, 10, 32, "Print"] }, Open ]], Cell[2025640, 65700, 501, 21, 37, "Text"], Cell[CellGroupData[{ Cell[2026166, 65725, 492, 14, 95, "Input"], Cell[2026661, 65741, 30, 0, 44, "Output"], Cell[2026694, 65743, 30, 0, 44, "Output"] }, Open ]], Cell[2026739, 65746, 675, 26, 34, "Text"], Cell[2027417, 65774, 316, 10, 69, "Input"], Cell[2027736, 65786, 31, 0, 44, "Output"], Cell[2027770, 65788, 183, 7, 34, "Text"], Cell[2027956, 65797, 124, 3, 69, "Input"], Cell[2028083, 65802, 31, 0, 44, "Output"], Cell[2028117, 65804, 651, 20, 89, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2028805, 65829, 192, 11, 33, "Subsection", CellTags->"SubSDiscr Index Calc"], Cell[CellGroupData[{ Cell[2029022, 65844, 84, 1, 63, "Subsubsection", CellTags->"SubsubsDiscr Index general"], Cell[2029109, 65847, 731, 27, 65, "Text"], Cell[2029843, 65876, 425, 18, 36, "Text"], Cell[2030271, 65896, 100, 2, 34, "Text"], Cell[2030374, 65900, 1294, 49, 85, "Text", CellTags->"DefDiscr factor base"], Cell[2031671, 65951, 1221, 44, 67, "Text"], Cell[2032895, 65997, 744, 27, 36, "DisplayFormula"], Cell[2033642, 66026, 634, 22, 64, "Text"], Cell[2034279, 66050, 866, 33, 70, "Text"], Cell[2035148, 66085, 632, 24, 36, "DisplayFormula"], Cell[2035783, 66111, 395, 14, 64, "Text"], Cell[2036181, 66127, 209, 4, 59, "Text"], Cell[2036393, 66133, 515, 17, 60, "Text"], Cell[2036911, 66152, 104, 3, 34, "Text"], Cell[2037018, 66157, 291, 9, 59, "Text"], Cell[2037312, 66168, 160, 3, 59, "Text"], Cell[2037475, 66173, 84, 1, 34, "Text"], Cell[2037562, 66176, 436, 14, 63, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2038035, 66195, 309, 11, 42, "Subsubsection", CellTags->"SubsubsDiscr Index Mod p"], Cell[2038347, 66208, 324, 12, 36, "Text"], Cell[2038674, 66222, 900, 33, 85, "Text"], Cell[2039577, 66257, 366, 14, 36, "Text"], Cell[2039946, 66273, 84, 1, 34, "Text"], Cell[2040033, 66276, 211, 7, 34, "Text"], Cell[2040247, 66285, 192, 6, 43, "DisplayFormula"], Cell[2040442, 66293, 106, 5, 34, "Text"], Cell[2040551, 66300, 1788, 67, 146, "Example"], Cell[CellGroupData[{ Cell[2042364, 66371, 204, 6, 95, "Input"], Cell[2042571, 66379, 31, 0, 44, "Output"], Cell[2042605, 66381, 230, 8, 44, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[2042872, 66394, 486, 16, 120, "Input"], Cell[2043361, 66412, 30, 0, 44, "Output"], Cell[2043394, 66414, 30, 0, 44, "Output"], Cell[2043427, 66416, 29, 0, 44, "Output"] }, Open ]], Cell[2043471, 66419, 585, 22, 59, "Text"], Cell[2044059, 66443, 173, 5, 69, "Input"], Cell[2044235, 66450, 104, 2, 44, "Output"], Cell[2044342, 66454, 1099, 34, 86, "Text"], Cell[CellGroupData[{ Cell[2045466, 66492, 248, 7, 95, "Input"], Cell[2045717, 66501, 30, 0, 44, "Output"], Cell[2045750, 66503, 172, 6, 44, "Output"] }, Open ]], Cell[2045937, 66512, 738, 29, 60, "Text"], Cell[CellGroupData[{ Cell[2046700, 66545, 693, 18, 171, "Input"], Cell[2047396, 66565, 231, 8, 44, "Output"], Cell[2047630, 66575, 230, 8, 44, "Output"], Cell[2047863, 66585, 172, 6, 44, "Output"], Cell[2048038, 66593, 171, 6, 44, "Output"], Cell[2048212, 66601, 172, 6, 44, "Output"] }, Open ]], Cell[2048399, 66610, 1379, 56, 87, "Text"], Cell[2049781, 66668, 565, 21, 35, "DisplayFormula"], Cell[2050349, 66691, 185, 7, 36, "Text"], Cell[2050537, 66700, 293, 12, 33, "DisplayFormula"], Cell[2050833, 66714, 50, 1, 34, "Text"], Cell[2050886, 66717, 1462, 56, 124, "DisplayFormula"], Cell[2052351, 66775, 263, 7, 34, "Text"], Cell[2052617, 66784, 878, 28, 120, "Input"], Cell[2053498, 66814, 344, 9, 44, "Output"], Cell[2053845, 66825, 55, 1, 34, "Text"], Cell[2053903, 66828, 961, 41, 33, "DisplayFormula"], Cell[2054867, 66871, 54, 1, 34, "Text"], Cell[2054924, 66874, 859, 32, 33, "DisplayFormula"], Cell[2055786, 66908, 457, 15, 108, "Text"], Cell[CellGroupData[{ Cell[2056268, 66927, 538, 16, 158, "Input"], Cell[2056809, 66945, 231, 8, 44, "Output"], Cell[2057043, 66955, 173, 6, 44, "Output"], Cell[2057219, 66963, 172, 6, 44, "Output"], Cell[2057394, 66971, 171, 6, 44, "Output"] }, Open ]], Cell[2057580, 66980, 748, 29, 60, "Text"], Cell[2058331, 67011, 482, 17, 32, "DisplayFormula"], Cell[2058816, 67030, 292, 11, 34, "Text"], Cell[2059111, 67043, 233, 9, 31, "DisplayFormula"], Cell[2059347, 67054, 69, 1, 34, "Text"], Cell[2059419, 67057, 98, 2, 69, "Input"], Cell[2059520, 67061, 30, 0, 44, "Output"], Cell[2059553, 67063, 1589, 54, 86, "Text"], Cell[CellGroupData[{ Cell[2061167, 67121, 1683, 43, 230, "Input"], Cell[2062853, 67166, 1785, 25, 223, "Output"], Cell[2064641, 67193, 30, 0, 44, "Output"] }, Open ]], Cell[2064686, 67196, 666, 23, 60, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2065389, 67224, 170, 4, 37, "Subsubsection", CellTags->"SubsubsDiscr Index 2^n"], Cell[2065562, 67230, 4163, 155, 226, "Text"], Cell[2069728, 67387, 174, 6, 34, "Text"], Cell[2069905, 67395, 744, 29, 33, "DisplayFormula"], Cell[2070652, 67426, 719, 25, 60, "Text"], Cell[2071374, 67453, 484, 18, 36, "Text"], Cell[2071861, 67473, 409, 16, 34, "Text"], Cell[2072273, 67491, 84, 1, 34, "Text"], Cell[2072360, 67494, 208, 7, 34, "Text"], Cell[2072571, 67503, 324, 11, 46, "DisplayFormula"], Cell[2072898, 67516, 504, 21, 59, "Text"], Cell[2073405, 67539, 219, 8, 34, "Text"], Cell[2073627, 67549, 1261, 44, 138, "Example", CellTags->"ExamDiscr Index Calc2"], Cell[2074891, 67595, 65, 1, 69, "Input"], Cell[2074959, 67598, 227, 7, 95, "Input"], Cell[2075189, 67607, 177, 4, 46, "Output"], Cell[2075369, 67613, 614, 23, 40, "Text"], Cell[2075986, 67638, 453, 18, 40, "Text"], Cell[2076442, 67658, 895, 32, 89, "Text"], Cell[CellGroupData[{ Cell[2077362, 67694, 448, 15, 123, "Input"], Cell[2077813, 67711, 309, 10, 49, "Output"], Cell[2078125, 67723, 567, 18, 49, "Output"] }, Open ]], Cell[2078707, 67744, 139, 6, 34, "Text"], Cell[2078849, 67752, 1695, 67, 106, "DisplayFormula"], Cell[2080547, 67821, 1205, 39, 91, "Text"], Cell[CellGroupData[{ Cell[2081777, 67864, 424, 14, 100, "Input"], Cell[2082204, 67880, 254, 7, 46, "Output"], Cell[2082461, 67889, 397, 13, 49, "Output"] }, Open ]], Cell[2082873, 67905, 472, 18, 60, "Text"], Cell[CellGroupData[{ Cell[2083370, 67927, 2772, 95, 281, "Input"], Cell[2086145, 68024, 28, 0, 44, "Output"], Cell[2086176, 68026, 242, 8, 49, "Output"], Cell[2086421, 68036, 184, 6, 51, "Output"], Cell[2086608, 68044, 278, 9, 49, "Output"], Cell[2086889, 68055, 371, 12, 49, "Output"], Cell[2087263, 68069, 309, 10, 49, "Output"], Cell[2087575, 68081, 299, 10, 49, "Output"], Cell[2087877, 68093, 270, 9, 51, "Output"] }, Open ]], Cell[2088162, 68105, 542, 18, 64, "Text"], Cell[2088707, 68125, 1006, 35, 39, "DisplayFormula"], Cell[2089716, 68162, 119, 3, 34, "Text"], Cell[2089838, 68167, 319, 12, 32, "DisplayFormula"], Cell[2090160, 68181, 272, 8, 34, "Text"], Cell[2090435, 68191, 2241, 85, 191, "DisplayFormula"], Cell[2092679, 68278, 349, 11, 34, "Text"], Cell[2093031, 68291, 1132, 34, 146, "Input"], Cell[2094166, 68327, 477, 12, 44, "Output"], Cell[2094646, 68341, 928, 43, 36, "Text"], Cell[2095577, 68386, 192, 4, 59, "Text"], Cell[2095772, 68392, 495, 18, 64, "Text"], Cell[CellGroupData[{ Cell[2096292, 68414, 943, 31, 104, "Input"], Cell[2097238, 68447, 350, 11, 49, "Output"], Cell[2097591, 68460, 243, 8, 51, "Output"] }, Open ]], Cell[2097849, 68471, 1481, 53, 94, "Text"], Cell[2099333, 68526, 233, 9, 31, "DisplayFormula"], Cell[2099569, 68537, 84, 2, 34, "Text", PageBreakBelow->False], Cell[2099656, 68541, 284, 10, 74, "Input", PageBreakBelow->False], Cell[2099943, 68553, 118, 3, 46, "Output"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2100122, 68563, 164, 10, 33, "Section", PageBreakAbove->False, CellTags->"SectDiscr Problems"], Cell[2100289, 68575, 1430, 59, 114, "Problem"], Cell[2101722, 68636, 1592, 62, 112, "Problem"], Cell[2103317, 68700, 716, 28, 84, "Problem"], Cell[2104036, 68730, 1074, 39, 106, "Problem"], Cell[2105113, 68771, 489, 21, 61, "Problem"], Cell[2105605, 68794, 614, 24, 60, "Problem"], Cell[2106222, 68820, 1168, 45, 104, "Problem"], Cell[2107393, 68867, 831, 33, 86, "Problem"], Cell[2108227, 68902, 840, 34, 64, "Problem"], Cell[2109070, 68938, 884, 34, 85, "Problem"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2110003, 68978, 102, 5, 38, "Chapter", CellTags->"Chap RSA"], Cell[CellGroupData[{ Cell[2110130, 68987, 134, 8, 47, "Section", CellTags->"SectRSA RSA"], Cell[2110267, 68997, 304, 8, 59, "Text"], Cell[2110574, 69007, 675, 26, 59, "Text"], Cell[2111252, 69035, 825, 30, 63, "Text"], Cell[2112080, 69067, 233, 8, 34, "Text"], Cell[CellGroupData[{ Cell[2112338, 69079, 179, 11, 47, "Subsection", CellTags->"SubsRSA RSA math"], Cell[2112520, 69092, 315, 11, 34, "Text"], Cell[2112838, 69105, 554, 27, 90, "Theorem"], Cell[2113395, 69134, 574, 19, 57, "NumberedEquation", CellTags->"FormRSA Euler Thm"], Cell[2113972, 69155, 531, 18, 90, "Theorem", CounterIncrements->"None"], Cell[2114506, 69175, 549, 18, 70, "NumberedEquation", CellTags->"FormRSA EulerPhi"], Cell[2115058, 69195, 403, 13, 34, "Text"], Cell[CellGroupData[{ Cell[2115486, 69212, 341, 10, 146, "Input"], Cell[2115830, 69224, 28, 0, 44, "Output"], Cell[2115861, 69226, 31, 0, 44, "Output"], Cell[2115895, 69228, 28, 0, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[2115972, 69234, 190, 11, 33, "Subsection", CellTags->"SubsRSA RSA setting up"], Cell[CellGroupData[{ Cell[2116187, 69249, 231, 8, 63, "Subsubsection", CellTags->"SubsubsRSA compute n"], Cell[2116421, 69259, 679, 26, 85, "Text"], Cell[2117103, 69287, 709, 26, 52, "NumberedEquation", CellTags->"FormRSA EulerPhi for RSA"], Cell[2117815, 69315, 1640, 63, 87, "Text"], Cell[2119458, 69380, 847, 32, 110, "Example", CellTags->"ExamRSA RSA"], Cell[CellGroupData[{ Cell[2120330, 69416, 309, 9, 146, "Input"], Cell[2120642, 69427, 31, 0, 44, "Output"], Cell[2120676, 69429, 32, 0, 44, "Output"], Cell[2120711, 69431, 35, 0, 44, "Output"], Cell[2120749, 69433, 35, 0, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[2120833, 69439, 322, 12, 37, "Subsubsection", CellTags->"SubsubsRSA compute e and d"], Cell[2121158, 69453, 794, 33, 36, "Text"], Cell[2121955, 69488, 560, 21, 33, "NumberedEquation", CellTags->"FormRSA e.d=1"], Cell[2122518, 69511, 809, 33, 71, "Text"], Cell[2123330, 69546, 807, 29, 83, "Text"], Cell[2124140, 69577, 604, 20, 146, "Input", CellTags->"Random"], Cell[2124747, 69599, 35, 0, 44, "Output"], Cell[2124785, 69601, 155, 5, 44, "Output"], Cell[2124943, 69608, 438, 17, 34, "Text"], Cell[2125384, 69627, 191, 6, 95, "Input"], Cell[2125578, 69635, 35, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2125650, 69640, 349, 13, 37, "Subsubsection", CellTags->"SubsubsRSA making public"], Cell[2126002, 69655, 809, 32, 60, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2126860, 69693, 178, 11, 33, "Subsection", CellTags->"SubsRSA RSA secr"], Cell[2127041, 69706, 669, 23, 59, "Text"], Cell[2127713, 69731, 310, 12, 31, "DisplayFormula"], Cell[2128026, 69745, 380, 15, 34, "Text"], Cell[2128409, 69762, 1268, 43, 52, "NumberedEquation", CellTags->"FormRSA check RSA secr"], Cell[2129680, 69807, 601, 21, 60, "Text"], Cell[2130284, 69830, 1407, 48, 271, "NumberedTable", CellTags->"TableRSA RSA Privacy"], Cell[2131694, 69880, 359, 12, 60, "Text"], Cell[2132056, 69894, 1221, 48, 83, "Text"], Cell[2133280, 69944, 343, 10, 120, "Input"], Cell[2133626, 69956, 35, 0, 44, "Output"], Cell[2133664, 69958, 385, 16, 37, "Text"], Cell[2134052, 69976, 96, 2, 69, "Input"], Cell[2134151, 69980, 35, 0, 44, "Output"], Cell[2134189, 69982, 479, 15, 60, "Text"], Cell[2134671, 69999, 244, 11, 34, "Text"], Cell[2134918, 70012, 723, 30, 110, "DisplayFormula"], Cell[2135644, 70044, 1624, 62, 94, "Text"], Cell[2137271, 70108, 1403, 50, 113, "Text"], Cell[2138677, 70160, 897, 37, 84, "Text", CellTags->"ExamRSA Decryp Part 4"], Cell[2139577, 70199, 759, 31, 110, "DisplayFormula"], Cell[2140339, 70232, 396, 14, 34, "Text"], Cell[CellGroupData[{ Cell[2140760, 70250, 436, 14, 95, "Input"], Cell[2141199, 70266, 35, 0, 44, "Output"], Cell[2141237, 70268, 35, 0, 44, "Output"] }, Open ]], Cell[2141287, 70271, 632, 24, 38, "Text"], Cell[CellGroupData[{ Cell[2141944, 70299, 820, 26, 197, "Input"], Cell[2142767, 70327, 31, 0, 44, "Output"], Cell[2142801, 70329, 31, 0, 44, "Output"], Cell[2142835, 70331, 30, 0, 44, "Output"], Cell[2142868, 70333, 31, 0, 44, "Output"], Cell[2142902, 70335, 31, 0, 44, "Output"], Cell[2142936, 70337, 30, 0, 44, "Output"] }, Open ]], Cell[2142981, 70340, 379, 13, 34, "Text"], Cell[2143363, 70355, 234, 8, 69, "Input"], Cell[2143600, 70365, 35, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2143672, 70370, 181, 11, 33, "Subsection", CellTags->"SubsRSA RSA sign"], Cell[2143856, 70383, 1199, 43, 89, "Text"], Cell[2145058, 70428, 1268, 43, 52, "NumberedEquation", CellTags->"FormRSA check RSA sign"], Cell[2146329, 70473, 858, 34, 60, "Text"], Cell[2147190, 70509, 604, 23, 59, "Text"], Cell[2147797, 70534, 1544, 53, 311, "NumberedTable", CellTags->"TableRSA RSA Signature"], Cell[2149344, 70589, 526, 21, 61, "Text"], Cell[2149873, 70612, 197, 6, 69, "Input"], Cell[2150073, 70620, 35, 0, 44, "Output"], Cell[2150111, 70622, 392, 17, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2150540, 70644, 197, 11, 33, "Subsection", CellTags->"SubsRSA RSA secr + sign"], Cell[2150740, 70657, 485, 13, 59, "Text"], Cell[2151228, 70672, 69, 0, 34, "Text"], Cell[2151300, 70674, 520, 19, 37, "NumberedEquation", CellTags->"FormRSA RSA secr+sign"], Cell[2151823, 70695, 941, 36, 59, "Text"], Cell[2152767, 70733, 481, 18, 37, "DisplayFormula"], Cell[2153251, 70753, 247, 10, 34, "Text"], Cell[2153501, 70765, 611, 16, 83, "Text"], Cell[2154115, 70783, 4106, 145, 434, "DisplayFormula", CellTags->"TableRSA RSA Secr+Sign"], Cell[2158224, 70930, 76, 1, 62, "NumberedTable", PageBreakAbove->False], Cell[2158303, 70933, 868, 31, 71, "Text"], Cell[2159174, 70966, 1766, 63, 51, "DisplayFormula"], Cell[2160943, 71031, 990, 31, 108, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2161982, 71068, 175, 8, 33, "Section", CellTags->"SectRSA Security"], Cell[CellGroupData[{ Cell[2162182, 71080, 195, 11, 47, "Subsection", CellTags->"SubsRSA cryptanalist"], Cell[2162380, 71093, 2408, 86, 137, "Text"], Cell[2164791, 71181, 270, 7, 59, "Text"], Cell[2165064, 71190, 192, 7, 37, "DisplayFormula"], Cell[2165259, 71199, 835, 27, 59, "Text"], Cell[2166097, 71228, 1077, 30, 146, "Input"], Cell[2167177, 71260, 1177, 27, 279, "Output"], Cell[2168357, 71289, 498, 10, 83, "Text"], Cell[2168858, 71301, 538, 14, 83, "Text"], Cell[2169399, 71317, 519, 13, 83, "Text", CellTags->"DiscRSA fact=break"], Cell[2169921, 71332, 521, 9, 108, "Text"], Cell[2170445, 71343, 728, 25, 61, "Text"], Cell[2171176, 71370, 384, 14, 34, "DisplayFormula"], Cell[2171563, 71386, 349, 12, 36, "Text"], Cell[2171915, 71400, 662, 30, 87, "Example", CellTags->"ExamRSA p-q small"], Cell[2172580, 71432, 187, 7, 81, "Input"], Cell[2172770, 71441, 33, 0, 44, "Output"], Cell[2172806, 71443, 646, 29, 56, "Text"], Cell[CellGroupData[{ Cell[2173477, 71476, 283, 11, 120, "Input"], Cell[2173763, 71489, 32, 0, 44, "Output"], Cell[2173798, 71491, 32, 0, 44, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[2173867, 71496, 73, 2, 69, "Input"], Cell[2173943, 71500, 31, 0, 44, "Output"] }, Open ]], Cell[2173989, 71503, 359, 15, 37, "Text"], Cell[2174351, 71520, 894, 28, 84, "Text"], Cell[2175248, 71550, 686, 25, 49, "DisplayFormula"], Cell[2175937, 71577, 309, 10, 60, "Text"], Cell[2176249, 71589, 212, 4, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2176498, 71598, 225, 11, 33, "Subsection", CellTags->"SubsRSA factorization"], Cell[2176726, 71611, 494, 14, 60, "Text"], Cell[CellGroupData[{ Cell[2177245, 71629, 173, 7, 65, "Subsubsection", CellTags->"SubsubsRSA Pollard p-1"], Cell[2177421, 71638, 623, 26, 63, "Text"], Cell[2178047, 71666, 1074, 38, 87, "Text", CellTags->"DefRSA Smooth"], Cell[2179124, 71706, 958, 39, 111, "Example"], Cell[CellGroupData[{ Cell[2180107, 71749, 184, 5, 95, "Input"], Cell[2180294, 71756, 31, 0, 44, "Output"], Cell[2180328, 71758, 292, 10, 44, "Output"] }, Open ]], Cell[2180635, 71771, 393, 15, 34, "Text"], Cell[2181031, 71788, 313, 12, 33, "DisplayFormula"], Cell[2181347, 71802, 96, 5, 34, "Text"], Cell[2181446, 71809, 426, 13, 37, "NumberedEquation", CellTags->"FormRSA prod prime smooth"], Cell[2181875, 71824, 1124, 43, 111, "Example"], Cell[CellGroupData[{ Cell[2183024, 71871, 104, 2, 95, "Input"], Cell[2183131, 71875, 29, 0, 44, "Output"], Cell[2183163, 71877, 29, 0, 44, "Output"] }, Open ]], Cell[2183207, 71880, 868, 32, 60, "Text"], Cell[2184078, 71914, 451, 15, 106, "Input"], Cell[2184532, 71931, 170, 2, 70, "Output"], Cell[2184705, 71935, 117, 3, 34, "Text"], Cell[2184825, 71940, 66, 1, 69, "Input"], Cell[2184894, 71943, 953, 32, 70, "Output"], Cell[2185850, 71977, 895, 38, 62, "Text"], Cell[2186748, 72017, 947, 38, 63, "Text"], Cell[2187698, 72057, 1907, 72, 117, "Text"], Cell[2189608, 72131, 1038, 39, 83, "Text"], Cell[2190649, 72172, 303, 10, 95, "Input"], Cell[2190955, 72184, 37, 0, 44, "Output"], Cell[2190995, 72186, 32, 0, 44, "Output"], Cell[2191030, 72188, 632, 24, 60, "Text"], Cell[2191665, 72214, 165, 6, 36, "Text"], Cell[2191833, 72222, 2862, 102, 214, "DisplayFormula"], Cell[2194698, 72326, 356, 13, 63, "NumberedFigure"], Cell[2195057, 72341, 765, 28, 61, "Text", CellTags->"DefRSA Strong prime"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2195871, 72375, 208, 11, 33, "Subsection", CellTags->"SubsRSA Factorization General"], Cell[CellGroupData[{ Cell[2196104, 72390, 92, 1, 63, "Subsubsection", CellTags->"SubsubsRSA Pollard rho"], Cell[2196199, 72393, 410, 14, 36, "Text"], Cell[2196612, 72409, 523, 21, 59, "DisplayFormula"], Cell[2197138, 72432, 988, 38, 87, "Text"], Cell[2198129, 72472, 525, 21, 59, "NumberedEquation"], Cell[2198657, 72495, 663, 26, 60, "Text"], Cell[2199323, 72523, 1500, 60, 89, "Text"], Cell[2200826, 72585, 64, 0, 34, "Text"], Cell[2200893, 72587, 1993, 79, 195, "DisplayFormula"], Cell[2202889, 72668, 231, 9, 63, "NumberedFigure"], Cell[2203123, 72679, 969, 40, 86, "Example", CellTags->"ExamRSA Pollard rho"], Cell[2204095, 72721, 1038, 35, 152, "Input"], Cell[2205136, 72758, 33, 0, 44, "Output"], Cell[2205172, 72760, 461, 16, 60, "Text"], Cell[CellGroupData[{ Cell[2205658, 72780, 122, 3, 95, "Input"], Cell[2205783, 72785, 33, 0, 44, "Output"], Cell[2205819, 72787, 31, 0, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[2205899, 72793, 95, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Random Square"], Cell[2205997, 72796, 451, 11, 83, "Text"], Cell[2206451, 72809, 64, 0, 34, "Text"], Cell[2206518, 72811, 844, 33, 85, "Text"], Cell[2207365, 72846, 287, 11, 60, "Text"], Cell[2207655, 72859, 296, 11, 36, "NumberedEquation", CellTags->"FormRSA a^2=b"], Cell[2207954, 72872, 488, 20, 35, "Text"], Cell[2208445, 72894, 472, 18, 42, "DisplayFormula"], Cell[2208920, 72914, 1330, 49, 93, "Text"], Cell[2210253, 72965, 2916, 104, 167, "Text", CellTags->"StepRSA quadr sieve 3"], Cell[2213172, 73071, 521, 20, 35, "DisplayFormula"], Cell[2213696, 73093, 2276, 82, 187, "Text"], Cell[2215975, 73177, 4511, 171, 223, "Text"], Cell[2220489, 73350, 4714, 196, 288, "DisplayFormula"], Cell[2225206, 73548, 100, 2, 62, "NumberedFigure"], Cell[2225309, 73552, 844, 33, 110, "Example"], Cell[CellGroupData[{ Cell[2226178, 73589, 200, 6, 69, "Input"], Cell[2226381, 73597, 144, 4, 44, "Output"] }, Open ]], Cell[2226540, 73604, 766, 27, 36, "Text"], Cell[2227309, 73633, 377, 12, 125, "Input"], Cell[2227689, 73647, 30, 0, 44, "Output"], Cell[2227722, 73649, 31, 0, 44, "Output"], Cell[2227756, 73651, 231, 8, 44, "Output"], Cell[2227990, 73661, 401, 14, 59, "Text"], Cell[2228394, 73677, 1514, 45, 233, "Input"], Cell[2229911, 73724, 3849, 132, 258, "Output"], Cell[2233763, 73858, 1989, 71, 113, "Text"], Cell[CellGroupData[{ Cell[2235777, 73933, 1567, 46, 197, "Input"], Cell[2237347, 73981, 576, 14, 208, "Output"], Cell[2237926, 73997, 576, 14, 208, "Output"] }, Open ]], Cell[2238517, 74014, 437, 13, 59, "Text"], Cell[2238957, 74029, 153, 4, 69, "Input"], Cell[2239113, 74035, 613, 18, 70, "Output"], Cell[2239729, 74055, 872, 31, 96, "Text"], Cell[CellGroupData[{ Cell[2240626, 74090, 647, 22, 122, "Input"], Cell[2241276, 74114, 36, 0, 44, "Output"], Cell[2241315, 74116, 31, 0, 44, "Output"], Cell[2241349, 74118, 29, 0, 44, "Output"] }, Open ]], Cell[2241393, 74121, 374, 16, 36, "Text"], Cell[CellGroupData[{ Cell[2241792, 74141, 50, 1, 69, "Input"], Cell[2241845, 74144, 29, 0, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[2241923, 74150, 73, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Q Sieve"], Cell[2241999, 74153, 57, 0, 34, "Text"], Cell[2242059, 74155, 410, 15, 38, "DisplayFormula"], Cell[2242472, 74172, 226, 6, 34, "Text"], Cell[2242701, 74180, 459, 18, 34, "Text"], Cell[2243163, 74200, 299, 12, 41, "Text"], Cell[2243465, 74214, 440, 17, 34, "DisplayFormula"], Cell[2243908, 74233, 2492, 96, 143, "Text"], Cell[2246403, 74331, 2246, 91, 146, "Text"], Cell[2248652, 74424, 247, 9, 35, "Text"], Cell[2248902, 74435, 431, 17, 79, "DisplayFormula"], Cell[2249336, 74454, 202, 6, 34, "Text"], Cell[2249541, 74462, 88, 2, 34, "Text"], Cell[2249632, 74466, 3715, 141, 296, "DisplayFormula"], Cell[2253350, 74609, 109, 2, 62, "NumberedFigure"], Cell[2253462, 74613, 109, 3, 34, "Text"], Cell[2253574, 74618, 1235, 50, 110, "Example", CellTags->"ExamRSA quadr sieve"], Cell[2254812, 74670, 882, 29, 171, "Input"], Cell[2255697, 74701, 209, 5, 44, "Output"], Cell[2255909, 74708, 778, 27, 36, "Text"], Cell[2256690, 74737, 1002, 31, 160, "Input"], Cell[2257695, 74770, 2996, 97, 249, "Output"], Cell[2260694, 74869, 844, 32, 60, "Text"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2261599, 74908, 204, 11, 33, "Section", CellTags->"SectRSA unsafe modes"], Cell[CellGroupData[{ Cell[2261828, 74923, 234, 13, 47, "Subsection", CellTags->"SubsRSA Coppersmith"], Cell[2262065, 74938, 894, 20, 156, "Text"], Cell[CellGroupData[{ Cell[2262984, 74962, 195, 6, 63, "Subsubsection", CellTags->"SubsubsRSA m^3"], Cell[2263182, 74970, 728, 26, 85, "Text"], Cell[2263913, 74998, 909, 33, 80, "NumberedEquation"], Cell[2264825, 75033, 1659, 61, 140, "Text"], Cell[2266487, 75096, 1268, 53, 150, "Example", CellTags->"ExamRSA e=3 same m"], Cell[2267758, 75151, 853, 34, 35, "DisplayFormula"], Cell[2268614, 75187, 392, 13, 34, "Text"], Cell[2269009, 75202, 605, 18, 120, "Input"], Cell[2269617, 75222, 52, 0, 44, "Output"], Cell[2269672, 75224, 654, 25, 38, "Text"], Cell[2270329, 75251, 238, 10, 33, "DisplayFormula"], Cell[2270570, 75263, 174, 8, 34, "Text"], Cell[CellGroupData[{ Cell[2270769, 75275, 171, 6, 71, "Input"], Cell[2270943, 75283, 36, 0, 44, "Output"] }, Open ]], Cell[2270994, 75286, 279, 9, 34, "Text"], Cell[CellGroupData[{ Cell[2271298, 75299, 433, 15, 133, "Input"], Cell[2271734, 75316, 31, 0, 44, "Output"], Cell[2271768, 75318, 31, 0, 44, "Output"], Cell[2271802, 75320, 31, 0, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[2271882, 75326, 175, 5, 37, "Subsubsection", CellTags->"SubsubsRSA Copper"], Cell[2272060, 75333, 1369, 49, 112, "Text"], Cell[2273432, 75384, 132, 3, 34, "Text"], Cell[2273567, 75389, 1215, 50, 64, "Text"], Cell[2274785, 75441, 1475, 52, 67, "NumberedEquation", CellTags->"FormRSA Copp Red"], Cell[2276263, 75495, 331, 11, 34, "Text"], Cell[2276597, 75508, 942, 33, 136, "Input"], Cell[2277542, 75543, 29, 0, 44, "Output"], Cell[2277574, 75545, 566, 24, 34, "Text"], Cell[2278143, 75571, 874, 31, 61, "DisplayFormula"], Cell[2279020, 75604, 1976, 86, 110, "Example"], Cell[2280999, 75692, 1189, 40, 128, "Input"], Cell[2282191, 75734, 182, 5, 44, "Output"], Cell[2282376, 75741, 304, 11, 34, "Text"], Cell[2282683, 75754, 495, 16, 146, "Input"], Cell[2283181, 75772, 1608, 62, 86, "Text"], Cell[2284792, 75836, 34, 0, 44, "Output"], Cell[2284829, 75838, 31, 0, 44, "Output"], Cell[2284863, 75840, 31, 0, 44, "Output"] }, Open ]], Cell[2284909, 75843, 796, 27, 37, "DisplayFormula"], Cell[2285708, 75872, 361, 14, 36, "DisplayFormula"], Cell[2286072, 75888, 91, 2, 34, "Text"], Cell[CellGroupData[{ Cell[2286188, 75894, 1675, 57, 178, "Input"], Cell[2287866, 75953, 444, 15, 46, "Output"], Cell[2288313, 75970, 444, 15, 46, "Output"], Cell[2288760, 75987, 28, 0, 44, "Output"] }, Open ]], Cell[2288803, 75990, 2569, 99, 139, "Text"], Cell[2291375, 76091, 482, 18, 60, "Text"], Cell[2291860, 76111, 149, 3, 34, "Text"], Cell[2292012, 76116, 1692, 60, 133, "Text"], Cell[2293707, 76178, 3363, 131, 249, "Example", CellTags->"ExamRSA Copper"], Cell[CellGroupData[{ Cell[2297095, 76313, 648, 23, 127, "Input"], Cell[2297746, 76338, 338, 11, 46, "Output"], Cell[2298087, 76351, 96, 3, 46, "Output"], Cell[2298186, 76356, 261, 8, 46, "Output"] }, Open ]], Cell[2298462, 76367, 614, 21, 61, "Text"], Cell[CellGroupData[{ Cell[2299101, 76392, 363, 11, 95, "Input"], Cell[2299467, 76405, 33, 0, 44, "Output"], Cell[2299503, 76407, 238, 7, 46, "Output"] }, Open ]], Cell[2299756, 76417, 442, 18, 36, "Text"], Cell[2300201, 76437, 274, 10, 69, "Input"], Cell[2300478, 76449, 209, 6, 46, "Output"], Cell[CellGroupData[{ Cell[2300712, 76459, 366, 11, 95, "Input"], Cell[2301081, 76472, 33, 0, 44, "Output"], Cell[2301117, 76474, 180, 5, 46, "Output"] }, Open ]], Cell[2301312, 76482, 274, 10, 69, "Input"], Cell[2301589, 76494, 144, 4, 46, "Output"], Cell[CellGroupData[{ Cell[2301758, 76502, 366, 11, 95, "Input"], Cell[2302127, 76515, 33, 0, 44, "Output"], Cell[2302163, 76517, 116, 3, 46, "Output"] }, Open ]], Cell[2302294, 76523, 271, 9, 69, "Input"], Cell[2302568, 76534, 82, 2, 44, "Output"], Cell[CellGroupData[{ Cell[2302675, 76540, 365, 11, 95, "Input"], Cell[2303043, 76553, 33, 0, 44, "Output"], Cell[2303079, 76555, 55, 1, 44, "Output"] }, Open ]], Cell[2303149, 76559, 271, 9, 69, "Input"], Cell[2303423, 76570, 28, 0, 44, "Output"], Cell[2303454, 76572, 203, 9, 34, "Text"], Cell[2303660, 76583, 555, 20, 35, "DisplayFormula"], Cell[2304218, 76605, 422, 15, 34, "Text"], Cell[2304643, 76622, 392, 14, 95, "Input"], Cell[2305038, 76638, 392, 15, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2305467, 76658, 253, 13, 33, "Subsection", CellTags->"SubsRSA Wiener attack"], Cell[2305723, 76673, 1151, 34, 141, "Text"], Cell[2306877, 76709, 182, 6, 34, "Text"], Cell[2307062, 76717, 356, 13, 33, "DisplayFormula"], Cell[2307421, 76732, 2153, 78, 112, "Text"], Cell[2309577, 76812, 388, 12, 61, "Text"], Cell[2309968, 76826, 546, 20, 41, "DisplayFormula"], Cell[2310517, 76848, 421, 16, 36, "Text"], Cell[2310941, 76866, 506, 20, 44, "NumberedEquation", CellTags->"FormRSA Wien ed"], Cell[2311450, 76888, 1119, 48, 61, "Text"], Cell[2312572, 76938, 377, 15, 36, "Text"], Cell[2312952, 76955, 534, 20, 46, "NumberedEquation", CellTags->"FormRSA Wien k/dg"], Cell[2313489, 76977, 808, 31, 61, "Text"], Cell[2314300, 77010, 1197, 51, 118, "Theorem"], Cell[2315500, 77063, 422, 15, 83, "Text"], Cell[2315925, 77080, 1036, 35, 113, "Text"], Cell[2316964, 77117, 483, 19, 71, "Text"], Cell[2317450, 77138, 519, 19, 60, "Text"], Cell[2317972, 77159, 1258, 51, 101, "DisplayFormula"], Cell[2319233, 77212, 313, 12, 37, "Text"], Cell[2319549, 77226, 582, 25, 46, "DisplayFormula"], Cell[2320134, 77253, 2063, 79, 112, "Text"], Cell[2322200, 77334, 116, 3, 34, "Text"], Cell[2322319, 77339, 1195, 46, 110, "Example"], Cell[CellGroupData[{ Cell[2323539, 77389, 328, 8, 95, "Input"], Cell[2323870, 77399, 365, 10, 63, "Output"] }, Open ]], Cell[2324250, 77412, 1060, 35, 85, "Text"], Cell[2325313, 77449, 329, 10, 69, "Input"], Cell[2325645, 77461, 76, 1, 44, "Output"], Cell[2325724, 77464, 273, 9, 60, "Text"], Cell[CellGroupData[{ Cell[2326022, 77477, 185, 4, 69, "Input"], Cell[2326210, 77483, 119, 2, 63, "Output"] }, Open ]], Cell[2326344, 77488, 824, 37, 36, "Text"], Cell[2327171, 77527, 280, 10, 69, "Input"], Cell[2327454, 77539, 37, 0, 44, "Output"], Cell[2327494, 77541, 532, 21, 36, "Text"], Cell[CellGroupData[{ Cell[2328051, 77566, 166, 6, 69, "Input"], Cell[2328220, 77574, 33, 0, 44, "Output"] }, Open ]], Cell[2328268, 77577, 657, 24, 37, "Text"], Cell[2328928, 77603, 310, 10, 74, "Input"], Cell[2329241, 77615, 191, 6, 44, "Output"], Cell[2329435, 77623, 181, 8, 34, "Text"], Cell[CellGroupData[{ Cell[2329641, 77635, 81, 2, 69, "Input"], Cell[2329725, 77639, 31, 0, 44, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[2329805, 77645, 229, 13, 33, "Subsection", CellTags->"SubsRSA physical"], Cell[2330037, 77660, 251, 4, 59, "Text"], Cell[CellGroupData[{ Cell[2330313, 77668, 115, 3, 63, "Subsubsection", CellTags->"SubsubsRSA Timing"], Cell[2330431, 77673, 892, 29, 94, "Text"], Cell[2331326, 77704, 682, 15, 108, "Text"], Cell[2332011, 77721, 171, 3, 59, "Text"], Cell[2332185, 77726, 678, 23, 93, "Input"], Cell[2332866, 77751, 53, 1, 46, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2332956, 77757, 84, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Microwave"], Cell[2333043, 77760, 1171, 40, 115, "Text"], Cell[2334217, 77802, 951, 26, 137, "Text"], Cell[2335171, 77830, 863, 33, 64, "Text"], Cell[2336037, 77865, 723, 30, 110, "DisplayFormula"], Cell[2336763, 77897, 753, 30, 36, "Text"], Cell[2337519, 77929, 403, 15, 33, "DisplayFormula"], Cell[2337925, 77946, 587, 21, 33, "DisplayFormula"], Cell[2338515, 77969, 301, 12, 36, "Text"], Cell[2338819, 77983, 923, 30, 83, "Text"], Cell[2339745, 78015, 1351, 56, 109, "Text", CellTags->"ExamRSA Decryp Part 4"], Cell[2341099, 78073, 275, 8, 69, "Input"], Cell[2341377, 78083, 35, 0, 44, "Output"], Cell[2341415, 78085, 555, 22, 59, "Text"], Cell[2341973, 78109, 1041, 33, 120, "Input"], Cell[2343017, 78144, 35, 0, 44, "Output"], Cell[2343055, 78146, 723, 27, 59, "Text"], Cell[CellGroupData[{ Cell[2343803, 78177, 362, 12, 120, "Input"], Cell[2344168, 78191, 35, 0, 44, "Output"], Cell[2344206, 78193, 32, 0, 44, "Output"] }, Open ]], Cell[2344253, 78196, 162, 6, 34, "Text"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2344476, 78209, 189, 8, 33, "Section", CellTags->"SectRSA generate primes"], Cell[CellGroupData[{ Cell[2344690, 78221, 186, 11, 47, "Subsection", CellTags->"SubsRSA try random"], Cell[2344879, 78234, 211, 4, 59, "Text"], Cell[2345093, 78240, 1007, 39, 176, "Theorem", CellTags->"AlgRSA generate prime"], Cell[2346103, 78281, 820, 24, 108, "Text"], Cell[2346926, 78307, 1017, 37, 110, "Example", CellTags->"ExamRSA RSA"], Cell[2347946, 78346, 933, 30, 125, "Input"], Cell[2348882, 78378, 479, 12, 83, "Text"], Cell[2349364, 78392, 939, 40, 123, "Theorem"], Cell[2350306, 78434, 172, 4, 32, "Print"], Cell[2350481, 78440, 158, 4, 32, "Print"], Cell[2350642, 78446, 228, 6, 83, "Text"], Cell[2350873, 78454, 1670, 57, 78, "Text"], Cell[2352546, 78513, 141, 6, 34, "Text"], Cell[2352690, 78521, 626, 19, 120, "Input"], Cell[2353319, 78542, 48, 0, 44, "Output"], Cell[2353370, 78544, 171, 3, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2353578, 78552, 193, 11, 33, "Subsection", CellTags->"SubsRSA prob appr"], Cell[CellGroupData[{ Cell[2353796, 78567, 97, 1, 63, "Subsubsection", CellTags->"SubsubsRSA Solovay"], Cell[2353896, 78570, 747, 32, 61, "Text"], Cell[2354646, 78604, 258, 10, 34, "DisplayFormula", CellTags->"FormRSA qr"], Cell[2354907, 78616, 746, 28, 61, "Text"], Cell[2355656, 78646, 1106, 43, 74, "DisplayFormula"], Cell[2356765, 78691, 1022, 41, 84, "Text"], Cell[2357790, 78734, 354, 14, 52, "DisplayFormula"], Cell[2358147, 78750, 678, 17, 83, "Text"], Cell[CellGroupData[{ Cell[2358850, 78771, 191, 5, 69, "Input"], Cell[2359044, 78778, 70, 1, 44, "Output"] }, Open ]], Cell[2359129, 78782, 643, 20, 59, "Text"], Cell[2359775, 78804, 313, 11, 74, "Input"], Cell[2360091, 78817, 325, 10, 44, "Output"], Cell[2360419, 78829, 479, 16, 36, "Text"], Cell[2360901, 78847, 101, 2, 69, "Input"], Cell[2361005, 78851, 32, 0, 44, "Output"], Cell[2361040, 78853, 1446, 47, 133, "Text"], Cell[2362489, 78902, 406, 17, 36, "Text"], Cell[2362898, 78921, 380, 15, 46, "NumberedEquation", CellTags->"FormRSA u^(p-1)/2="], Cell[2363281, 78938, 203, 7, 34, "Text"], Cell[2363487, 78947, 1129, 42, 188, "Theorem", CellTags->"TheoRSA Solovay"], Cell[2364619, 78991, 342, 12, 55, "NumberedEquation"], Cell[2364964, 79005, 413, 14, 55, "NumberedEquation"], Cell[2365380, 79021, 941, 36, 59, "Text"], Cell[2366324, 79059, 567, 17, 37, "DisplayFormula"], Cell[2366894, 79078, 1659, 59, 101, "Text"], Cell[2368556, 79139, 435, 12, 59, "Text"], Cell[2368994, 79153, 841, 30, 85, "Text"], Cell[2369838, 79185, 396, 13, 33, "NumberedEquation", CellTags->"FormRSA a=1+p"], Cell[2370237, 79200, 375, 12, 33, "NumberedEquation", CellTags->"FormRSA a=1 mod s"], Cell[2370615, 79214, 3417, 126, 165, "Text"], Cell[2374035, 79342, 596, 23, 36, "Text"], Cell[2374634, 79367, 589, 21, 60, "Text"], Cell[2375226, 79390, 290, 9, 33, "NumberedEquation"], Cell[2375519, 79401, 450, 17, 33, "NumberedEquation", CellTags->"FormRSA u=a p1"], Cell[2375972, 79420, 2950, 114, 146, "Text"], Cell[2378925, 79536, 424, 14, 34, "DisplayFormula"], Cell[2379352, 79552, 294, 11, 34, "Text"], Cell[2379649, 79565, 116, 3, 34, "Text"], Cell[2379768, 79570, 71, 0, 34, "Text"], Cell[2379842, 79572, 1870, 85, 285, "Theorem", CellTags->"AlgRSA Solovay"], Cell[2381715, 79659, 1237, 39, 135, "Text"], Cell[2382955, 79700, 942, 38, 86, "Example"], Cell[CellGroupData[{ Cell[2383922, 79742, 570, 19, 95, "Input"], Cell[2384495, 79763, 31, 0, 44, "Output"], Cell[2384529, 79765, 32, 0, 44, "Output"] }, Open ]], Cell[2384576, 79768, 160, 6, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2384773, 79779, 80, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Miller-Rabin"], Cell[2384856, 79782, 807, 31, 63, "Text"], Cell[2385666, 79815, 2087, 77, 113, "Text"], Cell[2387756, 79894, 1301, 55, 143, "Theorem"], Cell[2389060, 79951, 1704, 61, 122, "Text"], Cell[2390767, 80014, 1181, 47, 66, "Text", CellTags->"DefRSA strong witness"], Cell[2391951, 80063, 1212, 44, 91, "Text", CellTags->"DefRSA strong liar"], Cell[2393166, 80109, 3758, 169, 507, "Theorem", CellTags->"AlgRSA Miller-Rabin"], Cell[2396927, 80280, 1991, 81, 112, "Example"], Cell[2398921, 80363, 1063, 36, 145, "Input"], Cell[2399987, 80401, 76, 2, 44, "Output"], Cell[2400066, 80405, 30, 0, 44, "Output"], Cell[2400099, 80407, 30, 0, 32, "Print"], Cell[2400132, 80409, 30, 0, 32, "Print"], Cell[2400165, 80411, 27, 0, 32, "Print"], Cell[2400195, 80413, 663, 27, 36, "Text"], Cell[2400861, 80442, 815, 36, 86, "Example"], Cell[CellGroupData[{ Cell[2401701, 80482, 980, 32, 124, "Input"], Cell[2402684, 80516, 75, 2, 44, "Output"], Cell[2402762, 80520, 29, 0, 44, "Output"], Cell[2402794, 80522, 29, 0, 32, "Print"], Cell[2402826, 80524, 29, 0, 32, "Print"], Cell[2402858, 80526, 27, 0, 32, "Print"] }, Open ]], Cell[2402900, 80529, 849, 24, 111, "Text"], Cell[2403752, 80555, 1339, 53, 136, "Theorem"], Cell[2405094, 80610, 344, 12, 59, "Text"], Cell[2405441, 80624, 522, 23, 36, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2406012, 80653, 192, 11, 33, "Subsection", CellTags->"SubsRSA Lenstra"], Cell[2406207, 80666, 817, 20, 132, "Text"], Cell[2407027, 80688, 182, 7, 34, "Text"], Cell[2407212, 80697, 473, 21, 90, "Theorem", CellTags->"TheoRSA Fermat"], Cell[2407688, 80720, 366, 12, 55, "NumberedEquation", CellTags->"FormRSA Fermat"], Cell[2408057, 80734, 334, 11, 34, "Text"], Cell[2408394, 80747, 2475, 85, 156, "Text"], Cell[2410872, 80834, 413, 13, 34, "Text"], Cell[CellGroupData[{ Cell[2411310, 80851, 296, 9, 95, "Input"], Cell[2411609, 80862, 232, 8, 44, "Output"], Cell[2411844, 80872, 31, 0, 44, "Output"] }, Open ]], Cell[2411890, 80875, 676, 27, 37, "Text", CellTags->"DefRSA Carmichael"], Cell[2412569, 80904, 453, 16, 59, "Text"], Cell[2413025, 80922, 903, 37, 136, "Theorem"], Cell[2413931, 80961, 556, 19, 59, "Text"], Cell[2414490, 80982, 116, 3, 34, "Text"], Cell[2414609, 80987, 199, 4, 59, "Text"], Cell[2414811, 80993, 529, 24, 90, "Theorem"], Cell[2415343, 81019, 708, 26, 60, "Text"], Cell[2416054, 81047, 116, 3, 34, "Text"], Cell[2416173, 81052, 372, 10, 59, "Text"], Cell[2416548, 81064, 440, 19, 90, "Theorem", CellTags->"TheoRSA Lenstra 1"], Cell[2416991, 81085, 683, 24, 57, "NumberedEquation", CellTags->"FormRSA Cond Lenstra 1"], Cell[2417677, 81111, 550, 19, 57, "NumberedEquation", CellTags->"FormRSA Cond Lenstra 2"], Cell[2418230, 81132, 233, 9, 67, "Theorem", CounterIncrements->"None"], Cell[2418466, 81143, 403, 12, 55, "NumberedEquation", CellTags->"FormRSA m^j mod 24"], Cell[2418872, 81157, 126, 2, 67, "Theorem", CounterIncrements->"None"], Cell[2419001, 81161, 466, 16, 57, "NumberedEquation", CellTags->"FormRSA m^j mod 24 j=0"], Cell[2419470, 81179, 1576, 53, 83, "Text"], Cell[CellGroupData[{ Cell[2421071, 81236, 1279, 43, 171, "Input"], Cell[2422353, 81281, 232, 8, 44, "Output"], Cell[2422588, 81291, 28, 0, 44, "Output"], Cell[2422619, 81293, 31, 0, 44, "Output"], Cell[2422653, 81295, 31, 0, 44, "Output"], Cell[2422687, 81297, 31, 0, 44, "Output"] }, Open ]], Cell[2422733, 81300, 576, 19, 60, "Text"], Cell[2423312, 81321, 2871, 130, 288, "Theorem", CellTags->"AlgRSA Lenstra small"], Cell[2426186, 81453, 3214, 121, 211, "Text"], Cell[2429403, 81576, 116, 3, 34, "Text"], Cell[2429522, 81581, 477, 15, 59, "Text"], Cell[2430002, 81598, 1108, 46, 133, "Theorem", CellTags->"LemRSA m1=m2 mod 24"], Cell[2431113, 81646, 1391, 49, 83, "Text"], Cell[CellGroupData[{ Cell[2432529, 81699, 448, 14, 120, "Input"], Cell[2432980, 81715, 209, 6, 44, "Output"], Cell[2433192, 81723, 209, 6, 44, "Output"], Cell[2433404, 81731, 209, 6, 44, "Output"] }, Open ]], Cell[2433628, 81740, 726, 26, 59, "Text"], Cell[2434357, 81768, 116, 3, 34, "Text"], Cell[2434476, 81773, 854, 34, 59, "Text"], Cell[2435333, 81809, 706, 30, 135, "Theorem", CellTags->"LemRSA m^2 mod 24"], Cell[2436042, 81841, 1325, 49, 86, "Text"], Cell[2437370, 81892, 116, 3, 34, "Text"], Cell[2437489, 81897, 270, 9, 34, "Text"], Cell[CellGroupData[{ Cell[2437784, 81910, 261, 8, 99, "Input"], Cell[2438048, 81920, 145, 4, 44, "Output"], Cell[2438196, 81926, 139, 4, 44, "Output"] }, Open ]], Cell[2438350, 81933, 189, 8, 34, "Text"], Cell[2438542, 81943, 2588, 98, 187, "Text"], Cell[2441133, 82043, 499, 18, 38, "DisplayFormula"], Cell[2441635, 82063, 532, 20, 59, "Text"], Cell[2442170, 82085, 507, 17, 38, "DisplayFormula"], Cell[2442680, 82104, 113, 1, 34, "Text"], Cell[2442796, 82107, 186, 7, 31, "DisplayFormula"], Cell[2442985, 82116, 423, 17, 36, "Text"], Cell[2443411, 82135, 840, 29, 48, "DisplayFormula"], Cell[2444254, 82166, 183, 6, 34, "Text"], Cell[2444440, 82174, 838, 29, 48, "DisplayFormula"], Cell[2445281, 82205, 265, 8, 34, "Text"], Cell[2445549, 82215, 387, 14, 38, "NumberedEquation", CellTags->"FormRSA u/d u/m"], Cell[2445939, 82231, 1485, 53, 111, "Text"], Cell[2447427, 82286, 116, 3, 34, "Text"], Cell[2447546, 82291, 723, 23, 59, "Text"], Cell[2448272, 82316, 374, 14, 34, "DisplayFormula"], Cell[2448649, 82332, 610, 19, 85, "Text"], Cell[2449262, 82353, 442, 16, 34, "DisplayFormula"], Cell[2449707, 82371, 74, 0, 34, "Text"], Cell[2449784, 82373, 440, 16, 34, "DisplayFormula"], Cell[2450227, 82391, 115, 5, 34, "Text"], Cell[2450345, 82398, 861, 25, 54, "DisplayFormula"], Cell[2451209, 82425, 301, 11, 37, "Text"], Cell[2451513, 82438, 1922, 89, 246, "Theorem"], Cell[2453438, 82529, 605, 17, 83, "Text"], Cell[2454046, 82548, 203, 6, 33, "DisplayFormula"], Cell[2454252, 82556, 110, 5, 34, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2454411, 82567, 139, 8, 33, "Section", CellTags->"SectRSA Rabin"], Cell[2454553, 82577, 612, 22, 59, "Text"], Cell[CellGroupData[{ Cell[2455190, 82603, 193, 12, 47, "Subsection", CellTags->"SubsRSA Rabin Encr"], Cell[2455386, 82617, 489, 17, 60, "Text"], Cell[2455878, 82636, 168, 7, 33, "NumberedEquation", CellTags->"FormRSA e=2"], Cell[2456049, 82645, 2406, 88, 138, "Text"], Cell[2458458, 82735, 280, 9, 34, "NumberedEquation", CellTags->"FormRSA Rabin encr"], Cell[2458741, 82746, 482, 18, 36, "Text"], Cell[2459226, 82766, 1028, 42, 110, "Example", CellTags->"ExamRSA Rabin"], Cell[CellGroupData[{ Cell[2460279, 82812, 412, 13, 171, "Input"], Cell[2460694, 82827, 35, 0, 44, "Output"], Cell[2460732, 82829, 35, 0, 44, "Output"] }, Open ]], Cell[2460782, 82832, 851, 25, 60, "Text"], Cell[CellGroupData[{ Cell[2461658, 82861, 1024, 33, 146, "Input"], Cell[2462685, 82896, 35, 0, 44, "Output"], Cell[2462723, 82898, 35, 0, 44, "Output"], Cell[2462761, 82900, 35, 0, 44, "Output"], Cell[2462799, 82902, 35, 0, 44, "Output"] }, Open ]], Cell[2462849, 82905, 64, 1, 34, "Text"], Cell[CellGroupData[{ Cell[2462938, 82910, 338, 8, 146, "Input"], Cell[2463279, 82920, 35, 0, 44, "Output"], Cell[2463317, 82922, 35, 0, 44, "Output"], Cell[2463355, 82924, 35, 0, 44, "Output"], Cell[2463393, 82926, 35, 0, 44, "Output"] }, Open ]], Cell[2463443, 82929, 514, 14, 60, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2463994, 82948, 175, 11, 33, "Subsection", CellTags->"SubSRSA Rabin decr"], Cell[CellGroupData[{ Cell[2464194, 82963, 74, 1, 63, "Subsubsection", CellTags->"SubsubsRSA Rabin pre"], Cell[2464271, 82966, 556, 18, 60, "Text"], Cell[2464830, 82986, 512, 19, 33, "NumberedEquation", CellTags->"FormRSA CRT eq for a"], Cell[2465345, 83007, 512, 19, 33, "NumberedEquation", CellTags->"FormRSA CRT eq for b"], Cell[2465860, 83028, 1373, 45, 110, "Text"], Cell[2467236, 83075, 278, 10, 59, "Text"], Cell[2467517, 83087, 414, 16, 31, "DisplayFormula"], Cell[2467934, 83105, 414, 16, 31, "DisplayFormula"], Cell[CellGroupData[{ Cell[2468373, 83125, 436, 14, 95, "Input"], Cell[2468812, 83141, 35, 0, 44, "Output"], Cell[2468850, 83143, 35, 0, 44, "Output"] }, Open ]], Cell[2468900, 83146, 235, 11, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2469172, 83162, 110, 1, 37, "Subsubsection", CellTags->"SubsubsRSA find square root"], Cell[2469285, 83165, 1146, 38, 111, "Text"], Cell[2470434, 83205, 258, 10, 36, "Text"], Cell[2470695, 83217, 1044, 39, 64, "Text"], Cell[2471742, 83258, 991, 35, 52, "DisplayFormula"], Cell[2472736, 83295, 1405, 51, 136, "Example"], Cell[CellGroupData[{ Cell[2474166, 83350, 343, 11, 120, "Input"], Cell[2474512, 83363, 31, 0, 44, "Output"], Cell[2474546, 83365, 31, 0, 44, "Output"], Cell[2474580, 83367, 31, 0, 44, "Output"] }, Open ]], Cell[2474626, 83370, 883, 31, 61, "Text"], Cell[CellGroupData[{ Cell[2475534, 83405, 346, 11, 95, "Input"], Cell[2475883, 83418, 31, 0, 44, "Output"], Cell[2475917, 83420, 79, 2, 44, "Output"] }, Open ]], Cell[2476011, 83425, 288, 11, 36, "Text", CellTags->"CaseRSA Rabin 2"], Cell[2476302, 83438, 1558, 58, 88, "Text"], Cell[2477863, 83498, 884, 33, 111, "Example"], Cell[CellGroupData[{ Cell[2478772, 83535, 343, 11, 120, "Input"], Cell[2479118, 83548, 31, 0, 44, "Output"], Cell[2479152, 83550, 31, 0, 44, "Output"], Cell[2479186, 83552, 31, 0, 44, "Output"] }, Open ]], Cell[2479232, 83555, 1269, 47, 63, "Text"], Cell[CellGroupData[{ Cell[2480526, 83606, 946, 32, 146, "Input"], Cell[2481475, 83640, 31, 0, 44, "Output"], Cell[2481509, 83642, 79, 2, 44, "Output"] }, Open ]], Cell[2481603, 83647, 288, 11, 36, "Text", CellTags->"CaseRSA Rabin 3"], Cell[2481894, 83660, 230, 8, 34, "Text"], Cell[2482127, 83670, 1316, 50, 115, "Text"], Cell[2483446, 83722, 474, 17, 33, "NumberedEquation", CellTags->"FormRSA (x-u)^2-c"], Cell[2483923, 83741, 1114, 40, 90, "Text"], Cell[2485040, 83783, 622, 21, 36, "NumberedEquation", CellTags->"FormRSA (r+u)/(s+u)"], Cell[2485665, 83806, 585, 20, 34, "Text"], Cell[2486253, 83828, 1324, 45, 171, "Input"], Cell[2487580, 83875, 1252, 45, 84, "Text"], Cell[2488835, 83922, 251, 8, 34, "Text"], Cell[2489089, 83932, 164, 4, 44, "Output"], Cell[2489256, 83938, 145, 4, 44, "Output"], Cell[2489404, 83944, 253, 5, 44, "Output"], Cell[2489660, 83951, 400, 14, 37, "DisplayFormula"], Cell[2490063, 83967, 813, 31, 110, "Example"], Cell[2490879, 84000, 308, 10, 69, "Input"], Cell[2491190, 84012, 201, 6, 120, "Input", CellTags->"InputAppA ListQuadRes"], Cell[2491394, 84020, 103, 2, 44, "Output"], Cell[2491500, 84024, 314, 11, 34, "Text"], Cell[CellGroupData[{ Cell[2491839, 84039, 379, 13, 69, "Input"], Cell[2492221, 84054, 28, 0, 44, "Output"] }, Open ]], Cell[2492264, 84057, 193, 8, 34, "Text"], Cell[2492460, 84067, 602, 22, 37, "Text"], Cell[2493065, 84091, 587, 22, 37, "NumberedEquation", CellTags->"FormRSA gcd for square root"], Cell[2493655, 84115, 23, 0, 34, "Text"], Cell[2493681, 84117, 1465, 51, 97, "DisplayFormula"], Cell[2495149, 84170, 1603, 58, 125, "Text"], Cell[2496755, 84230, 67, 0, 34, "Text"], Cell[2496825, 84232, 633, 20, 61, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2497495, 84257, 86, 1, 37, "Subsubsection", CellTags->"SubsubsRSA Rabin 4 solutions"], Cell[2497584, 84260, 595, 19, 61, "Text"], Cell[2498182, 84281, 623, 25, 60, "Text"], Cell[2498808, 84308, 414, 16, 31, "DisplayFormula"], Cell[2499225, 84326, 414, 16, 31, "DisplayFormula"], Cell[2499642, 84344, 244, 11, 34, "Text"], Cell[CellGroupData[{ Cell[2499911, 84359, 492, 13, 146, "Input"], Cell[2500406, 84374, 28, 0, 44, "Output"], Cell[2500437, 84376, 28, 0, 44, "Output"] }, Open ]], Cell[2500480, 84379, 834, 33, 61, "Text"], Cell[2501317, 84414, 268, 12, 41, "Text"], Cell[2501588, 84428, 620, 22, 37, "Text"], Cell[2502211, 84452, 280, 10, 69, "Input"], Cell[2502494, 84464, 28, 0, 44, "Output"], Cell[2502525, 84466, 413, 17, 37, "Text"], Cell[CellGroupData[{ Cell[2502963, 84487, 200, 7, 69, "Input"], Cell[2503166, 84496, 30, 0, 44, "Output"] }, Open ]], Cell[2503211, 84499, 268, 12, 41, "Text"], Cell[2503482, 84513, 1236, 45, 64, "Text"], Cell[2504721, 84560, 534, 19, 74, "Input"], Cell[2505258, 84581, 35, 0, 44, "Output"], Cell[2505296, 84583, 50, 1, 34, "Text"], Cell[2505349, 84586, 535, 19, 74, "Input"], Cell[2505887, 84607, 53, 1, 44, "Output"], Cell[2505943, 84610, 351, 12, 36, "Text"], Cell[CellGroupData[{ Cell[2506319, 84626, 154, 5, 69, "Input"], Cell[2506476, 84633, 31, 0, 44, "Output"] }, Open ]], Cell[2506522, 84636, 510, 21, 36, "Text"], Cell[CellGroupData[{ Cell[2507057, 84661, 608, 22, 146, "Input"], Cell[2507668, 84685, 34, 0, 44, "Output"], Cell[2507705, 84687, 35, 0, 44, "Output"], Cell[2507743, 84689, 35, 0, 44, "Output"], Cell[2507781, 84691, 35, 0, 44, "Output"] }, Open ]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2507877, 84698, 211, 12, 33, "Subsection", CellTags->"SubsRSA distinguish"], Cell[2508091, 84712, 1320, 49, 86, "Text"], Cell[2509414, 84763, 317, 12, 33, "DisplayFormula"], Cell[2509734, 84777, 1489, 57, 111, "Text"], Cell[2511226, 84836, 1722, 61, 92, "DisplayFormula"], Cell[2512951, 84899, 2425, 92, 136, "Text"], Cell[2515379, 84993, 1492, 60, 173, "Example", CellTags->"ExamRSA Rabin four"], Cell[2516874, 85055, 1690, 56, 197, "Input"], Cell[2518567, 85113, 191, 5, 32, "Print"], Cell[2518761, 85120, 174, 5, 32, "Print"], Cell[2518938, 85127, 174, 5, 32, "Print"], Cell[2519115, 85134, 191, 5, 32, "Print"], Cell[2519309, 85141, 559, 22, 34, "Text"], Cell[2519871, 85165, 959, 34, 85, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2520867, 85204, 273, 13, 33, "Subsection", CellTags->"SubsRSA Equivalence"], Cell[2521143, 85219, 568, 17, 84, "Text"], Cell[2521714, 85238, 1438, 55, 138, "Theorem", CellTags->"TheoRSA Rabin equiv compl"], Cell[2523155, 85295, 990, 36, 60, "Text"], Cell[2524148, 85333, 1779, 69, 92, "DisplayFormula"], Cell[2525930, 85404, 1496, 52, 137, "Text"], Cell[2527429, 85458, 116, 3, 34, "Text"], Cell[2527548, 85463, 1666, 58, 160, "Text"], Cell[2529217, 85523, 484, 16, 146, "Input"], Cell[2529704, 85541, 29, 0, 44, "Output"], Cell[2529736, 85543, 28, 0, 44, "Output"], Cell[2529767, 85545, 29, 0, 44, "Output"], Cell[2529799, 85547, 28, 0, 44, "Output"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2529876, 85553, 133, 8, 33, "Section", CellTags->"SectRSA Problems"], Cell[2530012, 85563, 864, 37, 88, "Problem"], Cell[2530879, 85602, 254, 10, 31, "DisplayFormula"], Cell[2531136, 85614, 1256, 46, 106, "Problem", CounterIncrements->"Non"], Cell[2532395, 85662, 598, 22, 81, "Problem", CellTags->"ProbRSA RSA when gcd>1"], Cell[2532996, 85686, 252, 8, 32, "DisplayFormula"], Cell[2533251, 85696, 1097, 34, 69, "Problem", PageBreakBelow->Automatic, CounterIncrements->"None"], Cell[2534351, 85732, 2539, 95, 172, "Problem"], Cell[2536893, 85829, 219, 7, 29, "DisplayFormula"], Cell[2537115, 85838, 120, 3, 43, "Problem", CounterIncrements->"Non"], Cell[2537238, 85843, 441, 15, 31, "DisplayFormula"], Cell[2537682, 85860, 238, 9, 43, "Problem", PageBreakBelow->Automatic, CounterIncrements->"None"], Cell[2537923, 85871, 683, 24, 80, "Problem"], Cell[2538609, 85897, 718, 31, 60, "Problem"], Cell[2539330, 85930, 674, 27, 58, "Problem"], Cell[2540007, 85959, 620, 27, 58, "Problem", CellTags->"ProbRSA 9.7"], Cell[2540630, 85988, 627, 28, 58, "Problem"], Cell[2541260, 86018, 537, 24, 58, "Problem"], Cell[2541800, 86044, 1880, 75, 147, "Problem"], Cell[2543683, 86121, 1531, 61, 103, "Problem"], Cell[2545217, 86184, 871, 31, 101, "Problem", CellTags->"ProbRSA Rabin non-trivial factor"], Cell[2546091, 86217, 887, 30, 101, "Problem", PageBreakAbove->True], Cell[2546981, 86249, 2764, 108, 154, "Problem", CellTags->"ProbRSA Rabin decrypt 5(8)"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2549794, 86363, 116, 5, 38, "Chapter", CellTags->"Chap Ellip"], Cell[2549913, 86370, 725, 15, 108, "Text"], Cell[CellGroupData[{ Cell[2550663, 86389, 165, 8, 47, "Section", CellTags->"SectEllip Basic facts"], Cell[2550831, 86399, 1036, 43, 63, "Text"], Cell[2551870, 86444, 129, 5, 34, "Text"], Cell[2552002, 86451, 430, 15, 34, "NumberedEquation", CellTags->"FormEllip Weierstrass"], Cell[2552435, 86468, 286, 8, 36, "Text"], Cell[2552724, 86478, 667, 26, 60, "Text"], Cell[2553394, 86506, 392, 15, 34, "NumberedEquation", CellTags->"FormEllip Red Weier"], Cell[2553789, 86523, 318, 12, 36, "Text"], Cell[2554110, 86537, 270, 10, 34, "NumberedEquation", CellTags->"FormEllip Weier Red p>3"], Cell[2554383, 86549, 261, 10, 36, "Text"], Cell[2554647, 86561, 350, 13, 34, "NumberedEquation", CellTags->"FormEllip Weier Red p=2"], Cell[2555000, 86576, 328, 12, 34, "NumberedEquation", CellTags->"FormEllip Weier Red p=2 super"], Cell[2555331, 86590, 891, 37, 113, "Definition", CellTags->"DefEllip elliptic curve"], Cell[2556225, 86629, 508, 19, 37, "Text"], Cell[2556736, 86650, 857, 28, 122, "Input"], Cell[2557596, 86680, 31, 0, 44, "Output"], Cell[2557630, 86682, 665, 22, 60, "Text"], Cell[2558298, 86706, 473, 15, 74, "Input"], Cell[2558774, 86723, 397, 12, 44, "Output"], Cell[2559174, 86737, 580, 24, 36, "Text"], Cell[2559757, 86763, 392, 11, 59, "Text"], Cell[2560152, 86776, 1419, 51, 112, "Text"], Cell[2561574, 86829, 815, 28, 60, "Text"], Cell[2562392, 86859, 823, 24, 124, "Input"], Cell[2563218, 86885, 2462, 72, 146, "Output"], Cell[2565683, 86959, 666, 22, 85, "Text"], Cell[2566352, 86983, 1173, 40, 87, "Text"], Cell[2567528, 87025, 170, 7, 34, "Text"], Cell[2567701, 87034, 782, 33, 140, "Theorem", CellTags->"TheoEllip Hasse"], Cell[2568486, 87069, 265, 10, 42, "Text"], Cell[2568754, 87081, 411, 12, 59, "Text"], Cell[2569168, 87095, 451, 15, 60, "Text"], Cell[2569622, 87112, 1686, 65, 119, "Example", CellTags->"ExamEllip point on EC?"], Cell[2571311, 87179, 87, 2, 69, "Input"], Cell[2571401, 87183, 889, 32, 177, "Input"], Cell[2572293, 87217, 28, 0, 44, "Output"], Cell[2572324, 87219, 454, 17, 42, "Text"], Cell[2572781, 87238, 217, 7, 103, "Input"], Cell[2573001, 87247, 195, 7, 44, "Output"], Cell[2573199, 87256, 195, 7, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2573431, 87268, 158, 8, 33, "Section", CellTags->"SectEllip geometry"], Cell[2573592, 87278, 1096, 29, 108, "Text"], Cell[2574691, 87309, 437, 13, 34, "Text"], Cell[CellGroupData[{ Cell[2575153, 87326, 593, 17, 99, "Input"], Cell[2575749, 87345, 8923, 159, 563, "Output"] }, Open ]], Cell[2584687, 87507, 440, 17, 59, "Text"], Cell[2585130, 87526, 639, 23, 37, "Text"], Cell[CellGroupData[{ Cell[2585794, 87553, 956, 28, 103, "Input"], Cell[2586753, 87583, 8977, 160, 563, "Output"] }, Open ]], Cell[2595745, 87746, 222, 6, 34, "Text"], Cell[2595970, 87754, 411, 14, 74, "Input"], Cell[2596384, 87770, 619, 18, 44, "Output"], Cell[2597006, 87790, 368, 11, 37, "Text"], Cell[2597377, 87803, 532, 17, 74, "Input"], Cell[2597912, 87822, 613, 18, 44, "Output"], Cell[2598528, 87842, 606, 21, 60, "Text"], Cell[2599137, 87865, 1459, 60, 117, "Example"], Cell[2600599, 87927, 529, 19, 176, "Input"], Cell[2601131, 87948, 212, 7, 44, "Output"], Cell[2601346, 87957, 801, 35, 36, "Text"], Cell[2602150, 87994, 370, 13, 95, "Input"], Cell[2602523, 88009, 83, 2, 44, "Output"], Cell[2602609, 88013, 83, 2, 44, "Output"], Cell[CellGroupData[{ Cell[2602717, 88019, 142, 3, 63, "Subsubsection", CellTags->"SubsubsEllip two points"], Cell[2602862, 88024, 1614, 60, 110, "Text"], Cell[2604479, 88086, 534, 21, 46, "NumberedEquation", CellTags->"FormEllip lambda"], Cell[2605016, 88109, 37, 0, 34, "Text"], Cell[2605056, 88111, 1536, 52, 115, "Text"], Cell[2606595, 88165, 303, 11, 35, "NumberedEquation", CellTags->"FormEllip x3 p>2"], Cell[2606901, 88178, 31, 0, 34, "Text"], Cell[2606935, 88180, 343, 13, 33, "NumberedEquation", CellTags->"FormEllip y3 p>2"], Cell[2607281, 88195, 1618, 65, 112, "Example"], Cell[2608902, 88262, 990, 33, 150, "Input"], Cell[2609895, 88297, 31, 0, 44, "Output"], Cell[2609929, 88299, 31, 0, 44, "Output"], Cell[2609963, 88301, 840, 29, 69, "Text"], Cell[2610806, 88332, 114, 3, 69, "Input"], Cell[2610923, 88337, 28, 0, 44, "Output"], Cell[2610954, 88339, 495, 19, 36, "Text"], Cell[2611452, 88360, 459, 17, 125, "Input"], Cell[2611914, 88379, 28, 0, 44, "Output"], Cell[2611945, 88381, 29, 0, 44, "Output"], Cell[2611977, 88383, 293, 10, 36, "Text"], Cell[2612273, 88395, 165, 6, 69, "Input"], Cell[2612441, 88403, 31, 0, 44, "Output"], Cell[2612475, 88405, 464, 17, 60, "Text"], Cell[2612942, 88424, 321, 11, 35, "NumberedEquation", CellTags->"FormEllip x3 p=2"], Cell[2613266, 88437, 343, 13, 33, "NumberedEquation", CellTags->"FormEllip y3 p=2"], Cell[2613612, 88452, 173, 6, 36, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2613822, 88463, 119, 3, 37, "Subsubsection", CellTags->"SubsubsEllip tangent"], Cell[2613944, 88468, 1083, 35, 85, "Text", CellTags->"DefEllip tangent"], Cell[2615030, 88505, 79, 2, 34, "Text"], Cell[CellGroupData[{ Cell[2615134, 88511, 875, 26, 103, "Input"], Cell[2616012, 88539, 6302, 114, 563, "Output"] }, Open ]], Cell[2622329, 88656, 276, 5, 59, "Text"], Cell[2622608, 88663, 1020, 36, 85, "Text", CellTags->"DefEllip derivative"], Cell[2623631, 88701, 1396, 52, 91, "Text"], Cell[2625030, 88755, 605, 23, 56, "NumberedEquation", CellTags->"FormEllip lambda tang p>2"], Cell[2625638, 88780, 310, 11, 34, "Text"], Cell[2625951, 88793, 1678, 65, 91, "Text"], Cell[2627632, 88860, 657, 25, 56, "NumberedEquation", CellTags->"FormEllip lambda tang p=2"], Cell[2628292, 88887, 353, 13, 34, "Text"], Cell[2628648, 88902, 1532, 56, 128, "DisplayFormula"], Cell[2630183, 88960, 20, 0, 34, "Text"], Cell[2630206, 88962, 294, 11, 48, "NumberedEquation", CellTags->"FormEllip 2x1 p=2"], Cell[2630503, 88975, 139, 6, 34, "Text"], Cell[2630645, 88983, 449, 17, 52, "NumberedEquation", CellTags->"FormEllip 2y1 p=2"], Cell[2631097, 89002, 1523, 59, 114, "Example"], Cell[2632623, 89063, 87, 2, 69, "Input"], Cell[2632713, 89067, 978, 35, 177, "Input"], Cell[2633694, 89104, 28, 0, 44, "Output"], Cell[2633725, 89106, 378, 14, 40, "Text"], Cell[2634106, 89122, 101, 3, 69, "Input"], Cell[2634210, 89127, 195, 7, 44, "Output"], Cell[2634408, 89136, 416, 16, 34, "Text"], Cell[2634827, 89154, 358, 13, 100, "Input"], Cell[2635188, 89169, 195, 7, 44, "Output"], Cell[2635386, 89178, 195, 7, 44, "Output"], Cell[2635584, 89187, 394, 15, 40, "Text"], Cell[2635981, 89204, 150, 4, 124, "Input"], Cell[2636134, 89210, 195, 7, 44, "Output"], Cell[2636332, 89219, 195, 7, 44, "Output"], Cell[2636530, 89228, 28, 0, 44, "Output"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2636607, 89234, 165, 8, 33, "Section", CellTags->"SectEllip Addition"], Cell[2636775, 89244, 970, 25, 133, "Text"], Cell[2637748, 89271, 275, 11, 33, "DisplayFormula"], Cell[2638026, 89284, 257, 11, 34, "Text"], Cell[2638286, 89297, 209, 9, 33, "DisplayFormula"], Cell[2638498, 89308, 542, 17, 59, "Text"], Cell[2639043, 89327, 262, 10, 34, "Text"], Cell[2639308, 89339, 611, 24, 60, "Text"], Cell[2639922, 89365, 310, 14, 36, "Text"], Cell[2640235, 89381, 267, 10, 34, "Text"], Cell[2640505, 89393, 3801, 151, 443, "Definition", CellTags->"DefEllip Addition"], Cell[2644309, 89546, 95, 2, 34, "Text"], Cell[2644407, 89550, 332, 8, 59, "Text"], Cell[CellGroupData[{ Cell[2644764, 89562, 2920, 83, 204, "Input"], Cell[2647687, 89647, 18411, 328, 385, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[2666135, 89980, 2271, 65, 179, "Input"], Cell[2668409, 90047, 6344, 123, 563, "Output"] }, Open ]], Cell[2674768, 90173, 683, 23, 59, "Text"], Cell[2675454, 90198, 572, 21, 112, "Theorem", CellTags->"TheoEllip Additive Group"], Cell[2676029, 90221, 1270, 47, 84, "Text"], Cell[2677302, 90270, 7174, 212, 497, "Input", InitializationCell->True, CellTags->"InputEllip addition"], Cell[2684479, 90484, 75, 0, 34, "Text"], Cell[2684557, 90486, 1395, 40, 197, "Input"], Cell[2685955, 90528, 73, 2, 44, "Output"], Cell[2686031, 90532, 73, 2, 44, "Output"], Cell[2686107, 90536, 73, 2, 44, "Output"], Cell[2686183, 90540, 73, 2, 44, "Output"], Cell[2686259, 90544, 50, 1, 44, "Output"], Cell[2686312, 90547, 73, 2, 44, "Output"], Cell[2686388, 90551, 300, 11, 34, "Text"], Cell[2686691, 90564, 401, 16, 31, "DisplayFormula"], Cell[2687095, 90582, 2259, 91, 108, "Text", CellTags->"DefEllip order"], Cell[2689357, 90675, 357, 13, 34, "Text"], Cell[2689717, 90690, 853, 25, 95, "Input"], Cell[2690573, 90717, 592, 22, 126, "Output"], Cell[2691168, 90741, 498, 20, 37, "Text"], Cell[2691669, 90763, 485, 10, 83, "Text"], Cell[2692157, 90775, 1084, 40, 83, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2693278, 90820, 177, 8, 33, "Section", CellTags->"SectEllip EC-cryptosystems"], Cell[2693458, 90830, 1183, 31, 156, "Text"], Cell[CellGroupData[{ Cell[2694666, 90865, 224, 11, 47, "Subsection", CellTags->"SubsElip discr log problem"], Cell[2694893, 90878, 775, 26, 83, "Text"], Cell[2695671, 90906, 596, 23, 86, "Example"], Cell[2696270, 90931, 91, 2, 69, "Input"], Cell[2696364, 90935, 139, 4, 44, "Output"], Cell[2696506, 90941, 169, 7, 34, "Text"], Cell[2696678, 90950, 845, 38, 137, "DisplayFormula"], Cell[2697526, 90990, 113, 3, 34, "Text"], Cell[2697642, 90995, 611, 22, 69, "Input"], Cell[2698256, 91019, 52, 1, 44, "Output"], Cell[2698311, 91022, 342, 10, 59, "Text"], Cell[2698656, 91034, 202, 6, 34, "Text"], Cell[2698861, 91042, 105, 3, 34, "Text"], Cell[2698969, 91047, 928, 36, 114, "Definition", CellTags->"DefEllip Discr Log Prob"], Cell[2699900, 91085, 285, 10, 57, "NumberedEquation"], Cell[2700188, 91097, 697, 25, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2700922, 91127, 222, 11, 33, "Subsection", CellTags->"SubsElip discr log system"], Cell[2701147, 91140, 299, 7, 59, "Text"], Cell[2701449, 91149, 1761, 64, 163, "Text"], Cell[2703213, 91215, 1925, 71, 224, "DisplayFormula", CellTags->"TableEllip Diffie Hellman"], Cell[2705141, 91288, 215, 7, 62, "NumberedTable", PageBreakAbove->False], Cell[2705359, 91297, 1265, 51, 112, "Example", CellTags->"ExamEllip Key Exchange"], Cell[2706627, 91350, 659, 21, 99, "Input"], Cell[2707289, 91373, 31, 0, 44, "Output"], Cell[2707323, 91375, 954, 32, 84, "Text"], Cell[2708280, 91409, 343, 9, 146, "Input"], Cell[2708626, 91420, 171, 6, 44, "Output"], Cell[2708800, 91428, 150, 4, 44, "Output"], Cell[2708953, 91434, 139, 4, 44, "Output"], Cell[2709095, 91440, 139, 4, 44, "Output"], Cell[2709237, 91446, 1954, 50, 273, "Input"], Cell[2711194, 91498, 50, 1, 44, "Output"], Cell[2711247, 91501, 74, 2, 44, "Output"], Cell[2711324, 91505, 77, 2, 44, "Output"], Cell[2711404, 91509, 706, 28, 60, "Text"], Cell[2712113, 91539, 416, 10, 95, "Input"], Cell[2712532, 91551, 77, 2, 44, "Output"], Cell[2712612, 91555, 77, 2, 44, "Output"], Cell[2712692, 91559, 558, 23, 37, "Text"], Cell[2713253, 91584, 689, 20, 95, "Input"], Cell[2713945, 91606, 77, 2, 44, "Output"], Cell[2714025, 91610, 565, 22, 37, "Text"], Cell[2714593, 91634, 689, 20, 95, "Input"], Cell[2715285, 91656, 77, 2, 44, "Output"], Cell[2715365, 91660, 391, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2715793, 91673, 215, 11, 33, "Subsection", CellTags->"SubsElip security"], Cell[2716011, 91686, 707, 20, 83, "Text"], Cell[2716721, 91708, 1234, 27, 181, "Text", CellTags->"DefEllip Xedni"], Cell[2717958, 91737, 271, 7, 59, "Text"], Cell[2718232, 91746, 91, 4, 74, "DisplayFormula"], Cell[2718326, 91752, 614, 18, 83, "Text"], Cell[2718943, 91772, 470, 13, 59, "Text", CellTags->"DefEllip homogenize"], Cell[2719416, 91787, 650, 21, 34, "NumberedEquation"], Cell[2720069, 91810, 1052, 35, 110, "Text"], Cell[2721124, 91847, 907, 31, 60, "Text", CellTags->"DefEllip singular"], Cell[2722034, 91880, 1300, 47, 87, "Text"], Cell[2723337, 91929, 110, 3, 34, "Text"], Cell[2723450, 91934, 404, 11, 59, "Text", CellTags->"DefEllip supersingular"], Cell[2723857, 91947, 423, 15, 37, "Text", CellTags->"DefEllip anomalous"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2724329, 91968, 135, 8, 33, "Section", CellTags->"SectEllip Problems"], Cell[2724467, 91978, 482, 20, 66, "Problem"], Cell[2724952, 92000, 857, 36, 61, "Problem"], Cell[2725812, 92038, 891, 35, 83, "Problem"], Cell[2726706, 92075, 1478, 59, 105, "Problem"], Cell[2728187, 92136, 605, 26, 58, "Problem"], Cell[2728795, 92164, 1561, 58, 128, "Problem"], Cell[2730359, 92224, 989, 38, 83, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2731397, 92268, 113, 5, 38, "Chapter", CellTags->"Chap McEl"], Cell[CellGroupData[{ Cell[2731535, 92277, 151, 8, 47, "Section", CellTags->"SectMcEl Goppa"], Cell[2731689, 92287, 374, 9, 59, "Text"], Cell[2732066, 92298, 693, 30, 91, "Theorem", CellTags->"TheoMcEl Goppa"], Cell[2732762, 92330, 1337, 40, 68, "NumberedEquation", CellTags->"FormMcEl Goppa"], Cell[2734102, 92372, 1059, 46, 89, "Theorem", CounterIncrements->"None", CellTags->"DefMcEl Goppa code"], Cell[2735164, 92420, 3966, 141, 254, "Text", CellTags->"DefMcEl codeword"], Cell[2739133, 92563, 440, 14, 37, "NumberedEquation"], Cell[2739576, 92579, 1525, 59, 118, "Example", CellTags->"ExamMcEl Goppa"], Cell[2741104, 92640, 108, 3, 69, "Input", CellTags->"S5.2.1"], Cell[2741215, 92645, 241, 7, 69, "Input"], Cell[2741459, 92654, 998, 31, 332, "Output"], Cell[2742460, 92687, 1331, 47, 92, "Text"], Cell[2743794, 92736, 960, 34, 202, "Input"], Cell[2744757, 92772, 195, 7, 44, "Output"], Cell[2744955, 92781, 3639, 133, 347, "Output"], Cell[2748597, 92916, 1046, 40, 65, "Text"], Cell[2749646, 92958, 276, 9, 74, "Input"], Cell[2749925, 92969, 781, 27, 44, "Output"], Cell[2750709, 92998, 122, 3, 34, "Text"], Cell[2750834, 93003, 641, 23, 77, "DisplayFormula"], Cell[2751478, 93028, 185, 8, 34, "Text"], Cell[2751666, 93038, 610, 25, 37, "DisplayFormula"], Cell[2752279, 93065, 572, 21, 40, "Text"], Cell[2752854, 93088, 467, 16, 74, "Input"], Cell[2753324, 93106, 195, 7, 44, "Output"], Cell[2753522, 93115, 653, 24, 41, "Text"], Cell[2754178, 93141, 592, 18, 104, "Input"], Cell[2754773, 93161, 781, 27, 44, "Output"], Cell[2755557, 93190, 544, 19, 32, "Print"], Cell[2756104, 93211, 780, 27, 32, "Print"], Cell[2756887, 93240, 780, 27, 32, "Print"], Cell[2757670, 93269, 780, 27, 32, "Print"], Cell[2758453, 93298, 780, 27, 32, "Print"], Cell[2759236, 93327, 780, 27, 32, "Print"], Cell[2760019, 93356, 780, 27, 32, "Print"], Cell[2760802, 93385, 780, 27, 32, "Print"], Cell[2761585, 93414, 780, 27, 32, "Print"], Cell[2762368, 93443, 780, 27, 32, "Print"], Cell[2763151, 93472, 780, 27, 32, "Print"], Cell[2763934, 93501, 780, 27, 32, "Print"], Cell[2764717, 93530, 780, 27, 32, "Print"], Cell[2765500, 93559, 780, 27, 32, "Print"], Cell[2766283, 93588, 780, 27, 32, "Print"], Cell[2767066, 93617, 1235, 45, 95, "Text"], Cell[2768304, 93664, 1434, 37, 60, "DisplayFormula"], Cell[2769741, 93703, 359, 12, 63, "Text"], Cell[2770103, 93717, 728, 25, 44, "DisplayFormula"], Cell[2770834, 93744, 58, 1, 34, "Text"], Cell[2770895, 93747, 1022, 35, 46, "DisplayFormula"], Cell[2771920, 93784, 414, 15, 44, "Text"], Cell[2772337, 93801, 794, 27, 44, "DisplayFormula"], Cell[2773134, 93830, 87, 1, 34, "Text"], Cell[2773224, 93833, 346, 13, 31, "DisplayFormula"], Cell[2773573, 93848, 653, 20, 60, "Text"], Cell[2774229, 93870, 981, 25, 183, "DisplayFormula"], Cell[2775213, 93897, 338, 12, 40, "Text"], Cell[2775554, 93911, 746, 26, 37, "DisplayFormula"], Cell[2776303, 93939, 219, 7, 34, "Text"], Cell[2776525, 93948, 372, 15, 34, "Text", CellTags->"DefMcEl parity ch ma"], Cell[2776900, 93965, 686, 22, 36, "NumberedEquation", CellTags->"FormMcEl Hc=0"], Cell[2777589, 93989, 543, 22, 34, "Text", CellTags->"DefMcEl Syndrome"], Cell[2778135, 94013, 1463, 53, 108, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2779635, 94071, 151, 8, 33, "Section", CellTags->"SectMcEl McEliece"], Cell[2779789, 94081, 231, 7, 34, "Text"], Cell[CellGroupData[{ Cell[2780045, 94092, 172, 11, 47, "Subsection", CellTags->"SubsMcEl System"], Cell[CellGroupData[{ Cell[2780242, 94107, 86, 1, 63, "Subsubsection", CellTags->"SubsubsMcEl setting it up"], Cell[2780331, 94110, 1747, 70, 86, "Text"], Cell[2782081, 94182, 610, 25, 35, "Text"], Cell[2782694, 94209, 282, 11, 34, "NumberedEquation", CellTags->"FormMcEl G\[RawStar]=SGP"], Cell[2782979, 94222, 541, 25, 37, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2783557, 94252, 72, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl encryption"], Cell[2783632, 94255, 1190, 43, 85, "Text"], Cell[2784825, 94300, 468, 17, 33, "NumberedEquation", CellTags->"FormMcEl enc McE"], Cell[2785296, 94319, 716, 27, 59, "Text", CellTags->"DefMcEl weight"] }, Closed]], Cell[CellGroupData[{ Cell[2786049, 94351, 72, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl decryption"], Cell[2786124, 94354, 279, 10, 34, "Text"], Cell[2786406, 94366, 1897, 73, 48, "DisplayFormula"], Cell[2788306, 94441, 2022, 74, 89, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2790377, 94521, 176, 11, 33, "Subsection", CellTags->"SubsMcEl Discussion"], Cell[CellGroupData[{ Cell[2790578, 94536, 90, 1, 63, "Subsubsection", CellTags->"SubsubsMcEl summary"], Cell[2790671, 94539, 116, 3, 34, "Text"], Cell[2790790, 94544, 3256, 104, 395, "DisplayFormula"], Cell[2794049, 94650, 83, 1, 62, "NumberedTable", CellTags->"TableMcEl McEliece"], Cell[2794135, 94653, 544, 18, 59, "Text"], Cell[2794682, 94673, 762, 31, 34, "Text", CellTags->"PropMcEl parameters"] }, Closed]], Cell[CellGroupData[{ Cell[2795481, 94709, 86, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl heuristics"], Cell[2795570, 94712, 983, 22, 156, "Text"], Cell[2796556, 94736, 943, 24, 132, "Text", CellTags->"DefMcEl NP-complete"] }, Closed]], Cell[CellGroupData[{ Cell[2797536, 94765, 81, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl no sign"], Cell[2797620, 94768, 458, 13, 59, "Text"], Cell[2798081, 94783, 700, 23, 52, "DisplayFormula"], Cell[2798784, 94808, 685, 22, 84, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2799518, 94836, 180, 11, 33, "Subsection", CellTags->"SubsMcEl Security"], Cell[2799701, 94849, 425, 12, 59, "Text"], Cell[2800129, 94863, 139, 4, 69, "Input"], Cell[CellGroupData[{ Cell[2800293, 94871, 248, 10, 63, "Subsubsection", CellTags->"SubsubsMcEl guessing S and P"], Cell[2800544, 94883, 1504, 57, 86, "Text"], Cell[2802051, 94942, 867, 31, 65, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2802955, 94978, 93, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl exhaustive"], Cell[2803051, 94981, 1601, 57, 112, "Text"], Cell[2804655, 95040, 75, 0, 34, "Text"], Cell[2804733, 95042, 102, 3, 74, "Input"], Cell[2804838, 95047, 113, 3, 46, "Output"], Cell[2804954, 95052, 645, 28, 86, "Example", CellTags->"ExamMcEl Hamming"], Cell[2805602, 95082, 276, 8, 129, "Input"], Cell[2805881, 95092, 1010, 36, 85, "Text"], Cell[2806894, 95130, 496, 16, 95, "Input"], Cell[2807393, 95148, 126, 3, 44, "Output"], Cell[2807522, 95153, 126, 3, 44, "Output"], Cell[2807651, 95158, 478, 19, 34, "Text"], Cell[2808132, 95179, 361, 12, 120, "Input"], Cell[2808496, 95193, 126, 3, 44, "Output"], Cell[2808625, 95198, 126, 3, 44, "Output"], Cell[2808754, 95203, 622, 24, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2809413, 95232, 77, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl syndrome"], Cell[2809493, 95235, 2893, 107, 137, "Text"], Cell[2812389, 95344, 320, 12, 55, "Text"], Cell[2812712, 95358, 226, 7, 107, "Input"], Cell[2812941, 95367, 112, 3, 46, "Output"], Cell[2813056, 95372, 403, 14, 59, "Text"], Cell[2813462, 95388, 297, 9, 108, "Input"], Cell[2813762, 95399, 218, 7, 83, "Output"], Cell[2813983, 95408, 363, 13, 34, "Text"], Cell[2814349, 95423, 253, 8, 69, "Input"], Cell[2814605, 95433, 180, 8, 104, "Output"], Cell[2814788, 95443, 1381, 50, 85, "Text"], Cell[2816172, 95495, 1051, 33, 146, "Input"], Cell[2817226, 95530, 362, 9, 32, "Print"], Cell[2817591, 95541, 362, 9, 32, "Print"], Cell[2817956, 95552, 362, 9, 32, "Print"], Cell[2818321, 95563, 362, 9, 32, "Print"], Cell[2818686, 95574, 362, 9, 32, "Print"], Cell[2819051, 95585, 362, 9, 32, "Print"], Cell[2819416, 95596, 362, 9, 32, "Print"], Cell[2819781, 95607, 362, 9, 32, "Print"], Cell[2820146, 95618, 317, 12, 34, "Text"], Cell[2820466, 95632, 277, 9, 69, "Input"], Cell[2820746, 95643, 83, 2, 44, "Output"], Cell[2820832, 95647, 377, 13, 34, "Text"], Cell[2821212, 95662, 277, 9, 69, "Input"], Cell[2821492, 95673, 126, 3, 44, "Output"], Cell[2821621, 95678, 678, 26, 60, "Text"], Cell[2822302, 95706, 270, 11, 31, "DisplayFormula"] }, Closed]], Cell[CellGroupData[{ Cell[2822609, 95722, 185, 6, 37, "Subsubsection", CellTags->"SubsubsMcEl guessing k correct"], Cell[2822797, 95730, 2207, 77, 186, "Text"], Cell[2825007, 95809, 476, 16, 60, "Text"], Cell[2825486, 95827, 250, 9, 74, "Input"], Cell[2825739, 95838, 112, 3, 46, "Output"], Cell[2825854, 95843, 113, 3, 34, "Text"], Cell[2825970, 95848, 2133, 78, 108, "Text"], Cell[2828106, 95928, 661, 19, 187, "Input"], Cell[2828770, 95949, 93, 2, 44, "Output"], Cell[2828866, 95953, 200, 8, 104, "Output"], Cell[2829069, 95963, 299, 9, 95, "Input"], Cell[2829371, 95974, 93, 2, 44, "Output"], Cell[2829467, 95978, 460, 17, 34, "Text"], Cell[2829930, 95997, 272, 7, 95, "Input"], Cell[2830205, 96006, 93, 2, 44, "Output"], Cell[2830301, 96010, 45, 1, 44, "Output"], Cell[2830349, 96013, 557, 19, 83, "Text"], Cell[2830909, 96034, 274, 9, 95, "Input"], Cell[2831186, 96045, 126, 3, 44, "Output"], Cell[2831315, 96050, 67, 1, 34, "Text"], Cell[2831385, 96053, 424, 12, 120, "Input"], Cell[2831812, 96067, 200, 8, 104, "Output"], Cell[2832015, 96077, 299, 9, 95, "Input"], Cell[2832317, 96088, 93, 2, 44, "Output"], Cell[2832413, 96092, 272, 7, 95, "Input"], Cell[2832688, 96101, 93, 2, 44, "Output"], Cell[2832784, 96105, 45, 1, 44, "Output"], Cell[2832832, 96108, 440, 17, 34, "Text"], Cell[2833275, 96127, 268, 9, 69, "Input"], Cell[2833546, 96138, 126, 3, 44, "Output"], Cell[2833675, 96143, 227, 8, 34, "Text"], Cell[2833905, 96153, 380, 13, 34, "Text"], Cell[2834288, 96168, 193, 5, 69, "Input"], Cell[2834484, 96175, 93, 2, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2834614, 96182, 101, 1, 37, "Subsubsection", CellTags->"SubsubsMcEl multiple"], Cell[2834718, 96185, 2843, 105, 134, "Text"], Cell[2837564, 96292, 1073, 41, 114, "DisplayFormula"], Cell[2838640, 96335, 624, 25, 64, "Text"], Cell[2839267, 96362, 334, 11, 99, "Input"], Cell[2839604, 96375, 108, 3, 44, "Output"], Cell[2839715, 96380, 364, 13, 34, "Text"], Cell[2840082, 96395, 1182, 42, 90, "Text"], Cell[2841267, 96439, 137, 3, 34, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2841453, 96448, 202, 11, 33, "Subsection", CellTags->"SubsMcEl Example"], Cell[2841658, 96461, 1769, 65, 88, "Text"], Cell[2843430, 96528, 1123, 27, 255, "Input"], Cell[2844556, 96557, 844, 20, 187, "Output"], Cell[2845403, 96579, 734, 27, 64, "Text"], Cell[2846140, 96608, 2406, 55, 623, "Input"], Cell[2848549, 96665, 844, 20, 187, "Output"], Cell[2849396, 96687, 288, 10, 34, "Text"], Cell[2849687, 96699, 617, 20, 120, "Input"], Cell[2850307, 96721, 224, 5, 44, "Output"], Cell[2850534, 96728, 931, 33, 85, "Text"], Cell[2851468, 96763, 248, 8, 95, "Input"], Cell[2851719, 96773, 224, 5, 44, "Output"], Cell[2851946, 96780, 1432, 50, 90, "Text"], Cell[2853381, 96832, 396, 13, 120, "Input"], Cell[2853780, 96847, 224, 5, 44, "Output"], Cell[2854007, 96854, 224, 5, 44, "Output"], Cell[2854234, 96861, 385, 16, 36, "Text"], Cell[2854622, 96879, 452, 15, 120, "Input"], Cell[2855077, 96896, 139, 4, 44, "Output"], Cell[2855219, 96902, 74, 1, 34, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2855342, 96909, 173, 8, 33, "Section", CellTags->"SectMcEl Other technique"], Cell[2855518, 96919, 894, 25, 108, "Text", CellTags->"DefMcEl Inf Set Dec"], Cell[2856415, 96946, 7684, 303, 467, "Theorem", CellTags->"AlgMcEl Bit Swap"], Cell[2864102, 97251, 195, 6, 34, "Text"], Cell[2864300, 97259, 58, 1, 34, "Text"], Cell[2864361, 97262, 476, 14, 161, "Input"], Cell[2864840, 97278, 260, 8, 104, "Output"], Cell[2865103, 97288, 126, 3, 44, "Output"], Cell[2865232, 97293, 574, 22, 34, "Text"], Cell[2865809, 97317, 331, 11, 120, "Input"], Cell[2866143, 97330, 93, 2, 44, "Output"], Cell[2866239, 97334, 126, 3, 44, "Output"], Cell[2866368, 97339, 126, 3, 44, "Output"], Cell[2866497, 97344, 403, 14, 62, "Text"], Cell[2866903, 97360, 710, 22, 95, "Input"], Cell[2867616, 97384, 83, 4, 91, "Input", CellTags->"S5.52.1"], Cell[2867702, 97390, 260, 8, 104, "Output"], Cell[2867965, 97400, 298, 10, 34, "Text"], Cell[2868266, 97412, 229, 7, 69, "Input"], Cell[2868498, 97421, 260, 8, 104, "Output"], Cell[2868761, 97431, 1047, 36, 83, "Text"], Cell[2869811, 97469, 555, 20, 42, "NumberedEquation", CellTags->"FormMcEl Pr(l-1|l)"], Cell[2870369, 97491, 585, 21, 42, "NumberedEquation", CellTags->"FormMcEl Pr(l+1|l)"], Cell[2870957, 97514, 1012, 39, 52, "NumberedEquation", CellTags->"FormMcEl Pr(l|l)"], Cell[2871972, 97555, 1803, 75, 110, "Example", CellTags->"ExamMcEl Golay"], Cell[2873778, 97632, 1657, 52, 146, "Input"], Cell[2875438, 97686, 327, 8, 50, "Print"], Cell[2875768, 97696, 329, 8, 51, "Print"], Cell[2876100, 97706, 329, 8, 50, "Print"], Cell[2876432, 97716, 37, 0, 32, "Print"], Cell[2876472, 97718, 329, 8, 51, "Print"], Cell[2876804, 97728, 327, 8, 51, "Print"], Cell[2877134, 97738, 193, 7, 34, "Text"], Cell[2877330, 97747, 767, 30, 115, "Theorem"], Cell[2878100, 97779, 524, 18, 67, "NumberedEquation", CellTags->"FormMcEl Na="], Cell[2878627, 97799, 603, 21, 72, "NumberedEquation", CellTags->"FormMcEl Nl="], Cell[2879233, 97822, 460, 16, 59, "Text"], Cell[2879696, 97840, 1672, 61, 111, "Text", CellTags->"FormMcEl Pr(l|l)"], Cell[2881371, 97903, 111, 1, 34, "Text"], Cell[2881485, 97906, 939, 34, 33, "DisplayFormula"], Cell[2882427, 97942, 670, 26, 34, "Text"], Cell[2883100, 97970, 116, 3, 34, "Text"], Cell[2883219, 97975, 323, 12, 36, "Text"], Cell[2883545, 97989, 1001, 38, 61, "Text"], Cell[2884549, 98029, 986, 31, 120, "Input"], Cell[2885538, 98062, 220, 5, 32, "Print"], Cell[2885761, 98069, 261, 7, 51, "Print"], Cell[2886025, 98078, 267, 7, 51, "Print"], Cell[2886295, 98087, 423, 16, 90, "Theorem", CellTags->"TheoMcEl #steps"], Cell[2886721, 98105, 905, 30, 100, "NumberedEquation"], Cell[2887629, 98137, 836, 28, 85, "Text"], Cell[2888468, 98167, 289, 10, 35, "DisplayFormula"], Cell[2888760, 98179, 933, 32, 85, "Text"], Cell[2889696, 98213, 592, 21, 76, "DisplayFormula"], Cell[2890291, 98236, 211, 7, 36, "Text"], Cell[2890505, 98245, 116, 3, 34, "Text"], Cell[2890624, 98250, 1247, 47, 83, "Text"], Cell[2891874, 98299, 776, 25, 166, "Input"], Cell[2892653, 98326, 108, 3, 44, "Output"], Cell[2892764, 98331, 419, 12, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2893220, 98348, 148, 8, 33, "Section", CellTags->"SectMcEl Niederr"], Cell[2893371, 98358, 503, 16, 59, "Text"], Cell[2893877, 98376, 2362, 89, 113, "Text"], Cell[2896242, 98467, 237, 7, 35, "Text"], Cell[2896482, 98476, 282, 11, 34, "NumberedEquation", CellTags->"FormMcEl H\[RawStar]=SHP"], Cell[2896767, 98489, 944, 38, 62, "Text"], Cell[2897714, 98529, 882, 31, 62, "Text"], Cell[2898599, 98562, 2176, 83, 86, "Text"], Cell[2900778, 98647, 3475, 109, 411, "DisplayFormula"], Cell[2904256, 98758, 91, 1, 62, "NumberedTable", CellTags->"TableMcEl Niederreiter"] }, Closed]], Cell[CellGroupData[{ Cell[2904384, 98764, 134, 8, 33, "Section", CellTags->"SectMcEl Problems"], Cell[2904521, 98774, 883, 35, 109, "Problem", CellTags->"ProbMcEl rank"], Cell[2905407, 98811, 708, 28, 80, "Problem"], Cell[2906118, 98841, 653, 25, 80, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[2906820, 98872, 112, 5, 38, "Chapter", CellTags->"Chap Knapsack"], Cell[CellGroupData[{ Cell[2906957, 98881, 148, 8, 47, "Section", CellTags->"SectKnap Knap System"], Cell[CellGroupData[{ Cell[2907130, 98893, 188, 11, 47, "Subsection", CellTags->"SubsKnap Knap Problem"], Cell[2907321, 98906, 684, 18, 108, "Text"], Cell[2908008, 98926, 698, 28, 91, "Definition", CellTags->"DefKnap knapsack"], Cell[2908709, 98956, 537, 17, 56, "NumberedEquation", CellTags->"FormKnap knapsack"], Cell[2909249, 98975, 351, 15, 68, "Definition", CounterIncrements->"None"], Cell[2909603, 98992, 349, 9, 59, "Text"], Cell[2909955, 99003, 457, 15, 59, "Text"], Cell[2910415, 99020, 1066, 37, 89, "Text"], Cell[2911484, 99059, 349, 12, 62, "Text"], Cell[2911836, 99073, 443, 18, 38, "Text", CellTags->"DefKnap superincreasing"], Cell[2912282, 99093, 282, 11, 38, "NumberedEquation"], Cell[2912567, 99106, 809, 28, 69, "Text"], Cell[2913379, 99136, 288, 11, 32, "DisplayFormula"], Cell[2913670, 99149, 574, 24, 36, "Text"], Cell[2914247, 99175, 547, 20, 35, "DisplayFormula"], Cell[2914797, 99197, 508, 17, 38, "Text"], Cell[2915308, 99216, 2419, 112, 272, "Theorem", CellTags->"AlgKnap solve superincr"], Cell[2917730, 99330, 3517, 136, 244, "Example", CellTags->"ExamKnap encryption"], Cell[2921250, 99468, 1509, 42, 146, "Input", CellTags->"InputKnap knap for superincr"], Cell[2922762, 99512, 352, 11, 95, "Input"], Cell[2923117, 99525, 116, 3, 44, "Output"], Cell[2923236, 99530, 44, 1, 34, "Text"], Cell[2923283, 99533, 49, 1, 69, "Input"], Cell[2923335, 99536, 31, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2923403, 99541, 186, 11, 33, "Subsection", CellTags->"SubsKnap Knap System"], Cell[CellGroupData[{ Cell[2923614, 99556, 92, 1, 63, "Subsubsection", CellTags->"SubsubsKnap setting up"], Cell[2923709, 99559, 316, 8, 59, "Text"], Cell[2924028, 99569, 672, 30, 40, "Text"], Cell[2924703, 99601, 292, 9, 37, "NumberedEquation", CellTags->"FormKnap M>sum"], Cell[2924998, 99612, 19, 0, 34, "Text"], Cell[2925020, 99614, 228, 9, 33, "NumberedEquation"], Cell[2925251, 99625, 112, 5, 34, "Text"], Cell[2925366, 99632, 496, 19, 33, "NumberedEquation", CellTags->"FormKnap u'=w.u"], Cell[2925865, 99653, 293, 11, 40, "Text"], Cell[2926161, 99666, 1656, 63, 96, "Text"], Cell[2927820, 99731, 616, 27, 41, "Text"], Cell[2928439, 99760, 2670, 97, 145, "Text"], Cell[2931112, 99859, 672, 23, 215, "Input"], Cell[2931787, 99884, 31, 0, 44, "Output"], Cell[2931821, 99886, 31, 0, 44, "Output"], Cell[2931855, 99888, 144, 4, 44, "Output"], Cell[2932002, 99894, 1030, 36, 92, "Text"], Cell[2933035, 99932, 260, 8, 69, "Input"], Cell[2933298, 99942, 129, 4, 44, "Output"], Cell[2933430, 99948, 215, 9, 38, "Text"], Cell[2933648, 99959, 200, 6, 95, "Input"], Cell[2933851, 99967, 28, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2933916, 99972, 68, 1, 37, "Subsubsection", CellTags->"SubsubsKnap encryp"], Cell[2933987, 99975, 895, 29, 92, "Text"], Cell[2934885, 100006, 368, 14, 36, "NumberedEquation", CellTags->"FormKnap encryption"], Cell[2935256, 100022, 1696, 61, 120, "Text"], Cell[2936955, 100085, 425, 14, 120, "Input"], Cell[2937383, 100101, 33, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2937453, 100106, 68, 1, 37, "Subsubsection", CellTags->"SubsubsKnap decryp"], Cell[2937524, 100109, 415, 14, 62, "Text"], Cell[2937942, 100125, 1125, 40, 52, "DisplayFormula"], Cell[2939070, 100167, 490, 18, 63, "Text"], Cell[2939563, 100187, 489, 18, 37, "NumberedEquation"], Cell[2940055, 100207, 855, 32, 93, "Text"], Cell[2940913, 100241, 1415, 55, 88, "Text"], Cell[2942331, 100298, 237, 8, 95, "Input"], Cell[2942571, 100308, 32, 0, 44, "Output"], Cell[2942606, 100310, 469, 16, 41, "Text"], Cell[2943078, 100328, 352, 11, 95, "Input"], Cell[2943433, 100341, 116, 3, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[2943586, 100349, 82, 1, 37, "Subsubsection", CellTags->"SubsubsKnap discussion"], Cell[2943671, 100352, 69, 0, 34, "Text"], Cell[2943743, 100354, 3892, 134, 356, "NumberedTable", CellTags->"TableKnap knapsack"], Cell[2947638, 100490, 306, 5, 83, "Text"], Cell[2947947, 100497, 502, 20, 40, "Text"], Cell[2948452, 100519, 479, 19, 37, "DisplayFormula"], Cell[2948934, 100540, 188, 8, 35, "Text"], Cell[2949125, 100550, 232, 9, 34, "DisplayFormula"], Cell[2949360, 100561, 145, 6, 34, "Text"], Cell[2949508, 100569, 1004, 35, 90, "Text"], Cell[2950515, 100606, 2349, 86, 145, "Text"], Cell[2952867, 100694, 134, 3, 34, "Text"], Cell[2953004, 100699, 1632, 63, 156, "Example"], Cell[2954639, 100764, 353, 12, 120, "Input"], Cell[2954995, 100778, 85, 2, 44, "Output"], Cell[2955083, 100782, 86, 2, 44, "Output"], Cell[2955172, 100786, 86, 2, 44, "Output"], Cell[2955261, 100790, 631, 25, 41, "Text"], Cell[2955895, 100817, 439, 17, 51, "DisplayFormula"], Cell[2956337, 100836, 697, 27, 59, "Text"], Cell[2957037, 100865, 251, 10, 31, "DisplayFormula"], Cell[2957291, 100877, 164, 4, 34, "Text"], Cell[2957458, 100883, 465, 15, 59, "Text"], Cell[2957926, 100900, 1195, 42, 117, "Text"], Cell[2959124, 100944, 104, 2, 31, "DisplayFormula"], Cell[2959231, 100948, 159, 3, 31, "DisplayFormula"], Cell[2959393, 100953, 205, 4, 59, "Text"], Cell[2959601, 100959, 888, 23, 132, "Text"] }, Closed]] }, Closed]], Cell[2960516, 100986, 236, 8, 31, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2960789, 100999, 218, 12, 33, "Section", CellTags->"SectKnap L3-attack"], Cell[CellGroupData[{ Cell[2961032, 101015, 181, 12, 47, "Subsection", CellTags->"SubsKnap L3 Intro"], Cell[2961216, 101029, 962, 31, 94, "Text"], Cell[2962181, 101062, 396, 6, 83, "Text"], Cell[2962580, 101070, 976, 35, 64, "Text"], Cell[2963559, 101107, 1229, 49, 147, "Definition", CellTags->"DefKnap density"], Cell[2964791, 101158, 1263, 52, 112, "Example"], Cell[2966057, 101212, 456, 15, 95, "Input"], Cell[2966516, 101229, 109, 3, 44, "Output"], Cell[2966628, 101234, 1167, 40, 86, "Text"], Cell[2967798, 101276, 319, 6, 83, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2968154, 101287, 180, 12, 33, "Subsection", CellTags->"SubsKnap L3 lattices"], Cell[2968337, 101301, 2897, 102, 208, "Definition", CellTags->"DefKnap lattice"], Cell[2971237, 101405, 1306, 43, 87, "Text", CellTags->"DefKnap basis"], Cell[2972546, 101450, 1498, 60, 148, "Example"], Cell[2974047, 101512, 10391, 130, 306, "Graphics"], Cell[2984441, 101644, 421, 17, 63, "NumberedFigure"], Cell[2984865, 101663, 397, 9, 60, "Text"], Cell[2985265, 101674, 1994, 69, 89, "Text", CellTags->"AlgKnap Gram-Schmidt"], Cell[2987262, 101745, 2256, 83, 171, "DisplayFormula"], Cell[2989521, 101830, 21, 0, 34, "Text"], Cell[2989545, 101832, 814, 31, 54, "DisplayFormula"], Cell[2990362, 101865, 1172, 49, 88, "Example"], Cell[2991537, 101916, 158, 6, 134, "Input", CellTags->"S5.53.1"], Cell[2991698, 101924, 83, 2, 44, "Output"], Cell[2991784, 101928, 194, 7, 63, "Output"], Cell[2991981, 101937, 195, 7, 63, "Output"], Cell[2992179, 101946, 782, 22, 85, "Text"], Cell[2992964, 101970, 617, 20, 95, "Input", CellTags->"S5.53.1"], Cell[2993584, 101992, 729, 30, 69, "Output"], Cell[2994316, 102024, 458, 14, 61, "Text"], Cell[2994777, 102040, 191, 4, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2995005, 102049, 192, 12, 33, "Subsection", CellTags->"SubsKnap L3 reduced basis"], Cell[2995200, 102063, 1047, 40, 40, "Text"], Cell[2996250, 102105, 3512, 133, 191, "Definition", CellTags->"DefKnap reduced"], Cell[2999765, 102240, 2787, 101, 119, "Text"], Cell[3002555, 102343, 924, 34, 39, "NumberedEquation"], Cell[3003482, 102379, 21, 0, 34, "Text"], Cell[3003506, 102381, 821, 30, 42, "NumberedEquation"], Cell[3004330, 102413, 1130, 37, 115, "Text"], Cell[3005463, 102452, 824, 28, 62, "Text"], Cell[3006290, 102482, 2183, 81, 121, "Theorem", CellTags->"TheoKnap complexity L3"], Cell[3008476, 102565, 1537, 55, 140, "Theorem"], Cell[3010016, 102622, 217, 7, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3010270, 102634, 261, 16, 33, "Subsection", CellTags->"SubsKnap L3 attack"], Cell[3010534, 102652, 547, 20, 40, "Text"], Cell[3011084, 102674, 598, 16, 88, "Text"], Cell[3011685, 102692, 517, 22, 40, "Text"], Cell[3012205, 102716, 96, 4, 59, "Text"], Cell[3012304, 102722, 1346, 50, 123, "NumberedEquation", CellTags->"FormKnap the basis vectors"], Cell[3013653, 102774, 337, 12, 36, "Text"], Cell[3013993, 102788, 229, 9, 38, "Text"], Cell[3014225, 102799, 805, 28, 35, "DisplayFormula"], Cell[3015033, 102829, 923, 33, 41, "Text"], Cell[3015959, 102864, 778, 29, 62, "Text"], Cell[3016740, 102895, 1716, 61, 122, "Text"], Cell[3018459, 102958, 1142, 43, 90, "Text"], Cell[3019604, 103003, 1961, 78, 152, "Example"], Cell[3021568, 103083, 1360, 43, 197, "Input"], Cell[3022931, 103128, 1017, 25, 249, "Output"], Cell[3023951, 103155, 808, 26, 61, "Text"], Cell[3024762, 103183, 237, 7, 69, "Input"], Cell[3025002, 103192, 2290, 59, 172, "Output"], Cell[3027295, 103253, 806, 27, 65, "Text"], Cell[3028104, 103282, 282, 9, 69, "Input"], Cell[3028389, 103293, 31, 0, 44, "Output"], Cell[3028423, 103295, 907, 29, 88, "Text"], Cell[3029333, 103326, 2786, 108, 319, "Theorem"], Cell[3032122, 103436, 469, 17, 87, "Text"], Cell[3032594, 103455, 460, 17, 46, "DisplayFormula"], Cell[3033057, 103474, 202, 7, 34, "Text"], Cell[3033262, 103483, 476, 18, 46, "DisplayFormula"], Cell[3033741, 103503, 249, 9, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3034027, 103517, 291, 16, 33, "Subsection", CellTags->"SubsKnap L3 reduction"], Cell[3034321, 103535, 822, 29, 38, "Text"], Cell[3035146, 103566, 1250, 49, 70, "Text"], Cell[3036399, 103617, 677, 26, 57, "Text"], Cell[3037079, 103645, 163, 6, 36, "Text"], Cell[3037245, 103653, 1592, 67, 222, "Text"], Cell[3038840, 103722, 146, 6, 36, "Text"], Cell[3038989, 103730, 3661, 152, 416, "Text"] }, Open ]], Cell[3042665, 103885, 882, 29, 61, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3043584, 103919, 146, 8, 33, "Section", CellTags->"SectKnap ChorR"], Cell[3043733, 103929, 699, 14, 132, "Text"], Cell[3044435, 103945, 421, 13, 59, "Text"], Cell[CellGroupData[{ Cell[3044881, 103962, 130, 2, 63, "Subsubsection", CellTags->"SubsubsKnap CR setting it up"], Cell[3045014, 103966, 2290, 85, 164, "Text"], Cell[3047307, 104053, 991, 37, 61, "Text"], Cell[3048301, 104092, 698, 24, 65, "Text"], Cell[3049002, 104118, 364, 13, 34, "NumberedEquation", CellTags->"FormKnap CR a^Ui=x+i"], Cell[3049369, 104133, 58, 0, 34, "Text"], Cell[3049430, 104135, 638, 24, 60, "Text"], Cell[3050071, 104161, 417, 17, 34, "NumberedEquation", CellTags->"FormKnap u=U+D"], Cell[3050491, 104180, 401, 15, 40, "Text"], Cell[3050895, 104197, 399, 15, 36, "Text"], Cell[3051297, 104214, 1647, 59, 114, "Example", CellTags->"ExamKnap ChorR"], Cell[3052947, 104275, 73, 2, 69, "Input", CellID->30826], Cell[3053023, 104279, 336, 9, 71, "Input"], Cell[3053362, 104290, 437, 9, 46, "Output"], Cell[3053802, 104301, 1696, 58, 121, "Text"], Cell[CellGroupData[{ Cell[3055523, 104363, 696, 21, 120, "Input"], Cell[3056222, 104386, 297, 9, 44, "Output"], Cell[CellGroupData[{ Cell[3056544, 104399, 409, 6, 99, "Input"], Cell[3056956, 104407, 275, 9, 44, "Output"], Cell[3057234, 104418, 275, 9, 44, "Output"] }, Open ]] }, Open ]], Cell[3057536, 104431, 944, 33, 64, "Text"], Cell[3058483, 104466, 508, 16, 69, "Input"], Cell[3058994, 104484, 72, 1, 44, "Output"], Cell[3059069, 104487, 464, 16, 36, "Text"], Cell[3059536, 104505, 74, 2, 71, "Input"], Cell[3059613, 104509, 403, 11, 44, "Output"], Cell[3060019, 104522, 843, 32, 64, "Text"], Cell[3060865, 104556, 376, 12, 69, "Input"], Cell[3061244, 104570, 186, 5, 44, "Output"], Cell[3061433, 104577, 366, 11, 34, "Text"], Cell[3061802, 104590, 590, 21, 61, "Text"], Cell[3062395, 104613, 286, 8, 70, "Input"], Cell[3062684, 104623, 1341, 52, 44, "Output"], Cell[3064028, 104677, 1737, 48, 60, "Text"], Cell[3065768, 104727, 74, 2, 69, "Input", CellID->24456], Cell[3065845, 104731, 245, 7, 95, "Input"], Cell[3066093, 104740, 74, 1, 44, "Output"], Cell[3066170, 104743, 170, 4, 44, "Output"], Cell[3066343, 104749, 887, 30, 59, "Text"], Cell[3067233, 104781, 589, 22, 37, "Text"], Cell[3067825, 104805, 431, 14, 95, "Input"], Cell[3068259, 104821, 142, 4, 44, "Output"], Cell[3068404, 104827, 139, 4, 44, "Output"], Cell[3068546, 104833, 475, 19, 41, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3069058, 104857, 112, 2, 37, "Subsubsection", CellTags->"SubsubsKnap CR encryp"], Cell[3069173, 104861, 1499, 56, 137, "Text"], Cell[3070675, 104919, 290, 11, 40, "NumberedEquation", CellTags->"FormKnap Sum mi=k"], Cell[3070968, 104932, 32, 0, 34, "Text"], Cell[3071003, 104934, 418, 15, 44, "NumberedEquation", CellTags->"FormKnap CR encr"], Cell[3071424, 104951, 1484, 57, 89, "Text"], Cell[3072911, 105010, 1091, 39, 116, "Text"], Cell[3074005, 105051, 246, 8, 69, "Input"], Cell[3074254, 105061, 30, 0, 44, "Output"], Cell[3074287, 105063, 761, 27, 80, "Text"], Cell[3075051, 105092, 584, 21, 52, "DisplayFormula"], Cell[3075638, 105115, 2189, 86, 129, "Text"], Cell[3077830, 105203, 2584, 114, 312, "Theorem", CellTags->"AlgKnap conversion"], Cell[3080417, 105319, 1531, 62, 158, "Example"], Cell[3081951, 105383, 1154, 38, 222, "Input"], Cell[3083108, 105423, 126, 3, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[3083271, 105431, 112, 2, 37, "Subsubsection", CellTags->"SubsubsKnap CR decryp"], Cell[3083386, 105435, 1130, 45, 74, "Text"], Cell[3084519, 105482, 2477, 83, 106, "DisplayFormula"], Cell[3086999, 105567, 31, 0, 34, "Text"], Cell[3087033, 105569, 554, 20, 40, "DisplayFormula"], Cell[3087590, 105591, 1136, 41, 94, "Text"], Cell[3088729, 105634, 411, 15, 40, "DisplayFormula"], Cell[3089143, 105651, 512, 21, 36, "Text"], Cell[3089658, 105674, 87, 2, 34, "Text"], Cell[3089748, 105678, 1959, 83, 203, "Theorem", CellTags->"AlgKnap decrypt ChorR"], Cell[3091710, 105763, 2273, 90, 110, "Text"], Cell[3093986, 105855, 182, 6, 69, "Input"], Cell[3094171, 105863, 71, 1, 44, "Output"], Cell[3094245, 105866, 346, 10, 34, "Text"], Cell[3094594, 105878, 183, 5, 101, "Input"], Cell[3094780, 105885, 182, 7, 44, "Output"], Cell[3094965, 105894, 108, 3, 46, "Output"], Cell[3095076, 105899, 410, 15, 36, "Text"], Cell[3095489, 105916, 139, 4, 69, "Input"], Cell[3095631, 105922, 165, 5, 46, "Output"], Cell[3095799, 105929, 202, 6, 34, "Text"], Cell[3096004, 105937, 139, 4, 69, "Input"], Cell[3096146, 105943, 230, 8, 44, "Output"], Cell[3096379, 105953, 282, 8, 34, "Text"], Cell[3096664, 105963, 72, 1, 69, "Input"], Cell[3096739, 105966, 126, 3, 44, "Output"], Cell[3096868, 105971, 405, 15, 34, "Text"], Cell[3097276, 105988, 95, 2, 69, "Input"], Cell[3097374, 105992, 168, 4, 44, "Output"], Cell[3097545, 105998, 1266, 43, 115, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3098860, 106047, 134, 8, 33, "Section", CellTags->"Sectknap Problems"], Cell[3098997, 106057, 496, 19, 66, "Problem"], Cell[3099496, 106078, 371, 13, 58, "Problem"], Cell[3099870, 106093, 761, 27, 101, "Problem"], Cell[3100634, 106122, 1598, 64, 129, "Problem"], Cell[3102235, 106188, 1115, 44, 106, "Problem"], Cell[3103353, 106234, 582, 23, 58, "Problem"], Cell[3103938, 106259, 706, 30, 59, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3104693, 106295, 124, 5, 38, "Chapter", CellTags->"Chap Auth"], Cell[CellGroupData[{ Cell[3104842, 106304, 142, 8, 47, "Section", CellTags->"SectAuth Introduction"], Cell[3104987, 106314, 860, 20, 132, "Text"], Cell[3105850, 106336, 116, 3, 34, "Text"], Cell[3105969, 106341, 362, 7, 156, "Text"], Cell[3106334, 106350, 659, 18, 83, "Text", CellTags->"DefAuth comp secure"], Cell[3106996, 106370, 794, 26, 83, "Text", CellTags->"DefAuth Uncond secure"], Cell[3107793, 106398, 1345, 23, 278, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3109175, 106426, 146, 8, 33, "Section", CellTags->"SectAuth Hash"], Cell[3109324, 106436, 1670, 53, 182, "Text", CellTags->"DefAuth hash"], Cell[3110997, 106491, 143, 3, 34, "Text"], Cell[3111143, 106496, 691, 25, 59, "Text", CellTags->"DefAuth one-way"], Cell[3111837, 106523, 837, 32, 59, "Text", CellTags->"DefAuth weak col res"], Cell[3112677, 106557, 795, 31, 59, "Text", CellTags->"DefAuth strong col res"], Cell[3113475, 106590, 721, 21, 108, "Text"], Cell[3114199, 106613, 1404, 56, 114, "Example"], Cell[3115606, 106671, 1920, 72, 154, "Example"], Cell[3117529, 106745, 729, 24, 190, "Input"], Cell[3118261, 106771, 30, 0, 44, "Output"], Cell[3118294, 106773, 380, 11, 59, "Text"], Cell[3118677, 106786, 229, 7, 95, "Input"], Cell[3118909, 106795, 115, 3, 44, "Output"], Cell[3119027, 106800, 30, 0, 44, "Output"], Cell[3119060, 106802, 1211, 39, 108, "Text", CellTags->"DefAuth MAC"], Cell[3120274, 106843, 1879, 70, 174, "Example"], Cell[3122156, 106915, 2005, 85, 197, "Theorem", CellTags->"AlgAuth MAC on DES"], Cell[3124164, 107002, 343, 9, 59, "Text"], Cell[3124510, 107013, 150, 3, 34, "Text"], Cell[3124663, 107018, 364, 6, 83, "Text"], Cell[3125030, 107026, 308, 12, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3125375, 107043, 171, 8, 33, "Section", CellTags->"SectAuth Auth Codes"], Cell[CellGroupData[{ Cell[3125571, 107055, 181, 11, 47, "Subsection", CellTags->"SubsAuth notions"], Cell[3125755, 107068, 374, 6, 83, "Text"], Cell[3126132, 107076, 419, 7, 83, "Text"], Cell[3126554, 107085, 277, 5, 83, "Text"], Cell[3126834, 107092, 589, 21, 110, "Example", CellTags->"ExamAuth 1 bit"], Cell[3127426, 107115, 500, 16, 200, "NumberedTable", CellTags->"TableAuth 1 bit"], Cell[3127929, 107133, 96, 1, 34, "Text"], Cell[3128028, 107136, 383, 11, 59, "Text"], Cell[3128414, 107149, 542, 9, 108, "Text"], Cell[3128959, 107160, 186, 4, 59, "Text"], Cell[3129148, 107166, 271, 5, 59, "Text"], Cell[3129422, 107173, 1066, 42, 91, "Definition", CellTags->"DefAuth auth code"], Cell[3130491, 107217, 544, 19, 57, "NumberedEquation", CellTags->"FormAuth one-to-one"], Cell[3131038, 107238, 317, 12, 67, "Definition", CounterIncrements->"None"], Cell[3131358, 107252, 1293, 48, 85, "Text", CellTags->"DefAuth scheme"], Cell[3132654, 107302, 774, 30, 59, "Text"], Cell[3133431, 107334, 186, 6, 36, "Text"], Cell[3133620, 107342, 973, 31, 86, "Text"], Cell[3134596, 107375, 1397, 57, 114, "Definition", CellTags->"DefAuth A-code"], Cell[3135996, 107434, 525, 19, 36, "Text"], Cell[3136524, 107455, 510, 15, 59, "Text"], Cell[3137037, 107472, 948, 28, 109, "Text", CellTags->"DefAuth imp attack"], Cell[3137988, 107502, 650, 15, 83, "Text", CellTags->"DefAuth subs attack"], Cell[3138641, 107519, 233, 4, 59, "Text"], Cell[3138877, 107525, 764, 20, 109, "Text"], Cell[3139644, 107547, 369, 10, 59, "Text"], Cell[3140016, 107559, 494, 20, 90, "Definition", CellTags->"DefAuth P_I"], Cell[3140513, 107581, 712, 22, 74, "NumberedEquation"], Cell[3141228, 107605, 427, 15, 59, "Text"], Cell[3141658, 107622, 701, 18, 85, "Text"], Cell[3142362, 107642, 826, 23, 108, "Text"], Cell[3143191, 107667, 510, 21, 92, "Definition", CellTags->"DefAuth P_S"], Cell[3143704, 107690, 1335, 40, 78, "NumberedEquation", CellTags->"FormAuth P_S"], Cell[3145042, 107732, 435, 14, 60, "Text"], Cell[3145480, 107748, 233, 7, 34, "Text", CellTags->"DefAuth deception"], Cell[3145716, 107757, 339, 14, 33, "NumberedEquation", CellTags->"DefAuth P_D"], Cell[3146058, 107773, 1645, 51, 134, "Text"], Cell[3147706, 107826, 845, 32, 145, "Theorem", CellTags->"TheoAuth PI>M/C"], Cell[3148554, 107860, 1475, 47, 109, "Text"], Cell[3150032, 107909, 906, 34, 147, "Theorem", CellTags->"TheoAuth PS>(M-1)/(C-1)"], Cell[3150941, 107945, 754, 25, 85, "Text"], Cell[3151698, 107972, 1331, 51, 113, "Theorem"], Cell[3153032, 108025, 445, 16, 57, "NumberedEquation"], Cell[3153480, 108043, 445, 16, 59, "NumberedEquation"], Cell[3153928, 108061, 365, 12, 69, "NumberedEquation"], Cell[3154296, 108075, 263, 9, 34, "Text", CellTags->"DefAuth square root"], Cell[3154562, 108086, 567, 23, 140, "Theorem", CellTags->"TheoAuth M<=K+1"], Cell[3155132, 108111, 464, 19, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3155633, 108135, 198, 11, 33, "Subsection", CellTags->"SubsAuth PG constr"], Cell[3155834, 108148, 306, 9, 59, "Text"], Cell[CellGroupData[{ Cell[3156165, 108161, 83, 1, 63, "Subsubsection", CellTags->"SubsubsAuth PG def"], Cell[3156251, 108164, 368, 6, 83, "Text"], Cell[3156622, 108172, 1125, 33, 83, "Text", CellTags->"DefAuth point and line"], Cell[3157750, 108207, 913, 33, 176, "Definition", CellTags->"DefAuth Proj Plane"], Cell[3158666, 108242, 241, 4, 59, "Text"], Cell[3158910, 108248, 4331, 139, 235, 1147, 83, "GraphicsData", "PostScript", \ "Graphics"], Cell[3163244, 108389, 1233, 50, 177, "Theorem", CellTags->"DefAuth order PG2"], Cell[3164480, 108441, 1457, 44, 184, "Text"], Cell[3165940, 108487, 1611, 53, 112, "Text"], Cell[3167554, 108542, 11432, 143, 279, "Graphics"], Cell[3178989, 108687, 1187, 41, 88, "Text"], Cell[3180179, 108730, 771, 27, 60, "Text"], Cell[3180953, 108759, 590, 21, 59, "Text"], Cell[3181546, 108782, 1371, 45, 109, "Text"], Cell[3182920, 108829, 1656, 58, 133, "Text"], Cell[3184579, 108889, 116, 3, 34, "Text"], Cell[3184698, 108894, 870, 36, 110, "Example"], Cell[3185571, 108932, 35520, 1284, 281, 29597, 1184, "GraphicsData", \ "PostScript", "Graphics"], Cell[3221094, 110218, 214, 5, 59, "Text"], Cell[3221311, 110225, 1840, 72, 103, "DisplayFormula"], Cell[3223154, 110299, 194, 7, 34, "Text", CellTags->"DefAuth Fano"], Cell[3223351, 110308, 554, 18, 59, "Text", CellTags->"DefAuth incid matr"], Cell[3223908, 110328, 467, 21, 52, "DisplayFormula"], Cell[3224378, 110351, 113, 3, 34, "Text"], Cell[3224494, 110356, 415, 11, 191, "Input"], Cell[3224912, 110369, 313, 10, 34, "Text"], Cell[3225228, 110381, 1218, 49, 118, "DisplayFormula"], Cell[3226449, 110432, 65, 0, 34, "Text"], Cell[3226517, 110434, 338, 14, 33, "NumberedEquation", CellTags->"FormAuth A.A^T"], Cell[3226858, 110450, 510, 20, 40, "Text"], Cell[3227371, 110472, 352, 12, 34, "Text"], Cell[3227726, 110486, 232, 6, 95, "Input"], Cell[3227961, 110494, 386, 11, 166, "Output"], Cell[3228350, 110507, 386, 11, 166, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[3228773, 110523, 105, 1, 37, "Subsubsection", CellTags->"SubsubsAuth PG constr"], Cell[3228881, 110526, 569, 18, 60, "Text"], Cell[3229453, 110546, 1440, 59, 63, "Text"], Cell[3230896, 110607, 310, 12, 34, "Text"], Cell[3231209, 110621, 356, 13, 33, "NumberedEquation", CellTags->"FormAuth line"], Cell[3231568, 110636, 829, 32, 64, "Text"], Cell[3232400, 110670, 432, 17, 36, "Text"], Cell[3232835, 110689, 724, 26, 33, "NumberedEquation", CellTags->"FormAuth plane"], Cell[3233562, 110717, 1530, 56, 65, "Text"], Cell[3235095, 110775, 1049, 40, 64, "Text"], Cell[3236147, 110817, 2399, 87, 94, "Text"], Cell[3238549, 110906, 1134, 45, 114, "Theorem", CellTags->"TheoAuth PG constr"], Cell[3239686, 110953, 462, 17, 85, "Text"], Cell[3240151, 110972, 259, 9, 59, "Text"], Cell[3240413, 110983, 1174, 42, 109, "Text"], Cell[3241590, 111027, 1852, 67, 111, "Text"], Cell[3243445, 111096, 816, 27, 84, "Text"], Cell[3244264, 111125, 116, 3, 34, "Text"], Cell[3244383, 111130, 919, 33, 64, "Text"], Cell[3245305, 111165, 2865, 99, 171, "Text"], Cell[3248173, 111266, 1161, 45, 111, "Example", CellTags->"ExamAuth PG2-3"], Cell[3249337, 111313, 87, 2, 69, "Input"], Cell[3249427, 111317, 256, 8, 69, "Input"], Cell[3249686, 111327, 198, 5, 46, "Output"], Cell[3249887, 111334, 889, 32, 65, "Text"], Cell[3250779, 111368, 439, 15, 149, "Input"], Cell[3251221, 111385, 182, 7, 44, "Output"], Cell[3251406, 111394, 182, 7, 44, "Output"], Cell[3251591, 111403, 1264, 46, 94, "Text"], Cell[3252858, 111451, 198, 6, 74, "Input"], Cell[3253059, 111459, 181, 7, 32, "Print"], Cell[3253243, 111468, 181, 7, 32, "Print"], Cell[3253427, 111477, 181, 7, 32, "Print"], Cell[3253611, 111486, 181, 7, 32, "Print"], Cell[3253795, 111495, 181, 7, 32, "Print"], Cell[3253979, 111504, 181, 7, 32, "Print"], Cell[3254163, 111513, 181, 7, 32, "Print"], Cell[3254347, 111522, 181, 7, 32, "Print"], Cell[3254531, 111531, 181, 7, 32, "Print"], Cell[3254715, 111540, 181, 7, 32, "Print"], Cell[3254899, 111549, 181, 7, 32, "Print"], Cell[3255083, 111558, 181, 7, 32, "Print"], Cell[3255267, 111567, 181, 7, 32, "Print"], Cell[3255451, 111576, 1320, 49, 62, "Text"], Cell[3256774, 111627, 458, 16, 124, "Input"], Cell[3257235, 111645, 83, 2, 44, "Output"], Cell[3257321, 111649, 83, 2, 44, "Output"], Cell[3257407, 111653, 32, 0, 44, "Output"], Cell[3257442, 111655, 251, 8, 34, "Text"], Cell[3257696, 111665, 811, 25, 100, "Input"], Cell[3258510, 111692, 1028, 17, 291, "Output"], Cell[3259541, 111711, 373, 15, 34, "Text"], Cell[3259917, 111728, 123, 3, 69, "Input"], Cell[3260043, 111733, 1028, 17, 291, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[3261108, 111755, 101, 1, 37, "Subsubsection", CellTags->"SubsubsAuth PG A-code"], Cell[3261212, 111758, 1944, 74, 156, "Definition", CellTags->"DefAuth PG AC"], Cell[3263159, 111834, 290, 5, 59, "Text"], Cell[3263452, 111841, 327, 9, 60, "Text"], Cell[3263782, 111852, 147, 3, 34, "Text"], Cell[3263932, 111857, 1136, 44, 231, "Theorem", CellTags->"TheoAuth PG-AC"], Cell[3265071, 111903, 387, 9, 59, "Text"], Cell[3265461, 111914, 6942, 199, 261, "Text"], Cell[3272406, 112115, 285, 9, 59, "Text"], Cell[3272694, 112126, 729, 22, 83, "Text"], Cell[3273426, 112150, 382, 14, 44, "DisplayFormula"], Cell[3273811, 112166, 1042, 28, 110, "Text"], Cell[3274856, 112196, 208, 8, 42, "DisplayFormula"], Cell[3275067, 112206, 116, 3, 34, "Text"], Cell[3275186, 112211, 1120, 43, 70, "Text"], Cell[3276309, 112256, 491, 13, 83, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3276849, 112275, 191, 11, 33, "Subsection", CellTags->"SubsAuth OA AC"], Cell[3277043, 112288, 1066, 43, 138, "Definition", CellTags->"DefAuth OA"], Cell[3278112, 112333, 197, 6, 34, "Text"], Cell[3278312, 112341, 608, 27, 86, "Example", CellTags->"ExamAuth OA4-5-1"], Cell[3278923, 112370, 584, 14, 149, "Input"], Cell[3279510, 112386, 108, 3, 34, "Text"], Cell[3279621, 112391, 2010, 78, 183, "Theorem"], Cell[3281634, 112471, 227, 8, 34, "Text"], Cell[3281864, 112481, 318, 10, 34, "Text"], Cell[3282185, 112493, 406, 9, 59, "Text"], Cell[3282594, 112504, 116, 3, 34, "Text"], Cell[3282713, 112509, 384, 13, 59, "Text"], Cell[3283100, 112524, 206, 7, 69, "Input"], Cell[3283309, 112533, 28, 0, 44, "Output"], Cell[3283340, 112535, 626, 20, 59, "Text"], Cell[3283969, 112557, 202, 6, 69, "Input"], Cell[3284174, 112565, 95, 2, 44, "Output"], Cell[3284272, 112569, 509, 15, 59, "Text"], Cell[3284784, 112586, 286, 8, 69, "Input"], Cell[3285073, 112596, 227, 9, 125, "Output"], Cell[3285303, 112607, 1105, 35, 110, "Text"], Cell[3286411, 112644, 1718, 63, 122, "Text"], Cell[3288132, 112709, 1313, 53, 66, "Text"], Cell[3289448, 112764, 1084, 45, 86, "Example"], Cell[3290535, 112811, 1101, 19, 315, "Input"], Cell[3291639, 112832, 113, 3, 34, "Text"], Cell[3291755, 112837, 632, 21, 69, "Input"], Cell[3292390, 112860, 357, 11, 34, "Text"], Cell[3292750, 112873, 445, 13, 95, "Input"], Cell[3293198, 112888, 1028, 17, 291, "Output"], Cell[3294229, 112907, 649, 24, 35, "Text"], Cell[3294881, 112933, 666, 18, 146, "Input"], Cell[3295550, 112953, 1028, 17, 291, "Output"], Cell[3296581, 112972, 1696, 54, 108, "Text"], Cell[3298280, 113028, 558, 21, 34, "Text"], Cell[3298841, 113051, 1954, 61, 222, "Input"], Cell[3300798, 113114, 300, 8, 104, "Output"], Cell[3301101, 113124, 969, 39, 61, "Text"], Cell[3302073, 113165, 324, 9, 129, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[3302434, 113179, 196, 11, 33, "Subsection", CellTags->"SubsAuth EC AC"], Cell[3302633, 113192, 468, 13, 59, "Text"], Cell[3303104, 113207, 1584, 64, 85, "Text", CellTags->"DefAuth V(n q)"], Cell[3304691, 113273, 124, 5, 34, "Text"], Cell[3304818, 113280, 673, 26, 33, "NumberedEquation", CellTags->"FormAuth c+l1 in C"], Cell[3305494, 113308, 178, 7, 34, "Text"], Cell[3305675, 113317, 282, 9, 36, "Text"], Cell[3305960, 113328, 123, 5, 34, "Text"], Cell[3306086, 113335, 986, 36, 33, "NumberedEquation", CellTags->"FormAuth c~c'"], Cell[3307075, 113373, 1185, 44, 60, "Text"], Cell[3308263, 113419, 1377, 47, 112, "Text"], Cell[3309643, 113468, 681, 30, 86, "Example", CellTags->"ExamAuth Hamming"], Cell[3310327, 113500, 276, 8, 129, "Input"], Cell[3310606, 113510, 846, 29, 83, "Text"], Cell[3311455, 113541, 251, 8, 95, "Input"], Cell[3311709, 113551, 126, 3, 44, "Output"], Cell[3311838, 113556, 918, 35, 83, "Text"], Cell[3312759, 113593, 994, 37, 61, "Text"], Cell[3313756, 113632, 680, 28, 36, "Text"], Cell[3314439, 113662, 290, 11, 33, "NumberedEquation"], Cell[3314732, 113675, 169, 6, 36, "Text"], Cell[3314904, 113683, 1860, 69, 156, "Theorem", CellTags->"TheoAuth EC=>A"], Cell[3316767, 113754, 611, 22, 57, "NumberedEquation"], Cell[3317381, 113778, 525, 19, 57, "NumberedEquation", CellTags->"FormAuth P_I in Joh"], Cell[3317909, 113799, 641, 25, 86, "Text"], Cell[3318553, 113826, 205, 5, 59, "Text"], Cell[3318761, 113833, 1667, 56, 111, "Text"], Cell[3320431, 113891, 3077, 111, 209, "Text"], Cell[3323511, 114004, 2529, 88, 164, "DisplayFormula"], Cell[3326043, 114094, 893, 35, 34, "Text"], Cell[3326939, 114131, 116, 3, 34, "Text"], Cell[3327058, 114136, 957, 32, 83, "Text"], Cell[3328018, 114170, 318, 10, 120, "Input"], Cell[3328339, 114182, 93, 2, 44, "Output"], Cell[3328435, 114186, 126, 3, 44, "Output"], Cell[3328564, 114191, 114, 3, 34, "Text"], Cell[3328681, 114196, 662, 23, 61, "Text"], Cell[3329346, 114221, 331, 12, 95, "Input"], Cell[3329680, 114235, 73, 2, 44, "Output"], Cell[3329756, 114239, 1422, 50, 60, "Text"], Cell[3331181, 114291, 459, 16, 69, "Input"], Cell[3331643, 114309, 466, 16, 44, "Output"], Cell[3332112, 114327, 273, 10, 34, "Text"], Cell[3332388, 114339, 436, 16, 120, "Input"], Cell[3332827, 114357, 126, 3, 44, "Output"], Cell[3332956, 114362, 948, 33, 83, "Text"], Cell[3333907, 114397, 663, 23, 120, "Input"], Cell[3334573, 114422, 466, 16, 44, "Output"], Cell[3335042, 114440, 28, 0, 44, "Output"], Cell[3335073, 114442, 1295, 54, 111, "Example", CellTags->"ExamAuth RS-1"], Cell[3336371, 114498, 543, 18, 34, "DisplayFormula"], Cell[3336917, 114518, 360, 15, 33, "DisplayFormula"], Cell[3337280, 114535, 315, 8, 60, "Text"], Cell[3337598, 114545, 543, 17, 60, "Text"], Cell[3338144, 114564, 220, 8, 34, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3338413, 114578, 134, 8, 33, "Section", CellTags->"SectAuth Problems"], Cell[3338550, 114588, 511, 19, 88, "Problem"], Cell[3339064, 114609, 437, 18, 58, "Problem"], Cell[3339504, 114629, 1416, 52, 110, "Problem"], Cell[3340923, 114683, 585, 21, 80, "Problem"], Cell[3341511, 114706, 701, 25, 80, "Problem"], Cell[3342215, 114733, 611, 25, 58, "Problem"], Cell[3342829, 114760, 715, 30, 58, "Problem"], Cell[3343547, 114792, 620, 26, 64, "Problem"], Cell[3344170, 114820, 482, 10, 162, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3344701, 114836, 120, 5, 38, "Chapter", CellTags->"Chap Zero Knowledge"], Cell[3344824, 114843, 833, 20, 108, "Text", CellTags->"DefProt protocol"], Cell[3345660, 114865, 939, 16, 181, "Text", CellTags->"DefProt zero-know"], Cell[CellGroupData[{ Cell[3346624, 114885, 156, 8, 47, "Section", CellTags->"SectZero Zero Knowledge"], Cell[3346783, 114895, 1510, 45, 157, "Text"], Cell[3348296, 114942, 140, 3, 34, "Text"], Cell[3348439, 114947, 223, 7, 33, "NumberedEquation"], Cell[3348665, 114956, 632, 21, 85, "Text"], Cell[3349300, 114979, 522, 16, 59, "Text"], Cell[3349825, 114997, 94, 2, 34, "Text"], Cell[3349922, 115001, 3281, 116, 456, "NumberedFigure", CellTags->"FigProt Fiat-Shamir"], Cell[3353206, 115119, 382, 10, 59, "Text"], Cell[3353591, 115131, 156, 5, 34, "Text"], Cell[3353750, 115138, 196, 6, 37, "NumberedEquation"], Cell[3353949, 115146, 327, 12, 34, "Text", CellTags->"DefProt witness"], Cell[3354279, 115160, 357, 14, 34, "Text", CellTags->"DefProt challenge"], Cell[3354639, 115176, 228, 9, 34, "Text", CellTags->"DefProt response"], Cell[3354870, 115187, 1565, 58, 109, "Text"], Cell[3356438, 115247, 412, 15, 34, "Text"], Cell[3356853, 115264, 296, 12, 33, "NumberedEquation"], Cell[3357152, 115278, 640, 22, 59, "Text"], Cell[3357795, 115302, 2145, 75, 174, "Text"], Cell[3359943, 115379, 1008, 30, 109, "Text"], Cell[3360954, 115411, 490, 18, 59, "Text"], Cell[3361447, 115431, 479, 8, 108, "Text"], Cell[3361929, 115441, 292, 5, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3362258, 115451, 158, 8, 33, "Section", CellTags->"SectZero Schnorr"], Cell[3362419, 115461, 1820, 64, 115, "Text"], Cell[3364242, 115527, 2158, 81, 139, "Example"], Cell[CellGroupData[{ Cell[3366425, 115612, 392, 12, 173, "Input"], Cell[3366820, 115626, 75, 1, 44, "Output"], Cell[3366898, 115629, 77, 1, 44, "Output"], Cell[3366978, 115632, 73, 1, 44, "Output"], Cell[3367054, 115635, 77, 1, 44, "Output"], Cell[3367134, 115638, 75, 1, 44, "Output"] }, Open ]], Cell[3367224, 115642, 1772, 63, 135, "Text"], Cell[3368999, 115707, 671, 27, 61, "Text"], Cell[3369673, 115736, 238, 7, 95, "Input"], Cell[3369914, 115745, 31, 0, 44, "Output"], Cell[3369948, 115747, 2733, 101, 136, "Text"], Cell[3372684, 115850, 3876, 139, 476, "NumberedFigure", CellTags->"FigProt Schnorr"], Cell[3376563, 115991, 619, 21, 59, "Text"], Cell[3377185, 116014, 1003, 31, 146, "Input"], Cell[3378191, 116047, 166, 4, 32, "Print"], Cell[3378360, 116053, 170, 4, 32, "Print"], Cell[3378533, 116059, 168, 4, 32, "Print"], Cell[3378704, 116065, 31, 0, 44, "Output"], Cell[3378738, 116067, 2947, 113, 183, "Text"], Cell[3381688, 116182, 201, 6, 59, "Text"], Cell[3381892, 116190, 744, 23, 120, "Input"], Cell[3382639, 116215, 184, 4, 32, "Print"], Cell[3382826, 116221, 182, 4, 32, "Print"], Cell[3383011, 116227, 31, 0, 44, "Output"], Cell[3383045, 116229, 494, 21, 34, "Text"], Cell[3383542, 116252, 278, 9, 69, "Input"], Cell[3383823, 116263, 32, 0, 44, "Output"], Cell[3383858, 116265, 192, 7, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3384087, 116277, 133, 8, 33, "Section", CellTags->"SectZero Problem"], Cell[3384223, 116287, 524, 23, 67, "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3384796, 116316, 108, 5, 38, "Chapter", CellTags->"Chap Secr"], Cell[CellGroupData[{ Cell[3384929, 116325, 142, 8, 47, "Section", CellTags->"SectSecr Introduction"], Cell[3385074, 116335, 263, 8, 34, "Text"], Cell[3385340, 116345, 400, 5, 74, "DisplayFormula"], Cell[3385743, 116352, 921, 26, 125, "Text"], Cell[3386667, 116380, 180, 5, 95, "Input"], Cell[3386850, 116387, 30, 0, 44, "Output"], Cell[3386883, 116389, 30, 0, 44, "Output"], Cell[3386916, 116391, 474, 7, 108, "Text"], Cell[3387393, 116400, 521, 15, 59, "Text"], Cell[3387917, 116417, 1708, 63, 176, "Definition", CellTags->"DefSecret access struc"], Cell[3389628, 116482, 515, 15, 59, "Text"], Cell[3390146, 116499, 878, 28, 83, "Text", CellTags->"DefSecret minimal el"], Cell[3391027, 116529, 409, 18, 34, "Text", CellTags->"DefSecret perfect SSS"], Cell[3391439, 116549, 2072, 73, 244, "Definition", CellTags->"DefSecret SSS"], Cell[3393514, 116624, 630, 23, 60, "Text", CellTags->"DefSecret share"], Cell[3394147, 116649, 875, 33, 64, "Text"], Cell[3395025, 116684, 778, 24, 62, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3395840, 116713, 142, 8, 33, "Section", CellTags->"SectSecr Schemes"], Cell[3395985, 116723, 1197, 42, 86, "Text", CellTags->"DefSecret Threshold"], Cell[3397185, 116767, 345, 15, 35, "Text", CellTags->"PropThresh TS1"], Cell[3397533, 116784, 477, 17, 60, "Text", CellTags->"PropThresh TS2"], Cell[3398013, 116803, 1219, 44, 88, "Text"], Cell[3399235, 116849, 414, 11, 59, "Text"], Cell[3399652, 116862, 640, 25, 93, "Theorem", CellTags->"ConstrThresh Shamir"], Cell[3400295, 116889, 759, 26, 62, "Text", CounterIncrements->"NumberedEquation", CellTags->"FormThresh Secret Function"], Cell[3401057, 116917, 924, 34, 95, "Theorem", CounterIncrements->"None"], Cell[3401984, 116953, 552, 20, 60, "Text", CounterIncrements->"NumberedEquation", CellTags->"FormThresh Share"], Cell[3402539, 116975, 988, 40, 112, "Example"], Cell[3403530, 117017, 431, 15, 74, "Input"], Cell[3403964, 117034, 632, 23, 61, "Text"], Cell[3404599, 117059, 221, 7, 69, "Input"], Cell[3404823, 117068, 648, 22, 44, "Output"], Cell[3405474, 117092, 498, 18, 35, "Text"], Cell[3405975, 117112, 145, 6, 34, "Text"], Cell[3406123, 117120, 1394, 55, 66, "Text"], Cell[3407520, 117177, 778, 27, 51, "NumberedEquation", CellTags->"FormThresh LaGrange"], Cell[3408301, 117206, 874, 33, 67, "Text"], Cell[3409178, 117241, 493, 18, 60, "Text"], Cell[3409674, 117261, 1225, 44, 108, "Text"], Cell[3410902, 117307, 473, 15, 69, "Input"], Cell[3411378, 117324, 191, 6, 46, "Output"], Cell[3411572, 117332, 259, 10, 34, "Text"], Cell[CellGroupData[{ Cell[3411856, 117346, 145, 6, 34, "Text"], Cell[3412004, 117354, 1976, 73, 122, "Text"] }, Open ]], Cell[3413995, 117430, 1245, 42, 132, "Text"], Cell[3415243, 117474, 925, 25, 146, "Input"], Cell[3416171, 117501, 4071, 138, 472, "Output"], Cell[3420245, 117641, 1734, 65, 139, "Text", CellTags->"ConstrThresh Shamir Gen"], Cell[3421982, 117708, 431, 8, 108, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3422450, 117721, 164, 8, 33, "Section", CellTags->"SectSecr Schemes with liars"], Cell[3422617, 117731, 813, 20, 108, "Text"], Cell[3423433, 117753, 3264, 123, 228, "Theorem", CellTags->"ConstrThresh Shamir"], Cell[3426700, 117878, 1770, 64, 111, "Text"], Cell[3428473, 117944, 2729, 81, 232, "Text"], Cell[3431205, 118027, 116, 3, 34, "Text"], Cell[3431324, 118032, 215, 8, 34, "Text"], Cell[3431542, 118042, 1228, 41, 109, "Text"], Cell[3432773, 118085, 965, 38, 123, "Example"], Cell[3433741, 118125, 1570, 52, 146, "Input"], Cell[3435314, 118179, 134, 4, 46, "Output"], Cell[3435451, 118185, 110, 3, 46, "Output"], Cell[3435564, 118190, 132, 4, 46, "Output"], Cell[3435699, 118196, 132, 4, 46, "Output"], Cell[3435834, 118202, 97, 2, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3435968, 118209, 143, 8, 33, "Section", CellTags->"SectSecr SSS"], Cell[3436114, 118219, 694, 19, 83, "Text"], Cell[3436811, 118240, 1621, 56, 85, "Text"], Cell[3438435, 118298, 61706, 2271, 267, 54311, 2146, "GraphicsData", \ "PostScript", "Graphics"], Cell[3500144, 120571, 206, 6, 83, "NumberedFigure"], Cell[3500353, 120579, 301, 8, 59, "Text"], Cell[3500657, 120589, 544, 18, 59, "Text"], Cell[3501204, 120609, 530, 21, 113, "DisplayFormula", CellTags->"FigSecret One Bit"], Cell[3501737, 120632, 197, 4, 62, "NumberedFigure", PageBreakAbove->False], Cell[3501937, 120638, 770, 30, 59, "Text"], Cell[3502710, 120670, 1454, 57, 171, "Example"], Cell[3504167, 120729, 322, 8, 59, "Text"], Cell[3504492, 120739, 499, 17, 59, "Text"], Cell[3504994, 120758, 786, 31, 186, "NumberedFigure"], Cell[3505783, 120791, 506, 15, 59, "Text", CellTags->"DefSecret ideal SSS"], Cell[3506292, 120808, 148, 3, 34, "Text"], Cell[3506443, 120813, 1379, 49, 110, "Text"], Cell[3507825, 120864, 872, 29, 156, "Input"], Cell[3508700, 120895, 335, 11, 34, "Text"], Cell[CellGroupData[{ Cell[3509060, 120910, 503, 15, 222, "Input"], Cell[3509566, 120927, 119, 3, 44, "Output"], Cell[3509688, 120932, 117, 3, 44, "Output"], Cell[3509808, 120937, 177, 5, 44, "Output"], Cell[3509988, 120944, 177, 5, 44, "Output"], Cell[3510168, 120951, 117, 3, 44, "Output"] }, Open ]], Cell[3510300, 120957, 158, 3, 34, "Text"], Cell[3510461, 120962, 100, 2, 34, "Text"], Cell[3510564, 120966, 1989, 79, 136, "Theorem", CellTags->"TheoSecret Matrix descr"], Cell[3512556, 121047, 937, 34, 59, "Text"], Cell[CellGroupData[{ Cell[3513518, 121085, 483, 13, 120, "Input"], Cell[3514004, 121100, 160, 4, 44, "Output"], Cell[3514167, 121106, 778, 21, 125, "Output"], Cell[3514948, 121129, 147, 3, 44, "Output"] }, Open ]], Cell[3515110, 121135, 404, 16, 34, "Text"], Cell[3515517, 121153, 562, 21, 60, "Text"], Cell[CellGroupData[{ Cell[3516104, 121178, 483, 13, 120, "Input"], Cell[3516590, 121193, 160, 4, 44, "Output"], Cell[3516753, 121199, 778, 21, 125, "Output"], Cell[3517534, 121222, 405, 7, 34, "Message"], Cell[3517942, 121231, 862, 22, 70, "Output"] }, Open ]], Cell[3518819, 121256, 1243, 39, 114, "Text"], Cell[3520065, 121297, 518, 19, 39, "DisplayFormula"], Cell[3520586, 121318, 330, 14, 41, "Text"], Cell[3520919, 121334, 1000, 38, 34, "Text"], Cell[3521922, 121374, 1045, 39, 144, "Text"], Cell[3522970, 121415, 75, 0, 34, "Text"], Cell[3523048, 121417, 484, 21, 116, "Text"], Cell[3523535, 121440, 336, 11, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3523908, 121456, 153, 8, 33, "Section", CellTags->"SectSecr visual"], Cell[3524064, 121466, 411, 9, 83, "Text", CellTags->"DefSecret Visual SSS"], Cell[3524478, 121477, 4749, 294, 123, 4222, 282, "GraphicsData", \ "PostScript", "Graphics"], Cell[3529230, 121773, 740, 20, 83, "Text"], Cell[3529973, 121795, 827, 24, 110, "Text", CellTags->"DefSecret Expansion factor"], Cell[3530803, 121821, 241, 7, 34, "Text"], Cell[3531047, 121830, 222, 6, 36, "Text"], Cell[3531272, 121838, 763, 19, 109, "Text"], Cell[3532038, 121859, 438, 9, 83, "Text"], Cell[3532479, 121870, 226, 4, 59, "Text"], Cell[3532708, 121876, 756, 19, 108, "Text"], Cell[3533467, 121897, 5215, 258, 80, 4465, 243, "GraphicsData", "PostScript", \ "Graphics"], Cell[3538685, 122157, 423, 13, 60, "Text"], Cell[3539111, 122172, 963, 33, 134, "Theorem"], Cell[3540077, 122207, 131, 3, 34, "Text"], Cell[3540211, 122212, 10090, 641, 141, 8937, 619, "GraphicsData", \ "PostScript", "Graphics"], Cell[3550304, 122855, 136, 3, 34, "Text"], Cell[3550443, 122860, 1319, 42, 109, "Text"], Cell[3551765, 122904, 577, 23, 51, "Text", CellTags->"PropSecret VTS1"], Cell[3552345, 122929, 269, 12, 34, "Text", CellTags->"PropSecret VTS2"], Cell[3552617, 122943, 234, 9, 34, "Text", CellTags->"PropSecret VTS3"], Cell[3552854, 122954, 223, 7, 36, "Text"], Cell[3553080, 122963, 793, 37, 87, "Example", CellTags->"ExamSecret Visual n=4"], Cell[3553876, 123002, 502, 16, 129, "Input"], Cell[3554381, 123020, 430, 19, 35, "Text"], Cell[3554814, 123041, 324, 14, 35, "Text"], Cell[3555141, 123057, 485, 18, 33, "DisplayFormula"], Cell[3555629, 123077, 485, 18, 33, "DisplayFormula"], Cell[3556117, 123097, 916, 32, 85, "Text"], Cell[3557036, 123131, 770, 24, 83, "Text"], Cell[3557809, 123157, 100, 2, 69, "Input", CellTags->"S5.23.1"], Cell[3557912, 123161, 94, 2, 69, "Input"], Cell[3558009, 123165, 160, 4, 44, "Output"], Cell[3558172, 123171, 421, 15, 34, "Text"], Cell[3558596, 123188, 625, 20, 69, "Input"], Cell[3559224, 123210, 813, 22, 145, "Output"], Cell[3560040, 123234, 234, 10, 34, "Text"], Cell[3560277, 123246, 160, 5, 69, "Input"], Cell[3560440, 123253, 240, 8, 104, "Output"], Cell[3560683, 123263, 260, 9, 34, "Text"], Cell[3560946, 123274, 11448, 595, 174, 9923, 568, "GraphicsData", \ "PostScript", "Graphics"], Cell[3572397, 123871, 244, 5, 59, "Text"], Cell[3572644, 123878, 160, 5, 69, "Input"], Cell[3572807, 123885, 240, 8, 104, "Output"], Cell[3573050, 123895, 92, 1, 34, "Text"], Cell[3573145, 123898, 3335, 160, 174, 2494, 143, "GraphicsData", \ "PostScript", "Graphics"], Cell[3576483, 124060, 1193, 42, 84, "Text"], Cell[3577679, 124104, 2073, 75, 160, "Text"], Cell[3579755, 124181, 66, 0, 34, "Text"], Cell[3579824, 124183, 2258, 87, 180, "Theorem", CellTags->"ConstrSecret Visual TS"], Cell[3582085, 124272, 2447, 96, 240, "Theorem"], Cell[3584535, 124370, 1951, 75, 101, "Text"], Cell[3586489, 124447, 198, 6, 34, "Text"], Cell[3586690, 124455, 498, 14, 59, "Text"], Cell[3587191, 124471, 1270, 42, 89, "Text"], Cell[3588464, 124515, 391, 15, 36, "Text"], Cell[3588858, 124532, 185, 5, 69, "Input"], Cell[3589046, 124539, 28, 0, 44, "Output"], Cell[3589077, 124541, 954, 38, 75, "Text"], Cell[3590034, 124581, 2313, 97, 244, "Theorem", CellTags->"CorSecret visual QR constr"], Cell[3592350, 124680, 1867, 72, 141, "Text"], Cell[3594220, 124754, 997, 36, 48, "DisplayFormula"], Cell[3595220, 124792, 762, 27, 59, "Text"], Cell[3595985, 124821, 1814, 81, 74, "DisplayFormula"], Cell[3597802, 124904, 825, 31, 83, "Text"], Cell[3598630, 124937, 964, 34, 42, "NumberedEquation", CellTags->"FormSecret inner prod"], Cell[3599597, 124973, 606, 21, 36, "Text"], Cell[3600206, 124996, 100, 1, 34, "Text"], Cell[3600309, 124999, 1264, 50, 99, "DisplayFormula"], Cell[3601576, 125051, 919, 33, 85, "Text"], Cell[3602498, 125086, 116, 3, 34, "Text"], Cell[3602617, 125091, 1009, 40, 87, "Example", CellTags->"ExamSecret Visual n=4"], Cell[3603629, 125133, 566, 19, 95, "Input"], Cell[3604198, 125154, 774, 15, 249, "Output"], Cell[3604975, 125171, 842, 33, 61, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3605854, 125209, 163, 9, 33, "Section", CellTags->"SectSecr Problems"], Cell[3606020, 125220, 923, 34, 109, "Problem"], Cell[3606946, 125256, 1676, 64, 122, "Problem"], Cell[3608625, 125322, 1532, 60, 108, "Problem"], Cell[3610160, 125384, 400, 17, 60, "Problem"], Cell[3610563, 125403, 607, 23, 112, "Text"], Cell[3611173, 125428, 1687, 62, 108, "Problem", CounterIncrements->"Non"], Cell[3612863, 125492, 858, 30, 80, "Problem"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3613770, 125528, 327, 5, 36, "Chapter", CounterAssignments->{{"Chapter", 0}, {"Section", 0}, {"Subsection", 0}, { "Subsubsection", 0}, {"Theorem", 0}, {"Definition", 0}, { "NumberedTable", 0}, {"Example", 0}, {"Problem", 0}, { "NumberedEquation", 0}, {"NumberedFigure", 0}}, CellTags->"ChapNumberTh"], Cell[CellGroupData[{ Cell[3614122, 125537, 122, 7, 47, "Section", CellTags->"SectAppA Introduction"], Cell[3614247, 125546, 210, 5, 34, "Text"], Cell[3614460, 125553, 869, 39, 59, "Text", CellTags->"DefAppA divide"], Cell[3615332, 125594, 403, 15, 34, "Text"], Cell[3615738, 125611, 176, 5, 69, "Input"], Cell[3615917, 125618, 31, 0, 44, "Output"], Cell[3615951, 125620, 365, 13, 34, "Text"], Cell[3616319, 125635, 116, 3, 69, "Input"], Cell[3616438, 125640, 196, 5, 44, "Output"], Cell[3616637, 125647, 763, 33, 60, "Text", CellTags->"DefAppA prime"], Cell[3617403, 125682, 328, 12, 34, "Text"], Cell[3617734, 125696, 110, 3, 69, "Input"], Cell[3617847, 125701, 30, 0, 44, "Output"], Cell[3617880, 125703, 50, 0, 34, "Text"], Cell[3617933, 125705, 116, 3, 69, "Input"], Cell[3618052, 125710, 32, 0, 44, "Output"], Cell[3618087, 125712, 61, 0, 34, "Text"], Cell[3618151, 125714, 324, 12, 112, "Theorem", CellTags->"TheoAppA Euclid"], Cell[3618478, 125728, 1982, 67, 119, "Text"], Cell[3620463, 125797, 116, 3, 34, "Text"], Cell[3620582, 125802, 666, 21, 59, "Text"], Cell[3621251, 125825, 398, 16, 90, "Definition", CellTags->"DefAppA Pi(x)"], Cell[3621652, 125843, 215, 6, 34, "Text"], Cell[3621870, 125851, 113, 3, 69, "Input"], Cell[3621986, 125856, 29, 0, 44, "Output"], Cell[3622018, 125858, 268, 7, 59, "Text"], Cell[3622289, 125867, 552, 23, 123, "Theorem", CellTags->"TheoAppA Prime Numb Th"], Cell[3622844, 125892, 257, 8, 69, "Input"], Cell[3623104, 125902, 47, 0, 44, "Output"], Cell[3623154, 125904, 226, 8, 34, "Text"], Cell[3623383, 125914, 614, 24, 90, "Definition", CellTags->"DefAppA GCD"], Cell[3624000, 125940, 321, 12, 55, "NumberedEquationAppendix", CellTags->"PropAppA GCD1"], Cell[3624324, 125954, 99, 2, 67, "Definition", CounterIncrements->"None"], Cell[3624426, 125958, 495, 21, 57, "NumberedEquationAppendix", CellTags->"PropAppA GCD2"], Cell[3624924, 125981, 697, 28, 69, "Definition", CounterIncrements->"None"], Cell[3625624, 126011, 543, 22, 90, "Definition", CellTags->"DefAppA LCM"], Cell[3626170, 126035, 335, 13, 55, "NumberedEquationAppendix", CellTags->"PropAppA LCM1"], Cell[3626508, 126050, 99, 2, 67, "Definition", CounterIncrements->"None"], Cell[3626610, 126054, 477, 20, 55, "NumberedEquationAppendix", CellTags->"PropAppA LCM2"], Cell[3627090, 126076, 729, 29, 67, "Definition", CounterIncrements->"None"], Cell[3627822, 126107, 67, 0, 34, "Text"], Cell[3627892, 126109, 557, 18, 33, "DisplayFormula"], Cell[3628452, 126129, 3118, 141, 159, "Text"], Cell[3631573, 126272, 207, 7, 34, "Text"], Cell[3631783, 126281, 300, 12, 36, "Text"], Cell[3632086, 126295, 687, 26, 90, "Definition", CounterIncrements->"None", CellTags->"DefAppA Alter GCD/LCM"], Cell[3632776, 126323, 376, 14, 34, "Text", PageBreakAbove->True], Cell[3633155, 126339, 177, 5, 69, "Input"], Cell[3633335, 126346, 29, 0, 44, "Output"], Cell[3633367, 126348, 172, 5, 69, "Input"], Cell[3633542, 126355, 35, 0, 44, "Output"], Cell[3633580, 126357, 235, 6, 34, "Text", CellTags->"DefAppA coprime"], Cell[3633818, 126365, 1185, 49, 220, "Theorem", CellTags->"TheoAppA GCD=ua+vb"], Cell[3635006, 126416, 70, 0, 34, "Text"], Cell[3635079, 126418, 665, 31, 91, "Theorem", CellTags->"LemAppA d Div ab"], Cell[3635747, 126451, 1343, 56, 61, "Text"], Cell[3637093, 126509, 116, 3, 34, "Text"], Cell[3637212, 126514, 980, 41, 119, "Theorem"], Cell[3638195, 126557, 349, 14, 34, "Text"], Cell[3638547, 126573, 116, 3, 34, "Text"], Cell[3638666, 126578, 98, 2, 34, "Text"], Cell[3638767, 126582, 670, 26, 137, "Theorem", CellTags->"TheoAppA Fundamental"], Cell[3639440, 126610, 930, 41, 39, "Text"], Cell[3640373, 126653, 546, 19, 40, "NumberedEquationAppendix", CellTags->"FormAppA gcd=ProdMin"], Cell[3640922, 126674, 504, 18, 40, "NumberedEquationAppendix", CellTags->"FormAppA lcm=ProdMax"], Cell[3641429, 126694, 353, 13, 33, "NumberedEquationAppendix", CellTags->"FormAppA gcd lcm=mn"], Cell[3641785, 126709, 480, 15, 59, "Text"], Cell[3642268, 126726, 74, 1, 69, "Input"], Cell[3642345, 126729, 236, 8, 44, "Output"], Cell[3642584, 126739, 652, 19, 197, "Input"], Cell[3643239, 126760, 231, 8, 44, "Output"], Cell[3643473, 126770, 290, 10, 44, "Output"], Cell[3643766, 126782, 231, 8, 44, "Output"], Cell[3644000, 126792, 290, 10, 44, "Output"], Cell[3644293, 126804, 31, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[3644361, 126809, 117, 6, 33, "Section", CellTags->"SectAppA Euclid"], Cell[3644481, 126817, 2579, 101, 135, "Text"], Cell[3647063, 126920, 1596, 71, 241, "Theorem", CellTags->"AlgAppA Simple Euclid"], Cell[3648662, 126993, 507, 17, 34, "Text"], Cell[3649172, 127012, 634, 21, 95, "Input"], Cell[3649809, 127035, 76, 2, 32, "Print"], Cell[3649888, 127039, 75, 2, 32, "Print"], Cell[3649966, 127043, 74, 2, 32, "Print"], Cell[3650043, 127047, 73, 2, 32, "Print"], Cell[3650119, 127051, 72, 2, 32, "Print"], Cell[3650194, 127055, 632, 21, 60, "Text"], Cell[3650829, 127078, 4590, 209, 297, "Theorem", CellTags->"AlgAppA ExtEuclidAlg"], Cell[3655422, 127289, 419, 14, 57, "NumberedEquationAppendix", CellTags->"FormAppA gcd=ua+vb"], Cell[3655844, 127305, 279, 7, 34, "Text"], Cell[3656126, 127314, 182, 5, 69, "Input"], Cell[3656311, 127321, 146, 5, 44, "Output"], Cell[3656460, 127328, 66, 0, 34, "Text"], Cell[3656529, 127330, 146, 5, 31, "DisplayFormula"], Cell[3656678, 127337, 952, 30, 110, "Text"], Cell[3657633, 127369, 946, 32, 33, "DisplayFormula"], Cell[3658582, 127403, 408, 15, 34, "Text"], Cell[3658993, 127420, 510, 20, 38, "Text"], Cell[3659506, 127442, 1039, 37, 85, "Text"], Cell[3660548, 127481, 3920, 139, 88, "DisplayFormula"], Cell[3664471, 127622, 116, 3, 34, "Text"], Cell[3664590, 127627, 615, 20, 62, "Text"], Cell[3665208, 127649, 485, 17, 34, "Text"], Cell[3665696, 127668, 1616, 49, 283, "Input"], Cell[3667315, 127719, 631, 13, 32, "Print"], Cell[3667949, 127734, 629, 12, 32, "Print"], Cell[3668581, 127748, 629, 13, 32, "Print"], Cell[3669213, 127763, 631, 12, 32, "Print"], Cell[3669847, 127777, 633, 13, 32, "Print"], Cell[3670483, 127792, 2723, 106, 140, "Text", CellTags->"DefAppA Fibonnaci"], Cell[3673209, 127900, 585, 19, 60, "Text"], Cell[3673797, 127921, 423, 15, 95, "Input"], Cell[3674223, 127938, 116, 3, 44, "Output"], Cell[3674342, 127943, 226, 6, 34, "Text"], Cell[3674571, 127951, 64, 1, 69, "Input"], Cell[3674638, 127954, 48, 0, 44, "Output"], Cell[3674689, 127956, 85, 2, 34, "Text"], Cell[3674777, 127960, 974, 28, 120, "Input"], Cell[3675754, 127990, 265, 8, 95, "Input"], Cell[3676022, 128000, 29, 0, 44, "Output"], Cell[3676054, 128002, 356, 10, 69, "Input"], Cell[3676413, 128014, 1194, 18, 146, "Output"], Cell[3677610, 128034, 624, 20, 59, "Text"], Cell[3678237, 128056, 1222, 44, 111, "Text"], Cell[3679462, 128102, 1077, 43, 130, "Theorem", CellTags->"TheoAppA Compl Eucl"], Cell[3680542, 128147, 500, 16, 120, "Input"], Cell[3681045, 128165, 29, 0, 44, "Output"], Cell[3681077, 128167, 29, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[3681143, 128172, 176, 7, 33, "Section", CellTags->"SecAppA Congruences"], Cell[CellGroupData[{ Cell[3681344, 128183, 152, 9, 47, "Subsection", CellTags->"SubSecA Congruences"], Cell[3681499, 128194, 926, 39, 112, "Definition", CellTags->"DefAppA Congr Rel"], Cell[3682428, 128235, 644, 25, 34, "Text"], Cell[3683075, 128262, 174, 5, 69, "Input"], Cell[3683252, 128269, 28, 0, 44, "Output"], Cell[3683283, 128271, 247, 8, 34, "Text"], Cell[3683533, 128281, 269, 8, 69, "Input"], Cell[3683805, 128291, 31, 0, 44, "Output"], Cell[3683839, 128293, 960, 38, 114, "Definition", CellTags->"DefAppA compl resid"], Cell[3684802, 128333, 797, 28, 59, "Text"], Cell[3685602, 128363, 284, 9, 120, "Input"], Cell[3685889, 128374, 160, 4, 44, "Output"], Cell[3686052, 128380, 161, 4, 44, "Output"], Cell[3686216, 128386, 633, 27, 36, "Text"], Cell[3686852, 128415, 412, 13, 34, "NumberedEquationAppendix", CellTags->"FormAppA ai=aj ->i=j"], Cell[3687267, 128430, 384, 10, 59, "Text"], Cell[3687654, 128442, 762, 31, 134, "Theorem", CellTags->"LemAppA DivEqRelByK"], Cell[3688419, 128475, 1768, 75, 61, "Text"], Cell[3690190, 128552, 116, 3, 34, "Text"], Cell[3690309, 128557, 966, 37, 114, "Theorem", CellTags->"LemAppA Also ka_i is CRS"], Cell[3691278, 128596, 925, 36, 37, "Text"], Cell[3692206, 128634, 116, 3, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3692359, 128642, 152, 9, 33, "Subsection", CellTags->"SubsAppA Euler"], Cell[3692514, 128653, 330, 9, 59, "Text"], Cell[3692847, 128664, 1162, 42, 178, "Definition", CellTags->"DefAppA Euler Totient"], Cell[3694012, 128708, 290, 9, 34, "Text"], Cell[3694305, 128719, 113, 3, 69, "Input"], Cell[3694421, 128724, 28, 0, 44, "Output"], Cell[3694452, 128726, 185, 4, 59, "Text"], Cell[3694640, 128732, 468, 20, 115, "Theorem", CellTags->"TheoAppA Sum Phi=n"], Cell[3695111, 128754, 1392, 51, 112, "Text"], Cell[3696506, 128807, 1960, 75, 158, "Text"], Cell[3698469, 128884, 116, 3, 34, "Text"], Cell[3698588, 128889, 392, 15, 36, "Text"], Cell[3698983, 128906, 311, 9, 69, "Input", CellTags->"FunctAppA Divisor sum"], Cell[3699297, 128917, 162, 6, 34, "Text"], Cell[3699462, 128925, 146, 4, 69, "Input"], Cell[3699611, 128931, 71, 1, 44, "Output"], Cell[3699685, 128934, 1194, 46, 116, "Definition", CellTags->"DefAppA Reduced RS"], Cell[3700882, 128982, 132, 3, 34, "Text"], Cell[3701017, 128987, 140, 1, 34, "Text"], Cell[3701160, 128990, 257, 7, 69, "Input"], Cell[3701420, 128999, 180, 5, 95, "Input"], Cell[3701603, 129006, 32, 0, 44, "Output"], Cell[3701638, 129008, 31, 0, 44, "Output"], Cell[3701672, 129010, 655, 25, 60, "Text"], Cell[3702330, 129037, 407, 11, 69, "Input", CellTags->"InputAppA CoPrimes"], Cell[3702740, 129050, 62, 1, 69, "Input"], Cell[3702805, 129053, 143, 4, 44, "Output"], Cell[3702951, 129059, 174, 6, 34, "Text"], Cell[3703128, 129067, 980, 36, 118, "Theorem", CellTags->"LemAppA AR_i also Red"], Cell[3704111, 129105, 255, 7, 59, "Text"], Cell[3704369, 129114, 720, 29, 133, "Theorem", CellTags->"TheoAppA Euler"], Cell[3705092, 129145, 73, 0, 34, "Text"], Cell[3705168, 129147, 375, 11, 120, "Input"], Cell[3705546, 129160, 28, 0, 44, "Output"], Cell[3705577, 129162, 31, 0, 44, "Output"], Cell[3705611, 129164, 28, 0, 44, "Output"], Cell[3705642, 129166, 641, 21, 60, "Text"], Cell[3706286, 129189, 340, 9, 95, "Input"], Cell[3706629, 129200, 28, 0, 44, "Output"], Cell[3706660, 129202, 28, 0, 44, "Output"], Cell[3706691, 129204, 528, 19, 38, "Text"], Cell[3707222, 129225, 1038, 35, 72, "DisplayFormula"], Cell[3708263, 129262, 679, 24, 42, "Text"], Cell[3708945, 129288, 116, 3, 34, "Text"], Cell[3709064, 129293, 729, 23, 84, "Text"], Cell[3709796, 129318, 698, 28, 135, "Theorem", CellTags->"TheoAppA Fermat"], Cell[3710497, 129348, 287, 9, 34, "Text"], Cell[3710787, 129359, 293, 8, 95, "Input"], Cell[3711083, 129369, 31, 0, 44, "Output"], Cell[3711117, 129371, 31, 0, 44, "Output"], Cell[3711151, 129373, 319, 9, 60, "Text"], Cell[3711473, 129384, 706, 24, 56, "NumberedEquationAppendix", CellTags->"FormAppA Phi p^e="], Cell[3712182, 129410, 986, 37, 114, "Definition", CellTags->"DefAppA multiplicative"], Cell[3713171, 129449, 343, 14, 91, "Theorem", CellTags->"LemAppA Phi is mult"], Cell[3713517, 129465, 2953, 113, 117, "Text"], Cell[3716473, 129580, 1491, 55, 88, "Text"], Cell[3717967, 129637, 537, 17, 34, "DisplayFormula"], Cell[3718507, 129656, 1199, 51, 65, "Text"], Cell[3719709, 129709, 116, 3, 34, "Text"], Cell[3719828, 129714, 557, 22, 105, "Theorem", CellTags->"TheoAppA Euler Phi Form"], Cell[3720388, 129738, 317, 13, 34, "Text"], Cell[3720708, 129753, 116, 3, 34, "Text"], Cell[3720827, 129758, 195, 6, 34, "Text"], Cell[3721025, 129766, 607, 21, 59, "Text"], Cell[3721635, 129789, 215, 6, 120, "Input"], Cell[3721853, 129797, 28, 0, 44, "Output"], Cell[3721884, 129799, 28, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[3721949, 129804, 175, 9, 33, "Subsection", CellTags->"SubsAppA lin congr"], Cell[3722127, 129815, 206, 6, 34, "Text", CellTags->"DefAppA linear CR"], Cell[3722336, 129823, 250, 8, 33, "NumberedEquationAppendix"], Cell[3722589, 129833, 901, 37, 114, "Theorem", CellTags->"TheoAppA AX=B mod M"], Cell[3723493, 129872, 3863, 150, 134, "Text"], Cell[3727359, 130024, 849, 30, 31, "DisplayFormula"], Cell[3728211, 130056, 634, 25, 34, "Text"], Cell[3728848, 130083, 116, 3, 34, "Text"], Cell[3728967, 130088, 1744, 67, 87, "Text"], Cell[3730714, 130157, 2351, 86, 187, "Example"], Cell[3733068, 130245, 201, 6, 95, "Input"], Cell[3733272, 130253, 143, 5, 44, "Output"], Cell[3733418, 130260, 29, 0, 44, "Output"], Cell[3733450, 130262, 780, 27, 112, "Example"], Cell[3734233, 130291, 1310, 49, 62, "Text"], Cell[3735546, 130342, 301, 8, 95, "Input"], Cell[3735850, 130352, 28, 0, 44, "Output"], Cell[3735881, 130354, 36, 0, 44, "Output"], Cell[3735920, 130356, 441, 13, 59, "Text"], Cell[3736364, 130371, 135, 4, 69, "Input"], Cell[3736502, 130377, 35, 0, 44, "Output"], Cell[3736540, 130379, 82, 2, 34, "Text"], Cell[3736625, 130383, 134, 4, 69, "Input"], Cell[3736762, 130389, 36, 0, 44, "Output"], Cell[3736801, 130391, 326, 10, 34, "Text"], Cell[3737130, 130403, 134, 3, 69, "Input"], Cell[3737267, 130408, 36, 0, 44, "Output"], Cell[3737306, 130410, 474, 17, 34, "Text"], Cell[3737783, 130429, 336, 11, 95, "Input"], Cell[3738122, 130442, 575, 18, 44, "Output"], Cell[3738700, 130462, 58, 0, 34, "Text"], Cell[3738761, 130464, 293, 9, 69, "Input"], Cell[3739057, 130475, 95, 2, 44, "Output"], Cell[3739155, 130479, 44, 0, 34, "Text"], Cell[3739202, 130481, 293, 9, 69, "Input"], Cell[3739498, 130492, 252, 8, 69, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[3739787, 130505, 170, 9, 33, "Subsection", CellTags->"SubsAppA Chinese RT"], Cell[3739960, 130516, 3733, 149, 143, "Text"], Cell[3743696, 130667, 1167, 48, 113, "Theorem", CellTags->"TheoAppA Chinese RT"], Cell[3744866, 130717, 693, 25, 56, "NumberedEquationAppendix", CellTags->"FormAppA ax=b mod m multi"], Cell[3745562, 130744, 539, 20, 74, "Theorem", CounterIncrements->"None"], Cell[3746104, 130766, 2668, 101, 153, "Text"], Cell[3748775, 130869, 116, 3, 34, "Text"], Cell[3748894, 130874, 665, 23, 65, "Text"], Cell[3749562, 130899, 336, 13, 33, "NumberedEquationAppendix"], Cell[3749901, 130914, 547, 22, 34, "NumberedEquationAppendix"], Cell[3750451, 130938, 1527, 59, 64, "Text"], Cell[3751981, 130999, 538, 19, 39, "DisplayFormula"], Cell[3752522, 131020, 573, 22, 61, "Text"], Cell[3753098, 131044, 373, 13, 33, "DisplayFormula"], Cell[3753474, 131059, 228, 10, 86, "Example", CellTags->"ExamAppA Chin Rem Th"], Cell[3753705, 131071, 625, 24, 31, "DisplayFormula"], Cell[3754333, 131097, 95, 2, 34, "Text"], Cell[3754431, 131101, 937, 36, 33, "DisplayFormula"], Cell[3755371, 131139, 80, 2, 34, "Text"], Cell[3755454, 131143, 666, 24, 31, "DisplayFormula"], Cell[3756123, 131169, 68, 2, 34, "Text"], Cell[3756194, 131173, 559, 22, 31, "DisplayFormula"], Cell[3756756, 131197, 97, 2, 34, "Text"], Cell[3756856, 131201, 2150, 91, 76, "DisplayFormula"], Cell[3759009, 131294, 2512, 100, 62, "Text"], Cell[3761524, 131396, 515, 17, 34, "Text"], Cell[3762042, 131415, 714, 26, 60, "Text"], Cell[3762759, 131443, 621, 22, 60, "Text"], Cell[CellGroupData[{ Cell[3763405, 131469, 631, 19, 120, "Input"], Cell[3764039, 131490, 74, 1, 44, "Output"], Cell[3764116, 131493, 75, 1, 44, "Output"], Cell[3764194, 131496, 74, 1, 44, "Output"] }, Open ]], Cell[3764283, 131500, 2137, 75, 137, "Text"], Cell[3766423, 131577, 629, 20, 120, "Input"], Cell[3767055, 131599, 85, 2, 44, "Output"], Cell[3767143, 131603, 29, 0, 44, "Output"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3767221, 131609, 117, 7, 33, "Section", CellTags->"SecAppA QR"], Cell[3767341, 131618, 1411, 50, 88, "Text", CellTags->"DefAppA quadratic CR"], Cell[3768755, 131670, 251, 8, 34, "NumberedEquationAppendix"], Cell[3769009, 131680, 691, 26, 113, "Definition", CellTags->"DefAppA QR"], Cell[3769703, 131708, 2304, 90, 205, "Definition", CellTags->"DefAppA Legendre S"], Cell[3772010, 131800, 88, 2, 34, "Text"], Cell[3772101, 131804, 1527, 61, 241, "Definition", CellTags->"DefAppA Jacobi S"], Cell[3773631, 131867, 807, 23, 85, "Text"], Cell[3774441, 131892, 185, 5, 69, "Input"], Cell[3774629, 131899, 28, 0, 44, "Output"], Cell[3774660, 131901, 1431, 53, 113, "Text"], Cell[3776094, 131956, 364, 15, 42, "DisplayFormula"], Cell[3776461, 131973, 827, 31, 70, "Text"], Cell[3777291, 132006, 861, 31, 174, "Theorem", CellTags->"TheoAppA Sum Chi"], Cell[3778155, 132039, 188, 6, 34, "Text"], Cell[3778346, 132047, 245, 8, 108, "Input"], Cell[3778594, 132057, 28, 0, 44, "Output"], Cell[3778625, 132059, 204, 6, 36, "Text"], Cell[3778832, 132067, 330, 11, 69, "Input"], Cell[3779165, 132080, 201, 6, 120, "Input", CellTags->"InputAppA ListQuadRes"], Cell[3779369, 132088, 143, 4, 44, "Output"], Cell[3779515, 132094, 630, 26, 135, "Theorem", CellTags->"TheoAppA Chi(uv)"], Cell[3780148, 132122, 5149, 205, 309, "Text"], Cell[3785300, 132329, 116, 3, 34, "Text"], Cell[3785419, 132334, 175, 3, 59, "Text"], Cell[3785597, 132339, 915, 36, 154, "Theorem", CellTags->"TheoAppA chi(u)chi(u+k)"], Cell[3786515, 132377, 2558, 89, 101, "Text"], Cell[3789076, 132468, 116, 3, 34, "Text"], Cell[3789195, 132473, 1841, 74, 115, "Text"], Cell[3791039, 132549, 532, 17, 37, "NumberedEquationAppendix", CellTags->"FormAppA x^(p-1)/2 is prod QR"], Cell[3791574, 132568, 1764, 69, 125, "Text"], Cell[3793341, 132639, 670, 27, 149, "Theorem", CellTags->"TheoAppA u/p=u^(p-1)/2"], Cell[3794014, 132668, 1023, 43, 155, "Theorem", CellTags->"CorAppA Chi(-1)"], Cell[3795040, 132713, 521, 23, 49, "Text"], Cell[3795564, 132738, 116, 3, 34, "Text"], Cell[3795683, 132743, 285, 11, 49, "Text"], Cell[3795971, 132756, 1016, 41, 154, "Theorem", CellTags->"TheoAppA Chi(2)"], Cell[3796990, 132799, 119, 5, 34, "Text"], Cell[3797112, 132806, 3528, 117, 157, "DisplayFormula"], Cell[3800643, 132925, 323, 11, 56, "Text"], Cell[3800969, 132938, 675, 24, 48, "DisplayFormula"], Cell[3801647, 132964, 207, 7, 34, "Text"], Cell[3801857, 132973, 116, 3, 34, "Text"], Cell[3801976, 132978, 267, 9, 34, "Text"], Cell[3802246, 132989, 816, 29, 55, "NumberedEquationAppendix", CellTags->"FormAppA Def Jac (2x)"], Cell[3803065, 133020, 1780, 70, 367, "Theorem", CellTags->"TheoAppA Jacob iRelat"], Cell[3804848, 133092, 1206, 36, 132, "Text"], Cell[3806057, 133130, 116, 3, 34, "Text"], Cell[3806176, 133135, 512, 16, 71, "Text"], Cell[3806691, 133153, 1213, 48, 132, "Theorem", CellTags->"TheoAppA Quad Reci Gauss"], Cell[3807907, 133203, 482, 18, 34, "Text"], Cell[3808392, 133223, 155, 7, 49, "Example"], Cell[3808550, 133232, 3166, 119, 161, "DisplayFormula"], Cell[3811719, 133353, 238, 7, 34, "Text"], Cell[3811960, 133362, 269, 10, 47, "Text"], Cell[3812232, 133374, 96, 2, 69, "Input"], Cell[3812331, 133378, 28, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[3812396, 133383, 130, 6, 33, "Section", CellTags->"SecAppA Continued Fractions"], Cell[3812529, 133391, 341, 6, 83, "Text"], Cell[3812873, 133399, 394, 13, 248, "Input"], Cell[3813270, 133414, 66, 1, 44, "Output"], Cell[3813339, 133417, 52, 0, 44, "Output"], Cell[3813394, 133419, 66, 1, 46, "Output"], Cell[3813463, 133422, 52, 0, 46, "Output"], Cell[3813518, 133424, 118, 3, 34, "Text"], Cell[3813639, 133429, 324, 14, 90, "Definition", CellTags->"DefAppA Cont Frac"], Cell[3813966, 133445, 655, 21, 116, "NumberedEquationAppendix", CellTags->"FormAppA Cont Frac"], Cell[3814624, 133468, 1634, 59, 272, "Definition", CounterIncrements->"None"], Cell[3816261, 133529, 412, 9, 59, "Text"], Cell[3816676, 133540, 1139, 27, 120, "Input", InitializationCell->True, CellTags->"CFF"], Cell[3817818, 133569, 102, 1, 34, "Text"], Cell[CellGroupData[{ Cell[3817945, 133574, 642, 11, 69, "Input", InitializationCell->True], Cell[3818590, 133587, 440, 13, 95, "Output"] }, Open ]], Cell[3819045, 133603, 2224, 77, 112, "Text"], Cell[3821272, 133682, 266, 9, 131, "Input"], Cell[3821541, 133693, 99, 2, 63, "Output"], Cell[3821643, 133697, 199, 4, 34, "Text"], Cell[3821845, 133703, 259, 10, 90, "Theorem", CellTags->"LemAppA rat->CF"], Cell[3822107, 133715, 1740, 70, 85, "Text"], Cell[3823850, 133787, 2401, 84, 157, "DisplayFormula"], Cell[3826254, 133873, 409, 15, 36, "Text"], Cell[3826666, 133890, 116, 3, 34, "Text"], Cell[3826785, 133895, 1182, 36, 111, "Text"], Cell[3827970, 133933, 271, 10, 62, "DisplayFormula"], Cell[3828244, 133945, 758, 25, 85, "Text"], Cell[3829005, 133972, 213, 7, 34, "Text"], Cell[3829221, 133981, 1364, 54, 203, "Theorem", CellTags->"AlgAppA CF"], Cell[3830588, 134037, 319, 14, 86, "Example"], Cell[3830910, 134053, 629, 20, 146, "Input"], Cell[3831542, 134075, 70, 1, 44, "Output"], Cell[3831615, 134078, 96, 2, 34, "Text"], Cell[3831714, 134082, 416, 13, 95, "Input"], Cell[3832133, 134097, 72, 1, 44, "Output"], Cell[3832208, 134100, 80, 2, 34, "Text"], Cell[3832291, 134104, 416, 13, 95, "Input"], Cell[3832710, 134119, 70, 1, 44, "Output"], Cell[3832783, 134122, 427, 15, 34, "Text"], Cell[3833213, 134139, 153, 5, 105, "Input"], Cell[3833369, 134146, 49, 1, 63, "Output"], Cell[3833421, 134149, 360, 10, 34, "Text"], Cell[3833784, 134161, 65, 1, 69, "Input", CellTags->"S5.67.1"], Cell[3833852, 134164, 192, 5, 44, "Output", CellTags->"S5.67.1"], Cell[3834047, 134171, 116, 3, 34, "Text"], Cell[3834166, 134176, 64, 1, 69, "Input", CellTags->"S5.67.1"], Cell[3834233, 134179, 806, 25, 211, "Output"], Cell[3835042, 134206, 313, 10, 34, "Text"], Cell[3835358, 134218, 72, 1, 69, "Input", CellTags->"S5.67.1"], Cell[3835433, 134221, 60, 1, 63, "Output"], Cell[3835496, 134224, 922, 25, 60, "Text"], Cell[3836421, 134251, 261, 7, 91, "Input", CellTags->"S5.67.1"], Cell[3836685, 134260, 500, 16, 112, "Output", CellTags->"S5.67.1"], Cell[3837188, 134278, 683, 22, 60, "Text"], Cell[3837874, 134302, 108, 2, 69, "Input", CellTags->"S5.67.1"], Cell[3837985, 134306, 291, 7, 44, "Output", CellTags->"S5.67.1"], Cell[3838279, 134315, 959, 39, 92, "Definition", CellTags->"DefAppA Cont Frac Appr"], Cell[3839241, 134356, 498, 13, 34, "Text"], Cell[CellGroupData[{ Cell[3839764, 134373, 408, 9, 91, "Input", CellTags->"S5.67.1"], Cell[3840175, 134384, 374, 10, 63, "Output", CellTags->"S5.67.1"] }, Open ]], Cell[3840564, 134397, 698, 26, 60, "Text"], Cell[3841265, 134425, 117, 5, 112, "Input", CellTags->"S5.67.1"], Cell[3841385, 134432, 57, 1, 63, "Output"], Cell[3841445, 134435, 33, 0, 44, "Output"], Cell[3841481, 134437, 32, 0, 44, "Output"], Cell[3841516, 134439, 301, 8, 60, "Text"], Cell[3841820, 134449, 2616, 107, 229, "Theorem", CellTags->"TheoAppA recurr CF"], Cell[3844439, 134558, 1941, 80, 119, "Text"], Cell[3846383, 134640, 202, 6, 34, "Text"], Cell[3846588, 134648, 955, 34, 49, "DisplayFormula"], Cell[3847546, 134684, 349, 13, 36, "Text"], Cell[3847898, 134699, 3607, 135, 214, "DisplayFormula"], Cell[3851508, 134836, 116, 3, 34, "Text"], Cell[3851627, 134841, 70, 0, 34, "Text"], Cell[3851700, 134843, 295, 10, 33, "NumberedEquationAppendix", CellTags->"FormAppA qk>Fk"], Cell[3851998, 134855, 1976, 80, 88, "Text"], Cell[3853977, 134937, 905, 37, 138, "Theorem", CellTags->"LemAppA pq-pq=-1"], Cell[3854885, 134976, 1082, 43, 36, "Text"], Cell[3855970, 135021, 286, 10, 34, "Text"], Cell[3856259, 135033, 1755, 65, 104, "DisplayFormula"], Cell[3858017, 135100, 116, 3, 34, "Text"], Cell[3858136, 135105, 732, 31, 136, "Theorem", CellTags->"CorAppA CF gcd(p q)=1"], Cell[3858871, 135138, 847, 34, 38, "Text"], Cell[3859721, 135174, 116, 3, 34, "Text"], Cell[3859840, 135179, 672, 28, 92, "Theorem"], Cell[3860515, 135209, 662, 25, 77, "NumberedEquationAppendix", CellTags->"FormAppA Ck-Ck-1"], Cell[3861180, 135236, 617, 23, 81, "NumberedEquationAppendix"], Cell[3861800, 135261, 404, 13, 57, "NumberedEquationAppendix"], Cell[3862207, 135276, 246, 5, 89, "Theorem", CounterIncrements->"None"], Cell[3862456, 135283, 315, 13, 34, "Text"], Cell[3862774, 135298, 1142, 42, 53, "DisplayFormula"], Cell[3863919, 135342, 2644, 100, 181, "DisplayFormula"], Cell[3866566, 135444, 1289, 44, 113, "Text"], Cell[3867858, 135490, 560, 22, 35, "DisplayFormula"], Cell[3868421, 135514, 278, 10, 34, "Text"], Cell[3868702, 135526, 763, 28, 47, "DisplayFormula"], Cell[3869468, 135556, 332, 8, 59, "Text"], Cell[3869803, 135566, 116, 3, 34, "Text"], Cell[3869922, 135571, 321, 12, 86, "Example"], Cell[3870246, 135585, 1050, 32, 120, "Input"], Cell[3871299, 135619, 240, 7, 32, "Print"], Cell[3871542, 135628, 270, 7, 32, "Print"], Cell[3871815, 135637, 274, 7, 32, "Print"], Cell[3872092, 135646, 274, 7, 32, "Print"], Cell[3872369, 135655, 272, 7, 32, "Print"], Cell[3872644, 135664, 277, 7, 32, "Print"], Cell[3872924, 135673, 272, 7, 32, "Print"], Cell[3873199, 135682, 274, 7, 32, "Print"], Cell[3873476, 135691, 272, 7, 32, "Print"], Cell[3873751, 135700, 274, 7, 32, "Print"], Cell[3874028, 135709, 272, 7, 32, "Print"], Cell[3874303, 135718, 298, 7, 59, "Text"], Cell[3874604, 135727, 1136, 46, 138, "Theorem"], Cell[3875743, 135775, 283, 9, 76, "Text"], Cell[3876029, 135786, 987, 39, 117, "Theorem", CellTags->"TheoAppA CF Best Appr"], Cell[3877019, 135827, 401, 13, 60, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3877457, 135845, 178, 7, 33, "Section", CellTags->"SecAppA Mobius"], Cell[CellGroupData[{ Cell[3877660, 135856, 173, 9, 47, "Subsection", CellTags->"SubsAppA Mobius"], Cell[3877836, 135867, 1237, 35, 161, "Text"], Cell[3879076, 135904, 2840, 106, 183, "Definition", CellTags->"DefAppA Mobius function"], Cell[3881919, 136012, 1170, 45, 64, "Text"], Cell[3883092, 136059, 114, 3, 69, "Input"], Cell[3883209, 136064, 45, 1, 44, "Output"], Cell[3883257, 136067, 121, 3, 34, "Text"], Cell[3883381, 136072, 940, 39, 152, "Theorem", CellTags->"LemAppA Sum Mu="], Cell[3884324, 136113, 936, 39, 41, "Text"], Cell[3885263, 136154, 3131, 108, 163, "DisplayFormula"], Cell[3888397, 136264, 116, 3, 34, "Text"], Cell[3888516, 136269, 73, 0, 34, "Text"], Cell[3888592, 136271, 275, 8, 69, "Input"], Cell[3888870, 136281, 148, 4, 69, "Input"], Cell[3889021, 136287, 96, 1, 44, "Output"], Cell[3889120, 136290, 1073, 44, 152, "Theorem", CellTags->"LemAppA Sum Moebius"], Cell[3890196, 136336, 1590, 67, 63, "Text"], Cell[3891789, 136405, 116, 3, 34, "Text"], Cell[3891908, 136410, 1571, 58, 226, "Theorem", CellTags->"TheoAppA Moebius Inv"], Cell[3893482, 136470, 1630, 57, 64, "Text"], Cell[3895115, 136529, 116, 3, 34, "Text"], Cell[3895234, 136534, 1478, 52, 225, "Theorem", CellTags->"CorAppA Mult Moebius"], Cell[3896715, 136588, 814, 31, 36, "Text"], Cell[3897532, 136621, 473, 19, 86, "Example"], Cell[3898008, 136642, 311, 13, 35, "DisplayFormula"], Cell[3898322, 136657, 912, 37, 41, "Text"], Cell[3899237, 136696, 2502, 91, 162, "DisplayFormula"], Cell[3901742, 136789, 211, 8, 34, "Text"], Cell[3901956, 136799, 307, 9, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3902300, 136813, 180, 9, 33, "Subsection", CellTags->"SubsAppA Sylvester"], Cell[3902483, 136824, 2267, 83, 138, "Text"], Cell[3904753, 136909, 820, 30, 46, "DisplayFormula"], Cell[3905576, 136941, 161, 6, 34, "Text"], Cell[3905740, 136949, 3440, 125, 225, "Theorem", CellTags->"TheoAppA Incl-Excl"], Cell[3909183, 137076, 237, 8, 34, "Text"], Cell[3909423, 137086, 1483, 53, 52, "DisplayFormula"], Cell[3910909, 137141, 130, 3, 34, "Text"], Cell[3911042, 137146, 116, 3, 34, "Text"], Cell[3911161, 137151, 1313, 49, 85, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3912523, 137206, 114, 7, 33, "Section", CellTags->"SectAppA Problems"], Cell[3912640, 137215, 1270, 52, 99, "Problem"], Cell[3913913, 137269, 631, 26, 58, "Problem"], Cell[3914547, 137297, 1266, 49, 82, "Problem", CellTags->"ProbAppA gcd a^m-1 a^n-1"], Cell[3915816, 137348, 603, 23, 103, "Problem"], Cell[3916422, 137373, 505, 17, 58, "Problem"], Cell[3916930, 137392, 590, 19, 81, "Problem"], Cell[3917523, 137413, 643, 24, 80, "Problem"], Cell[3918169, 137439, 337, 14, 58, "Problem"], Cell[3918509, 137455, 507, 17, 81, "Problem"], Cell[3919019, 137474, 960, 35, 127, "Problem"], Cell[3919982, 137511, 602, 22, 58, "Problem"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3920633, 137539, 71, 1, 36, "Chapter", CellTags->"ChapGaloisTh"], Cell[3920707, 137542, 245, 7, 36, "Text"], Cell[3920955, 137551, 1827, 40, 279, "Text"], Cell[CellGroupData[{ Cell[3922807, 137595, 61, 1, 45, "Section", CellTags->"SecAppB Algebra"], Cell[3922871, 137598, 192, 4, 59, "Text"], Cell[CellGroupData[{ Cell[3923088, 137606, 163, 9, 47, "Subsection", CellTags->"SubsAppB Abstract Algebra"], Cell[CellGroupData[{ Cell[3923276, 137619, 75, 1, 63, "Subsubsection", CellTags->"SubsubsAppB operation"], Cell[3923354, 137622, 1374, 58, 83, "Text", CellTags->"DefAppB operation"], Cell[3924731, 137682, 374, 17, 31, "DisplayFormula"], Cell[3925108, 137701, 49, 0, 34, "Text"], Cell[3925160, 137703, 314, 14, 31, "DisplayFormula"], Cell[3925477, 137719, 644, 25, 61, "Text", CellTags->"DefAppB unit element"], Cell[3926124, 137746, 234, 7, 31, "DisplayFormula"], Cell[3926361, 137755, 537, 19, 86, "Example", CellTags->"ExamAppB Integers+"], Cell[3926901, 137776, 468, 18, 86, "Example", CellTags->"ExamAppB Matrices2x2"], Cell[CellGroupData[{ Cell[3927394, 137798, 398, 19, 87, "Input"], Cell[3927795, 137819, 32, 0, 44, "Output"] }, Open ]], Cell[3927842, 137822, 337, 14, 55, "Text"], Cell[CellGroupData[{ Cell[3928204, 137840, 232, 10, 87, "Input"], Cell[3928439, 137852, 126, 6, 62, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[3928614, 137864, 62, 1, 37, "Subsubsection", CellTags->"SubsubsAppB group"], Cell[3928679, 137867, 1901, 81, 182, "Definition", CellTags->"DefAppB Group"], Cell[3930583, 137950, 1169, 43, 85, "Text"], Cell[3931755, 137995, 248, 10, 31, "DisplayFormula"], Cell[3932006, 138007, 121, 5, 34, "Text"], Cell[3932130, 138014, 348, 15, 33, "DisplayFormula"], Cell[3932481, 138031, 1016, 35, 84, "Text"], Cell[3933500, 138068, 997, 42, 60, "Text", CellTags->"DefAppB subgroup"], Cell[3934500, 138112, 403, 16, 36, "DisplayFormula"], Cell[3934906, 138130, 829, 30, 34, "Text"], Cell[3935738, 138162, 3261, 116, 322, "Example", CellTags->"ExamAppB MultiGroup"], Cell[3939002, 138280, 996, 28, 133, "Text", CellTags->"DefAppB additive group"], Cell[3940001, 138310, 343, 11, 61, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3940381, 138326, 60, 1, 37, "Subsubsection", CellTags->"SubsubsAppB ring"], Cell[3940444, 138329, 1538, 58, 197, "Definition", CellTags->"DefAppB Ring"], Cell[3941985, 138389, 4320, 163, 186, "Text", CellTags->"DefAppB subring"] }, Closed]], Cell[CellGroupData[{ Cell[3946342, 138557, 62, 1, 37, "Subsubsection", CellTags->"SubsubsAppB ideal"], Cell[3946407, 138560, 1178, 49, 112, "Definition", CellTags->"DefAppB Ideal"], Cell[3947588, 138611, 818, 29, 59, "Text"], Cell[3948409, 138642, 2423, 92, 158, "Text", CellTags->"DefAppB mult inverse"] }, Closed]], Cell[CellGroupData[{ Cell[3950869, 138739, 62, 1, 37, "Subsubsection", CellTags->"SubsubsAppB field"], Cell[3950934, 138742, 974, 36, 154, "Definition", CellTags->"DefAppB field"], Cell[3951911, 138780, 1356, 52, 65, "Text", CellTags->"DefAppB zero div"], Cell[3953270, 138834, 788, 30, 34, "Text", CellTags->"DefAppB subfield"], Cell[3954061, 138866, 721, 23, 60, "Text"], Cell[3954785, 138891, 1181, 49, 60, "Text", CellTags->"DefAppB finite"], Cell[3955969, 138942, 1784, 63, 113, "Text", CellTags->"DefAppB GF"], Cell[3957756, 139007, 697, 25, 60, "Text"], Cell[3958456, 139034, 372, 14, 90, "Theorem", CellTags->"TheoAppB Wedderburn"] }, Closed]], Cell[CellGroupData[{ Cell[3958865, 139053, 82, 1, 37, "Subsubsection", CellTags->"SubsubsAppB equiv rel"], Cell[3958950, 139056, 2379, 81, 197, "Definition", CellTags->"DefAppB Equiv Rel"], Cell[3961332, 139139, 214, 6, 34, "Text"], Cell[3961549, 139147, 850, 32, 59, "Text"], Cell[3962402, 139181, 423, 16, 34, "Text", CellTags->"DefAppB equiv class"], Cell[3962828, 139199, 839, 31, 59, "DisplayFormula"], Cell[3963670, 139232, 752, 26, 83, "Text"], Cell[3964425, 139260, 906, 36, 59, "Text"], Cell[3965334, 139298, 403, 14, 33, "NumberedEquationAppendix"], Cell[3965740, 139314, 467, 17, 59, "Text"], Cell[3966210, 139333, 310, 9, 32, "DisplayFormula"], Cell[3966523, 139344, 310, 10, 32, "DisplayFormula"], Cell[3966836, 139356, 516, 17, 59, "Text"], Cell[3967355, 139375, 1036, 39, 112, "Theorem", CellTags->"TheoAppB Res Class"], Cell[3968394, 139416, 617, 23, 34, "Text", CellTags->"DefAppB Res Class Ring"] }, Closed]], Cell[CellGroupData[{ Cell[3969048, 139444, 77, 1, 37, "Subsubsection", CellTags->"SubsubsAppB cyclic group"], Cell[3969128, 139447, 3262, 124, 140, "Text"], Cell[3972393, 139573, 1319, 50, 85, "Text", CellTags->"DefAppB Cyclic Group"], Cell[3973715, 139625, 884, 37, 133, "Theorem", CellTags->"LemAppB Order Divides n"], Cell[3974602, 139664, 856, 37, 60, "Text"], Cell[3975461, 139703, 116, 3, 34, "Text"], Cell[3975580, 139708, 646, 28, 37, "Text"], Cell[3976229, 139738, 1178, 35, 62, "Text"], Cell[3977410, 139775, 235, 7, 95, "Input"], Cell[3977648, 139784, 34, 0, 44, "Output"], Cell[3977685, 139786, 975, 43, 148, "Theorem", CellTags->"LemAppB Order a^k"], Cell[3978663, 139831, 446, 18, 60, "Text"], Cell[3979112, 139851, 711, 22, 39, "DisplayFormula"], Cell[3979826, 139875, 1030, 41, 65, "Text"], Cell[3980859, 139918, 116, 3, 34, "Text"], Cell[3980978, 139923, 91, 2, 34, "Text"], Cell[3981072, 139927, 282, 9, 125, "Input"], Cell[3981357, 139938, 34, 0, 44, "Output"], Cell[3981394, 139940, 34, 0, 44, "Output"], Cell[3981431, 139942, 465, 16, 34, "Text"], Cell[3981899, 139960, 278, 11, 33, "DisplayFormula"], Cell[3982180, 139973, 56, 0, 34, "Text"], Cell[3982239, 139975, 209, 6, 31, "DisplayFormula"], Cell[3982451, 139983, 571, 20, 71, "Text"], Cell[3983025, 140005, 1102, 44, 112, "Theorem", CellTags->"TheoAppB Order Subgroup"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[3984176, 140055, 159, 9, 33, "Subsection", CellTags->"SubsAppB Linear Algebra"], Cell[CellGroupData[{ Cell[3984360, 140068, 92, 1, 63, "Subsubsection", CellTags->"SubsubsAppB vector spaces"], Cell[3984455, 140071, 78, 2, 34, "Text"], Cell[3984536, 140075, 3994, 154, 285, "Definition", CellTags->"DefAppB Vector space"], Cell[3988533, 140231, 239, 6, 34, "Text", CellTags->"DefAppB Vector"], Cell[3988775, 140239, 795, 26, 84, "Text"], Cell[3989573, 140267, 159, 3, 34, "Text"], Cell[3989735, 140272, 385, 12, 112, "Definition", CellTags->"DefAppB Linear S S"], Cell[3990123, 140286, 457, 12, 59, "Text"], Cell[3990583, 140300, 1067, 44, 154, "Theorem"], Cell[3991653, 140346, 375, 16, 34, "Text", CellTags->"DefAppB trivial vs"], Cell[3992031, 140364, 434, 17, 38, "Text"], Cell[3992468, 140383, 835, 34, 32, "DisplayFormula"], Cell[3993306, 140419, 2779, 103, 94, "Text", CellTags->"DefAppB span"] }, Closed]], Cell[CellGroupData[{ Cell[3996122, 140527, 104, 1, 37, "Subsubsection", CellTags->"SubsubsAppB linear indep"], Cell[3996229, 140530, 134, 3, 34, "Text"], Cell[3996366, 140535, 1826, 70, 116, "Definition", CellTags->"DefAppB Linear Dep"], Cell[3998195, 140607, 2205, 81, 91, "Text"], Cell[4000403, 140690, 606, 21, 115, "Theorem"], Cell[4001012, 140713, 192, 6, 34, "Text"], Cell[4001207, 140721, 606, 19, 115, "Theorem"], Cell[4001816, 140742, 485, 20, 39, "Text"], Cell[4002304, 140764, 1342, 53, 142, "Definition", CellTags->"DefAppB Basis"], Cell[4003649, 140819, 514, 19, 59, "Text"], Cell[4004166, 140840, 726, 27, 32, "DisplayFormula"], Cell[4004895, 140869, 175, 6, 34, "Text", CellTags->"DefAppB Standard basis"], Cell[4005073, 140877, 435, 12, 59, "Text"], Cell[4005511, 140891, 227, 4, 59, "Text"], Cell[4005741, 140897, 544, 23, 90, "Theorem"], Cell[4006288, 140922, 176, 3, 59, "Text"], Cell[4006467, 140927, 524, 18, 112, "Definition", CellTags->"DefAppB dimension"] }, Closed]], Cell[CellGroupData[{ Cell[4007028, 140950, 93, 1, 37, "Subsubsection", CellTags->"SubsubsAppB inner product"], Cell[4007124, 140953, 226, 8, 34, "Text"], Cell[4007353, 140963, 1167, 51, 90, "Definition", CellTags->"DefAppB inner product"], Cell[4008523, 141016, 397, 14, 34, "Text"], Cell[4008923, 141032, 715, 33, 31, "DisplayFormula"], Cell[4009641, 141067, 515, 23, 31, "DisplayFormula"], Cell[4010159, 141092, 2151, 80, 111, "Text", CellTags->"DefAppB pos def"], Cell[4012313, 141174, 1490, 56, 33, "NumberedEquationAppendix", CellTags->"FormAppB inner prod"], Cell[4013806, 141232, 1765, 78, 112, "Definition", CellTags->"DefAppB orthogonal"], Cell[4015574, 141312, 1128, 39, 59, "Text"], Cell[4016705, 141353, 474, 19, 34, "Text"], Cell[4017182, 141374, 1021, 41, 90, "Definition", CellTags->"DefAppB orth compl"], Cell[4018206, 141417, 27, 0, 34, "Text"], Cell[4018236, 141419, 605, 22, 31, "DisplayFormula"], Cell[4018844, 141443, 251, 11, 34, "Text"], Cell[4019098, 141456, 1542, 62, 154, "Theorem"], Cell[4020643, 141520, 1731, 69, 110, "Text"], Cell[4022377, 141591, 1387, 56, 117, "Definition", CellTags->"DefAppB self orth"] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[4023825, 141654, 72, 1, 31, "Section", CellTags->"SecAppB Field Constr"], Cell[4023900, 141657, 1950, 65, 84, "Text", CellTags->"DefAppB Zm"], Cell[4025853, 141724, 656, 25, 91, "Theorem", CellTags->"TheoAppB Field iff Prime"], Cell[4026512, 141751, 1306, 49, 84, "Text"], Cell[4027821, 141802, 1579, 57, 83, "Text"], Cell[4029403, 141861, 116, 3, 34, "Text"], Cell[4029522, 141866, 304, 10, 59, "Text"], Cell[4029829, 141878, 894, 28, 63, "Text"], Cell[4030726, 141908, 349, 14, 37, "Text"], Cell[4031078, 141924, 542, 20, 34, "Text", CellTags->"DefAppB polyn"], Cell[4031623, 141946, 448, 16, 35, "DisplayFormula"], Cell[4032074, 141964, 809, 34, 36, "Text", CellTags->"DefAppB degree"], Cell[4032886, 142000, 97, 2, 34, "Text"], Cell[4032986, 142004, 715, 26, 34, "NumberedEquationAppendix", CellTags->"FormAppB Pol add mult"], Cell[4033704, 142032, 901, 32, 37, "NumberedEquationAppendix", CellTags->"FormAppB Pol add mult two"], Cell[4034608, 142066, 1448, 51, 114, "Example"], Cell[4036059, 142119, 263, 9, 34, "Text"], Cell[4036325, 142130, 715, 26, 97, "Input"], Cell[4037043, 142158, 74, 2, 46, "Output"], Cell[4037120, 142162, 220, 6, 46, "Output"], Cell[4037343, 142170, 69, 0, 34, "Text"], Cell[4037415, 142172, 616, 23, 90, "Theorem", CellTags->"TheoAppB F[x]Ring"], Cell[4038034, 142197, 1335, 42, 108, "Text", CellTags->"DefAppB Pol Equiv Def"], Cell[4039372, 142241, 726, 21, 59, "Text"], Cell[4040101, 142264, 432, 13, 97, "Input"], Cell[4040536, 142279, 74, 2, 46, "Output"], Cell[CellGroupData[{ Cell[4040635, 142285, 164, 5, 74, "Input"], Cell[4040802, 142292, 564, 18, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[4041403, 142315, 235, 7, 74, "Input"], Cell[4041641, 142324, 94, 2, 44, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[4041772, 142331, 235, 7, 74, "Input"], Cell[4042010, 142340, 250, 8, 49, "Output"] }, Open ]], Cell[4042275, 142351, 285, 10, 34, "Text"], Cell[CellGroupData[{ Cell[4042585, 142365, 243, 7, 74, "Input"], Cell[4042831, 142374, 190, 6, 44, "Output"] }, Open ]], Cell[4043036, 142383, 209, 6, 34, "Text"], Cell[4043248, 142391, 1197, 47, 113, "Theorem", CellTags->"TheoAppB Pol ExtGCD"], Cell[4044448, 142440, 1120, 45, 137, "Theorem", CellTags->"CorAppB A(x)U(x)=1 mod F(x)"], Cell[4045571, 142487, 295, 7, 34, "Text", CellTags->"FunctAppB PolExtGCD"], Cell[CellGroupData[{ Cell[4045891, 142498, 253, 7, 74, "Input"], Cell[4046147, 142507, 186, 6, 49, "Output"] }, Open ]], Cell[4046348, 142516, 616, 21, 40, "Text"], Cell[CellGroupData[{ Cell[4046989, 142541, 377, 12, 74, "Input"], Cell[4047369, 142555, 28, 0, 44, "Output"] }, Open ]], Cell[4047412, 142558, 181, 6, 34, "Text"], Cell[4047596, 142566, 547, 23, 90, "Theorem", CellTags->"TheoAppB n Zeros"], Cell[4048146, 142591, 314, 12, 34, "Text"], Cell[4048463, 142605, 2698, 105, 138, "Text"], Cell[4051164, 142712, 116, 3, 34, "Text"], Cell[4051283, 142717, 266, 10, 34, "Text"], Cell[4051552, 142729, 362, 13, 31, "DisplayFormula"], Cell[4051917, 142744, 920, 36, 34, "Text", CellTags->"DefAppB gen ideal"], Cell[4052840, 142782, 2226, 89, 85, "Text"], Cell[4055069, 142873, 476, 14, 59, "Text", CellTags->"DefAppB princ ideal"], Cell[4055548, 142889, 314, 10, 37, "Text"], Cell[4055865, 142901, 1504, 58, 91, "Text"], Cell[4057372, 142961, 1496, 56, 120, "Theorem", CellTags->"TheoAppB Field Iff Irred"], Cell[4058871, 143019, 1953, 70, 114, "Text"], Cell[4060827, 143091, 1540, 55, 90, "Text"], Cell[4062370, 143148, 116, 3, 34, "Text"], Cell[4062489, 143153, 1574, 57, 154, "Example", CellTags->"ExamAppB Add Mult"], Cell[4064066, 143212, 1117, 39, 37, "DisplayFormula"], Cell[4065186, 143253, 696, 26, 40, "Text"], Cell[4065885, 143281, 1376, 42, 63, "Text"], Cell[4067264, 143325, 87, 2, 69, "Input"], Cell[4067354, 143329, 240, 7, 69, "Input"], Cell[4067597, 143338, 168, 5, 46, "Output"], Cell[4067768, 143345, 683, 23, 60, "Text"], Cell[4068454, 143370, 1280, 44, 171, "Input"], Cell[4069737, 143416, 208, 7, 44, "Output"], Cell[4069948, 143425, 208, 7, 44, "Output"], Cell[4070159, 143434, 208, 7, 44, "Output"], Cell[4070370, 143443, 208, 7, 44, "Output"], Cell[4070581, 143452, 30, 0, 34, "Text"], Cell[4070614, 143454, 696, 24, 204, "Input"], Cell[4071313, 143480, 208, 7, 44, "Output"], Cell[4071524, 143489, 208, 7, 44, "Output"], Cell[4071735, 143498, 208, 7, 44, "Output"], Cell[4071946, 143507, 208, 7, 44, "Output"], Cell[4072157, 143516, 764, 26, 112, "Text"], Cell[4072924, 143544, 243, 7, 34, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4073204, 143556, 108, 1, 31, "Section", CellTags->"SecAppB Numb Irr Pol"], Cell[4073315, 143559, 1299, 41, 89, "Text", CellTags->"DefAppB monic"], Cell[4074617, 143602, 1144, 45, 136, "Definition", CellTags->"DefAppB Iq(n)"], Cell[4075764, 143649, 348, 11, 60, "Text"], Cell[4076115, 143662, 73, 0, 34, "Text"], Cell[4076191, 143664, 178, 8, 31, "DisplayFormula"], Cell[4076372, 143674, 432, 15, 34, "Text"], Cell[4076807, 143691, 258, 9, 34, "Text"], Cell[4077068, 143702, 715, 28, 33, "DisplayFormula"], Cell[4077786, 143732, 269, 8, 60, "Text"], Cell[4078058, 143742, 142, 4, 33, "DisplayFormula"], Cell[4078203, 143748, 346, 14, 34, "Text"], Cell[4078552, 143764, 1777, 66, 114, "Text"], Cell[4080332, 143832, 72, 0, 34, "Text"], Cell[4080407, 143834, 302, 12, 33, "DisplayFormula"], Cell[4080712, 143848, 251, 5, 83, "Text"], Cell[4080966, 143855, 205, 6, 34, "Text"], Cell[4081174, 143863, 1278, 38, 221, "Text"], Cell[4082455, 143903, 550, 20, 36, "Text"], Cell[4083008, 143925, 114, 3, 34, "Text"], Cell[4083125, 143930, 546, 21, 33, "DisplayFormula"], Cell[4083674, 143953, 1169, 41, 59, "Text"], Cell[4084846, 143996, 40, 0, 34, "Text"], Cell[4084889, 143998, 713, 24, 63, "Text"], Cell[4085605, 144024, 236, 9, 36, "Text"], Cell[4085844, 144035, 551, 20, 35, "DisplayFormula"], Cell[4086398, 144057, 852, 33, 61, "Text"], Cell[4087253, 144092, 306, 10, 31, "DisplayFormula"], Cell[4087562, 144104, 178, 6, 36, "Text"], Cell[4087743, 144112, 380, 13, 31, "DisplayFormula"], Cell[4088126, 144127, 33, 0, 34, "Text"], Cell[4088162, 144129, 550, 17, 37, "DisplayFormula"], Cell[4088715, 144148, 23, 0, 34, "Text"], Cell[4088741, 144150, 348, 13, 37, "DisplayFormula"], Cell[4089092, 144165, 303, 12, 36, "Text"], Cell[4089398, 144179, 749, 26, 37, "DisplayFormula"], Cell[4090150, 144207, 31, 0, 34, "Text"], Cell[4090184, 144209, 418, 15, 35, "DisplayFormula"], Cell[4090605, 144226, 409, 15, 37, "Text"], Cell[4091017, 144243, 479, 17, 39, "DisplayFormula"], Cell[4091499, 144262, 106, 3, 34, "Text"], Cell[4091608, 144267, 656, 23, 39, "DisplayFormula"], Cell[4092267, 144292, 121, 5, 34, "Text"], Cell[4092391, 144299, 1743, 58, 87, "DisplayFormula"], Cell[4094137, 144359, 149, 5, 34, "Text"], Cell[4094289, 144366, 384, 14, 35, "NumberedEquationAppendix", CellTags->"FormAppB Sum Irred"], Cell[4094676, 144382, 598, 25, 101, "Theorem", CellTags->"TheoAppB Ip(m)="], Cell[4095277, 144409, 356, 13, 34, "Text"], Cell[4095636, 144424, 116, 3, 34, "Text"], Cell[4095755, 144429, 492, 16, 37, "Text"], Cell[4096250, 144447, 253, 7, 69, "Input"], Cell[4096506, 144456, 286, 9, 36, "Text"], Cell[4096795, 144467, 434, 14, 97, "Input"], Cell[4097232, 144483, 28, 0, 44, "Output"], Cell[4097263, 144485, 248, 7, 37, "Text"], Cell[4097514, 144494, 367, 13, 37, "Text"], Cell[4097884, 144509, 486, 18, 35, "DisplayFormula"], Cell[4098373, 144529, 21, 0, 34, "Text"], Cell[4098397, 144531, 332, 12, 44, "NumberedEquationAppendix", CellTags->"FormAppB Iq(n)<="], Cell[4098732, 144545, 239, 10, 34, "Text"], Cell[4098974, 144557, 930, 31, 39, "DisplayFormula"], Cell[4099907, 144590, 189, 6, 34, "Text"], Cell[4100099, 144598, 1406, 54, 202, "Theorem", CellTags->"TheoAppB Iq(n)>0"], Cell[4101508, 144654, 1393, 52, 83, "Text"], Cell[4102904, 144708, 116, 3, 34, "Text"], Cell[4103023, 144713, 386, 16, 103, "Theorem", CellTags->"CorAppB Iq(n)~~"], Cell[4103412, 144731, 188, 6, 34, "Text"], Cell[4103603, 144739, 521, 17, 101, "Input"], Cell[4104127, 144758, 85, 1, 44, "Output"], Cell[4104215, 144761, 574, 17, 59, "Text"], Cell[CellGroupData[{ Cell[4104814, 144782, 245, 7, 74, "Input"], Cell[4105062, 144791, 152, 4, 46, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[4105263, 144801, 89, 1, 31, "Section", CellTags->"SecAppB Field Struct"], Cell[CellGroupData[{ Cell[4105377, 144806, 185, 9, 47, "Subsection", CellTags->"SubsAppB cyclic structure"], Cell[4105565, 144817, 1479, 54, 90, "Text"], Cell[4107047, 144873, 546, 23, 91, "Theorem", CellTags->"TheoAppB Field For p^m"], Cell[4107596, 144898, 717, 20, 86, "Text"], Cell[4108316, 144920, 1563, 60, 137, "Definition", CellTags->"DefAppB Prim El"], Cell[4109882, 144982, 1401, 54, 119, "Theorem", CellTags->"TheoAppB Cyclic Struc"], Cell[4111286, 145038, 2636, 100, 121, "Text"], Cell[4113925, 145140, 425, 16, 62, "Text"], Cell[4114353, 145158, 342, 13, 33, "DisplayFormula"], Cell[4114698, 145173, 75, 1, 34, "Text"], Cell[4114776, 145176, 377, 14, 36, "DisplayFormula"], Cell[4115156, 145192, 1451, 53, 66, "Text"], Cell[4116610, 145247, 116, 3, 34, "Text"], Cell[4116729, 145252, 869, 33, 61, "Text"], Cell[4117601, 145287, 980, 30, 86, "Text"], Cell[4118584, 145319, 65, 1, 69, "Input"], Cell[CellGroupData[{ Cell[4118674, 145324, 287, 9, 95, "Input"], Cell[4118964, 145335, 73, 1, 44, "Output"], Cell[4119040, 145338, 92, 2, 44, "Output"] }, Open ]], Cell[4119147, 145343, 299, 10, 34, "Text"], Cell[4119449, 145355, 649, 27, 138, "Theorem", CellTags->"CorAppB a^q^n=a"], Cell[4120101, 145384, 1353, 50, 66, "Text"], Cell[4121457, 145436, 116, 3, 34, "Text"], Cell[4121576, 145441, 691, 26, 143, "Theorem", CellTags->"CorAppB a in F iff a^q=a"], Cell[4122270, 145469, 752, 27, 62, "Text"], Cell[4123025, 145498, 116, 3, 34, "Text"], Cell[4123144, 145503, 437, 14, 37, "Text"], Cell[4123584, 145519, 1854, 67, 137, "Example", CellTags->"ExamAppB 16 min pol"], Cell[4125441, 145588, 779, 23, 190, "Input"], Cell[4126223, 145613, 51, 1, 46, "Output"], Cell[4126277, 145616, 51, 1, 46, "Output"], Cell[4126331, 145619, 118, 3, 46, "Output"], Cell[4126452, 145624, 28, 0, 44, "Output"], Cell[4126483, 145626, 737, 25, 60, "Text"], Cell[4127223, 145653, 795, 25, 160, "Input"], Cell[4128021, 145680, 118, 3, 46, "Output"], Cell[4128142, 145685, 108, 3, 46, "Output"], Cell[4128253, 145690, 28, 0, 44, "Output"], Cell[4128284, 145692, 223, 8, 34, "Text"], Cell[4128510, 145702, 1044, 38, 61, "DisplayFormula"], Cell[4129557, 145742, 358, 14, 37, "Text"], Cell[4129918, 145758, 476, 18, 34, "DisplayFormula"], Cell[4130397, 145778, 530, 17, 101, "Input"], Cell[4130930, 145797, 28, 0, 44, "Output"], Cell[4130961, 145799, 900, 36, 37, "Text"], Cell[4131864, 145837, 2099, 76, 431, "Text", PageBreakBelow->False, CellTags->"TableAppB F16-1"], Cell[4133966, 145915, 668, 24, 40, "Text", PageBreakAbove->False], Cell[4134637, 145941, 1252, 44, 425, "Text", PageBreakBelow->False, CellTags->"TableAppB F16-2"], Cell[4135892, 145987, 640, 20, 41, "Text", PageBreakAbove->False] }, Closed]], Cell[CellGroupData[{ Cell[4136569, 146012, 175, 9, 33, "Subsection", CellTags->"SubsAppB cardinality"], Cell[4136747, 146023, 908, 33, 63, "Text"], Cell[4137658, 146058, 668, 26, 93, "Definition", CellTags->"DefAppB characteristic"], Cell[4138329, 146086, 290, 11, 93, "Theorem"], Cell[4138622, 146099, 1596, 68, 62, "Text"], Cell[4140221, 146169, 116, 3, 34, "Text"], Cell[4140340, 146174, 2220, 80, 164, "Definition", CellTags->"DefAppB isomorphic"], Cell[4142563, 146256, 191, 4, 59, "Text"], Cell[4142757, 146262, 959, 36, 117, "Theorem"], Cell[4143719, 146300, 1114, 41, 64, "Text"], Cell[4144836, 146343, 116, 3, 34, "Text"], Cell[4144955, 146348, 1276, 45, 66, "Text", CellTags->"DefAppB ext field"], Cell[4146234, 146395, 930, 38, 93, "Theorem"], Cell[4147167, 146435, 797, 30, 38, "Text"], Cell[4147967, 146467, 432, 16, 32, "DisplayFormula"], Cell[4148402, 146485, 986, 36, 67, "Text"], Cell[4149391, 146523, 116, 3, 34, "Text"], Cell[4149510, 146528, 799, 26, 63, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4150346, 146559, 195, 9, 33, "Subsection", CellTags->"SubsAppB calculus rules"], Cell[4150544, 146570, 796, 31, 136, "Theorem", CellTags->"TheoAppB (x-a)^p="], Cell[4151343, 146603, 383, 16, 36, "Text"], Cell[4151729, 146621, 589, 18, 52, "DisplayFormula"], Cell[4152321, 146641, 105, 1, 34, "Text"], Cell[4152429, 146644, 522, 17, 31, "DisplayFormula"], Cell[4152954, 146663, 413, 16, 36, "Text"], Cell[4153370, 146681, 116, 3, 34, "Text"], Cell[4153489, 146686, 247, 9, 34, "Text"], Cell[4153739, 146697, 383, 13, 132, "Input"], Cell[4154125, 146712, 98, 3, 46, "Output"], Cell[4154226, 146717, 1092, 43, 145, "Theorem", CellTags->"CorAppB Sum a_i^p="], Cell[4155321, 146762, 409, 14, 106, "Input"], Cell[4155733, 146778, 135, 4, 46, "Output"], Cell[4155871, 146784, 620, 24, 37, "Text"], Cell[4156494, 146810, 116, 3, 34, "Text"], Cell[4156613, 146815, 443, 14, 65, "Text"], Cell[4157059, 146831, 1230, 46, 139, "Theorem", CellTags->"TheoAppB Is In F?"], Cell[4158292, 146879, 974, 38, 65, "Text"], Cell[4159269, 146919, 116, 3, 34, "Text"], Cell[4159388, 146924, 719, 26, 62, "Text"], Cell[4160110, 146952, 1043, 40, 142, "Theorem", CellTags->"TheoAppB F(conj)=0"], Cell[4161156, 146994, 892, 35, 38, "Text"], Cell[4162051, 147031, 1811, 60, 91, "DisplayFormula"], Cell[4163865, 147093, 116, 3, 34, "Text"], Cell[4163984, 147098, 761, 27, 60, "Text"], Cell[4164748, 147127, 518, 19, 65, "Text"], Cell[4165269, 147148, 1858, 70, 213, "Theorem", CellTags->"TheoAppB Numb Conj"], Cell[4167130, 147220, 1123, 42, 66, "Text"], Cell[4168256, 147264, 116, 3, 34, "Text"], Cell[4168375, 147269, 2606, 96, 148, "Example"], Cell[4170984, 147367, 665, 20, 111, "Input"], Cell[4171652, 147389, 781, 25, 132, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4172470, 147419, 181, 9, 33, "Subsection", CellTags->"SubsAppB min pols"], Cell[4172654, 147430, 946, 37, 137, "Theorem", CellTags->"DefAppB Min Pol"], Cell[4173603, 147469, 443, 14, 68, "NumberedEquationAppendix"], Cell[4174049, 147485, 523, 17, 70, "Theorem", CounterIncrements->"None"], Cell[4174575, 147504, 1309, 48, 90, "Text"], Cell[4175887, 147554, 1621, 55, 101, "DisplayFormula"], Cell[4177511, 147611, 66, 1, 34, "Text"], Cell[4177580, 147614, 1092, 36, 35, "DisplayFormula"], Cell[4178675, 147652, 1694, 64, 120, "Text"], Cell[4180372, 147718, 116, 3, 34, "Text"], Cell[4180491, 147723, 953, 37, 135, "Theorem", CellTags->"CorAppB Prop Min Pol"], Cell[4181447, 147762, 419, 17, 34, "Text"], Cell[4181869, 147781, 116, 3, 34, "Text"], Cell[4181988, 147786, 1078, 34, 90, "Text", CellTags->"DefAppB degree of element"], Cell[4183069, 147822, 877, 31, 62, "Text", CellTags->"DefAppB Prim Pol"], Cell[4183949, 147855, 65, 1, 69, "Input"], Cell[4184017, 147858, 260, 8, 95, "Input"], Cell[4184280, 147868, 203, 5, 46, "Output"], Cell[4184486, 147875, 1288, 45, 91, "Text", CellTags->"DefAppB Log Table"], Cell[4185777, 147922, 303, 9, 59, "Text"], Cell[4186083, 147933, 228, 7, 95, "Input"], Cell[4186314, 147942, 944, 30, 332, "Output"], Cell[4187261, 147974, 18, 0, 34, "Text"], Cell[4187282, 147976, 315, 10, 95, "Input"], Cell[4187600, 147988, 920, 30, 332, "Output"], Cell[4188523, 148020, 1370, 50, 85, "Text"], Cell[CellGroupData[{ Cell[4189918, 148074, 736, 23, 146, "Input"], Cell[4190657, 148099, 291, 9, 44, "Output"], Cell[4190951, 148110, 122, 2, 44, "Output"] }, Open ]], Cell[4191088, 148115, 133, 3, 34, "Text"], Cell[4191224, 148120, 902, 33, 86, "Text"], Cell[4192129, 148155, 724, 25, 101, "Input"], Cell[4192856, 148182, 176, 5, 46, "Output"], Cell[4193035, 148189, 1051, 41, 89, "Text"], Cell[4194089, 148232, 1180, 36, 241, "Input"], Cell[4195272, 148270, 28, 0, 44, "Output"], Cell[4195303, 148272, 51, 1, 46, "Output"], Cell[4195357, 148275, 74, 2, 46, "Output"], Cell[4195434, 148279, 108, 3, 46, "Output"], Cell[4195545, 148284, 108, 3, 46, "Output"], Cell[4195656, 148289, 152, 4, 46, "Output"], Cell[4195811, 148295, 523, 14, 59, "Text"], Cell[4196337, 148311, 1086, 31, 171, "Input"], Cell[4197426, 148344, 284, 10, 145, "Output"], Cell[4197713, 148356, 1206, 43, 65, "Text"], Cell[4198922, 148401, 153, 4, 69, "Input"], Cell[4199078, 148407, 140, 4, 44, "Output"], Cell[4199221, 148413, 314, 11, 36, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4199572, 148429, 162, 9, 33, "Subsection", CellTags->"SubsAppB further props"], Cell[4199737, 148440, 3751, 134, 201, "Text"], Cell[4203491, 148576, 814, 34, 115, "Theorem", CellTags->"LemAppB M(x)Divx^p^n-x"], Cell[4204308, 148612, 2079, 82, 92, "Text"], Cell[4206390, 148696, 116, 3, 34, "Text"], Cell[4206509, 148701, 158, 6, 34, "Text"], Cell[4206670, 148709, 518, 20, 94, "Theorem", CellTags->"TheoAppB Factor x^p^m-x"], Cell[4207191, 148731, 1981, 76, 97, "Text"], Cell[4209175, 148809, 116, 3, 34, "Text"], Cell[4209294, 148814, 1541, 62, 165, "Example"], Cell[4210838, 148878, 298, 10, 106, "Input"], Cell[4211139, 148890, 567, 18, 49, "Output"], Cell[4211709, 148910, 859, 36, 93, "Theorem", CellTags->"CorAppB Zeros Irr F"], Cell[4212571, 148948, 1007, 39, 42, "Text"], Cell[4213581, 148989, 116, 3, 34, "Text"], Cell[4213700, 148994, 511, 20, 95, "Theorem"], Cell[4214214, 149016, 3324, 121, 155, "Text"], Cell[4217541, 149139, 116, 3, 34, "Text"], Cell[4217660, 149144, 601, 24, 95, "Theorem", CellTags->"CorAppB When Subfield"], Cell[4218264, 149170, 164, 5, 34, "Text"], Cell[4218431, 149177, 1627, 61, 139, "DisplayFormula"], Cell[4220061, 149240, 116, 3, 34, "Text"], Cell[4220180, 149245, 1632, 60, 121, "Example"] }, Closed]], Cell[CellGroupData[{ Cell[4221849, 149310, 162, 9, 33, "Subsection", CellTags->"SubsAppB cycl pols"], Cell[4222014, 149321, 2630, 101, 122, "Text"], Cell[4224647, 149424, 1397, 55, 141, "Definition", CellTags->"DefAppB Cycl Pol"], Cell[4226047, 149481, 1502, 58, 93, "Text"], Cell[4227552, 149541, 529, 21, 37, "Text"], Cell[4228084, 149564, 1486, 49, 71, "NumberedEquationAppendix", CellTags->"FormAppB Factor x^n-1"], Cell[4229573, 149615, 635, 25, 119, "Theorem", CellTags->"TheoAppB Form Cyclot"], Cell[4230211, 149642, 379, 13, 34, "Text"], Cell[4230593, 149657, 116, 3, 34, "Text"], Cell[4230712, 149662, 1509, 54, 149, "Example"], Cell[4232224, 149718, 316, 9, 69, "Input", CellTags->"FunctAppA Divisor sum"], Cell[4232543, 149729, 489, 16, 127, "Input"], Cell[4233035, 149747, 109, 3, 46, "Output"], Cell[4233147, 149752, 302, 11, 34, "Text"], Cell[4233452, 149765, 87, 2, 69, "Input"], Cell[4233542, 149769, 109, 3, 46, "Output"], Cell[4233654, 149774, 437, 18, 37, "Text"], Cell[4234094, 149794, 443, 14, 60, "Text"], Cell[4234540, 149810, 937, 33, 88, "Text"], Cell[4235480, 149845, 711, 28, 128, "Theorem", CellTags->"TheoAppB Number Prim Pol"], Cell[4236194, 149875, 895, 36, 66, "Text"], Cell[4237092, 149913, 116, 3, 34, "Text"], Cell[4237211, 149918, 291, 13, 49, "Example"], Cell[4237505, 149933, 853, 32, 37, "DisplayFormula"], Cell[4238361, 149967, 69, 2, 34, "Text"], Cell[4238433, 149971, 1302, 54, 108, "DisplayFormula"], Cell[4239738, 150027, 383, 15, 36, "Text"], Cell[4240124, 150044, 453, 18, 40, "Text"], Cell[4240580, 150064, 202, 9, 49, "Example", PageBreakBelow->False], Cell[4240785, 150075, 374, 12, 95, "Input", PageBreakAbove->False], Cell[4241162, 150089, 928, 29, 78, "Output"], Cell[4242093, 150120, 2035, 74, 146, "Text", CellTags->"RemAppB p->q"], Cell[4244131, 150196, 873, 33, 90, "Example"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[4245053, 150235, 64, 1, 31, "Section", CellTags->"SectAppB Problems"], Cell[4245120, 150238, 681, 26, 72, "Problem"], Cell[4245804, 150266, 374, 14, 58, "Problem"], Cell[4246181, 150282, 1158, 51, 62, "Problem", CellTags->"ProbAppB 3"], Cell[4247342, 150335, 408, 15, 58, "Problem"], Cell[4247753, 150352, 561, 18, 86, "Problem"], Cell[4248317, 150372, 2183, 92, 125, "Problem", CellTags->"ProbAppB order axb"], Cell[4250503, 150466, 856, 34, 64, "Problem"], Cell[4251362, 150502, 478, 18, 58, "Problem"], Cell[4251843, 150522, 823, 33, 64, "Problem"], Cell[4252669, 150557, 1303, 46, 124, "Problem", CellTags->"ProbAppB Gauss"], Cell[4253975, 150605, 409, 13, 80, "Problem"], Cell[4254387, 150620, 901, 34, 87, "Problem"], Cell[4255291, 150656, 311, 11, 58, "Problem"], Cell[4255605, 150669, 690, 27, 61, "Problem"], Cell[4256298, 150698, 524, 17, 80, "Problem"], Cell[4256825, 150717, 507, 23, 59, "Problem", CellTags->"DefAppB Trace"], Cell[4257335, 150742, 397, 12, 36, "DisplayFormula"], Cell[4257735, 150756, 1411, 52, 111, "Problem", CounterIncrements->"None"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[4259195, 150814, 87, 1, 36, "Chapter", CellTags->"Chap Famous"], Cell[CellGroupData[{ Cell[4259307, 150819, 39, 0, 45, "Section"], Cell[4259349, 150821, 20838, 345, 175, "Graphics", CellTags->"Mathematician: Euclid of Alexandria"], Cell[4280190, 151168, 210, 7, 59, "Text"], Cell[4280403, 151177, 389, 12, 59, "Text"], Cell[4280795, 151191, 2826, 69, 595, "Text"], Cell[4283624, 151262, 311, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4283972, 151275, 33, 0, 31, "Section"], Cell[4284008, 151277, 18807, 311, 105, "Graphics", CellTags->"Mathematician: Leonhard Euler"], Cell[4302818, 151590, 237, 7, 59, "Text"], Cell[4303058, 151599, 227, 6, 105, "Text"], Cell[4303288, 151607, 3544, 53, 863, "Text"], Cell[4306835, 151662, 309, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4307181, 151675, 35, 0, 31, "Section"], Cell[4307219, 151677, 16356, 270, 175, "Graphics", CellTags->"Mathematician: Pierre de Fermat"], Cell[4323578, 151949, 237, 7, 59, "Text"], Cell[4323818, 151958, 389, 8, 83, "Text"], Cell[4324210, 151968, 16716, 300, 3942, "Text"], Cell[4340929, 152270, 311, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4341277, 152283, 34, 0, 31, "Section"], Cell[4341314, 152285, 17275, 286, 175, "Graphics", CellTags->"Mathematician: Evariste Galois"], Cell[4358592, 152573, 243, 7, 59, "Text"], Cell[4358838, 152582, 222, 6, 59, "Text"], Cell[4359063, 152590, 13184, 196, 3544, "Text"], Cell[4372250, 152788, 311, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4372598, 152801, 46, 0, 31, "Section"], Cell[4372647, 152803, 16485, 272, 175, "Graphics", CellTags->"Mathematician: Johann Carl Friedrich Gauss"], Cell[4389135, 153077, 284, 7, 59, "Text"], Cell[4389422, 153086, 311, 6, 59, "Text"], Cell[4389736, 153094, 15792, 247, 3863, "Text"], Cell[4405531, 153343, 309, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4405877, 153356, 43, 0, 31, "Section"], Cell[4405923, 153358, 15897, 263, 175, "Graphics", CellTags->"Mathematician: Karl Gustav Jacob Jacobi"], Cell[4421823, 153623, 240, 7, 59, "Text"], Cell[4422066, 153632, 121, 4, 34, "Text"], Cell[4422190, 153638, 1771, 27, 498, "Text"], Cell[4423964, 153667, 311, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4424312, 153680, 40, 0, 31, "Section"], Cell[4424355, 153682, 17207, 284, 175, "Graphics", CellTags->"Mathematician: Adrien-Marie Legendre"], Cell[4441565, 153968, 222, 7, 59, "Text"], Cell[4441790, 153977, 171, 5, 34, "Text"], Cell[4441964, 153984, 1773, 36, 476, "Text"], Cell[4443740, 154022, 315, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4444092, 154035, 54, 0, 31, "Section"], Cell[4444149, 154037, 14594, 241, 175, "Graphics", CellTags->"Mathematician: August Ferdinand M\[ODoubleDot]bius"], Cell[4458746, 154280, 344, 12, 59, "Text"], Cell[4459093, 154294, 244, 5, 59, "Text"], Cell[4459340, 154301, 9290, 143, 2253, "Text"], Cell[4468633, 154446, 311, 8, 59, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4468981, 154459, 51, 0, 31, "Section"], Cell[4469035, 154461, 16234, 268, 177, "Graphics", CellTags->"Mathematician: Joseph Henry Maclagen Wedderburn"], Cell[4485272, 154731, 243, 7, 59, "Text"], Cell[4485518, 154740, 163, 5, 34, "Text"], Cell[4485684, 154747, 1981, 29, 522, "Text"], Cell[4487668, 154778, 319, 8, 59, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[4488036, 154792, 77, 1, 36, "Chapter", CellTags->"Chap New Functions"], Cell[CellGroupData[{ Cell[4488138, 154797, 38, 0, 63, "Subsubsection"], Cell[4488179, 154799, 270, 9, 34, "Text"], Cell[4488452, 154810, 570, 17, 95, "Input"], Cell[4489025, 154829, 24, 0, 34, "Text"], Cell[4489052, 154831, 127, 3, 69, "Input"], Cell[4489182, 154836, 36, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4489255, 154841, 37, 0, 37, "Subsubsection"], Cell[4489295, 154843, 221, 7, 34, "Text"], Cell[4489519, 154852, 434, 12, 95, "Input"], Cell[4489956, 154866, 24, 0, 34, "Text"], Cell[4489983, 154868, 310, 9, 120, "Input", CellTags->"DefClass Caesar"], Cell[4490296, 154879, 70, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4490403, 154884, 35, 0, 37, "Subsubsection"], Cell[4490441, 154886, 245, 11, 36, "Text"], Cell[4490689, 154899, 710, 22, 95, "Input"], Cell[4491402, 154923, 24, 0, 34, "Text"], Cell[4491429, 154925, 535, 16, 138, "Input"], Cell[4491967, 154943, 173, 7, 83, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4492177, 154955, 88, 1, 37, "Subsubsection"], Cell[4492268, 154958, 532, 16, 35, "Text"], Cell[4492803, 154976, 630, 21, 95, "Text"], Cell[4493436, 154999, 1139, 27, 120, "Input", InitializationCell->True, CellTags->"CFF"], Cell[4494578, 155028, 92, 1, 34, "Text"], Cell[CellGroupData[{ Cell[4494695, 155033, 669, 13, 69, "Input", InitializationCell->True, CellTags->"CFF"], Cell[4495367, 155048, 393, 14, 112, "Output", CellTags->"CFF"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[4495809, 155068, 68, 1, 37, "Subsubsection", CellTags->"NewFunction CoPrimeQ"], Cell[4495880, 155071, 175, 6, 34, "Text"], Cell[4496058, 155079, 268, 7, 69, "Input", CellTags->"InputAppA CoPrimeQ"], Cell[4496329, 155088, 24, 0, 34, "Text"], Cell[4496356, 155090, 180, 5, 95, "Input"], Cell[4496539, 155097, 32, 0, 44, "Output"], Cell[4496574, 155099, 31, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4496642, 155104, 33, 0, 37, "Subsubsection"], Cell[4496678, 155106, 570, 19, 83, "Text"], Cell[4497251, 155127, 374, 10, 69, "Input"], Cell[4497628, 155139, 24, 0, 34, "Text"], Cell[4497655, 155141, 62, 1, 69, "Input"], Cell[4497720, 155144, 143, 4, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4497900, 155153, 39, 0, 37, "Subsubsection"], Cell[4497942, 155155, 221, 9, 38, "Text"], Cell[4498166, 155166, 258, 7, 69, "Input"], Cell[4498427, 155175, 24, 0, 34, "Text"], Cell[4498454, 155177, 219, 6, 95, "Input", CellTags->"FunctAppA Divisor sum"], Cell[4498676, 155185, 30, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4498743, 155190, 73, 1, 37, "Subsubsection", CellTags->"NewFunctions DivisorSum"], Cell[4498819, 155193, 213, 9, 38, "Text"], Cell[4499035, 155204, 253, 7, 69, "Input"], Cell[4499291, 155213, 24, 0, 34, "Text"], Cell[4499318, 155215, 215, 6, 95, "Input", CellTags->"FunctAppA Divisor sum"], Cell[4499536, 155223, 29, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4499602, 155228, 36, 0, 37, "Subsubsection"], Cell[4499641, 155230, 750, 29, 64, "Text"], Cell[4500394, 155261, 5996, 153, 377, "Input", CellTags->"InputEllip addition"], Cell[4506393, 155416, 24, 0, 34, "Text"], Cell[4506420, 155418, 400, 12, 95, "Input"], Cell[4506823, 155432, 73, 2, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4506933, 155439, 32, 0, 37, "Subsubsection"], Cell[4506968, 155441, 402, 16, 36, "Text"], Cell[4507373, 155459, 394, 14, 69, "Input"], Cell[4507770, 155475, 24, 0, 34, "Text"], Cell[4507797, 155477, 83, 2, 69, "Input"], Cell[4507883, 155481, 28, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4507948, 155486, 59, 0, 37, "Subsubsection"], Cell[4508010, 155488, 772, 29, 62, "Text"], Cell[4508785, 155519, 1497, 42, 171, "Input", CellTags->"NewFunction Knapsack"], Cell[4510285, 155563, 59, 1, 34, "Text", CellTags->"NewFunction Knapsack"], Cell[4510347, 155566, 392, 12, 95, "Input", CellTags->"NewFunction Knapsack"], Cell[4510742, 155580, 151, 4, 44, "Output", CellTags->"NewFunction Knapsack"] }, Closed]], Cell[CellGroupData[{ Cell[4510930, 155589, 36, 0, 37, "Subsubsection"], Cell[4510969, 155591, 227, 9, 36, "Text"], Cell[4511199, 155602, 308, 10, 69, "Input"], Cell[4511510, 155614, 24, 0, 34, "Text"], Cell[4511537, 155616, 165, 5, 120, "Input"], Cell[4511705, 155623, 143, 4, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4511885, 155632, 76, 1, 37, "Subsubsection", CellTags->"NewFunction MultiEntropy"], Cell[4511964, 155635, 544, 21, 38, "Text"], Cell[4512511, 155658, 438, 14, 107, "Input"], Cell[4512952, 155674, 24, 0, 34, "Text"], Cell[4512979, 155676, 313, 10, 95, "Input"], Cell[4513295, 155688, 28, 0, 44, "Output"] }, Closed]], Cell[CellGroupData[{ Cell[4513360, 155693, 32, 0, 37, "Subsubsection"], Cell[4513395, 155695, 240, 11, 36, "Text"], Cell[4513638, 155708, 632, 21, 69, "Input"], Cell[4514273, 155731, 24, 0, 34, "Text"], Cell[4514300, 155733, 540, 17, 160, "Input"], Cell[4514843, 155752, 208, 9, 104, "Output", PageBreakBelow->Automatic] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[4515100, 155767, 59, 1, 36, "Chapter", CellTags->"Chap References"], Cell[4515162, 155770, 359, 11, 59, "Text", CellTags->"RefAdle79"], Cell[4515524, 155783, 317, 9, 59, "Text", CellTags->"RefAdle83"], Cell[4515844, 155794, 297, 10, 59, "Text", CellTags->"RefAdle94"], Cell[4516144, 155806, 279, 7, 59, "Text", CellTags->"RefAdlD93"], Cell[4516426, 155815, 304, 9, 59, "Text", CellTags->"RefAdPR83"], Cell[4516733, 155826, 235, 9, 34, "Text", CellTags->"RefAig79"], Cell[4516971, 155837, 340, 10, 59, "Text", CellTags->"RefBaKvT99"], Cell[4517314, 155849, 268, 9, 34, "Text", CellTags->"RefBau97"], Cell[4517585, 155860, 269, 9, 34, "Text", CellTags->"RefBek82"], Cell[4517857, 155871, 253, 9, 34, "Text", CellTags->"RefBer68"], Cell[4518113, 155882, 351, 9, 59, "Text", CellTags->"RefBerMT78"], Cell[4518467, 155893, 269, 9, 34, "Text", CellTags->"RefBeJL86"], Cell[4518739, 155904, 288, 9, 34, "Text", CellTags->"RefBihS93"], Cell[4519030, 155915, 429, 11, 83, "Text", CellTags->"RefBoDML97"], Cell[4519462, 155928, 268, 9, 34, "Text", CellTags->"RefBos92"], Cell[4519733, 155939, 386, 11, 59, "Text", CellTags->"RefBric85"], Cell[4520122, 155952, 316, 10, 59, "Text", CellTags->"RefBric89"], Cell[4520441, 155964, 406, 11, 59, "Text", CellTags->"RefCanS98"], Cell[4520850, 155977, 444, 12, 83, "Text", CellTags->"RefChoR85"], Cell[4521297, 155991, 290, 9, 34, "Text", CellTags->"RefCohL82"], Cell[4521590, 156002, 231, 9, 34, "Text", CellTags->"RefCohn77"], Cell[4521824, 156013, 318, 9, 59, "Text", CellTags->"RefCopp84"], Cell[4522145, 156024, 420, 11, 59, "Text", CellTags->"RefCopFPR96"], Cell[4522568, 156037, 359, 12, 59, "Text", CellTags->"RefCov67"], Cell[4522930, 156051, 380, 11, 59, "Text", CellTags->"RefDemy94"], Cell[4523313, 156064, 266, 9, 34, "Text", CellTags->"RefDen82"], Cell[4523582, 156075, 298, 9, 59, "Text", CellTags->"RefDifH76"], Cell[4523883, 156086, 298, 9, 59, "Text", CellTags->"RefDijk97"], Cell[4524184, 156097, 428, 12, 59, "Text", CellTags->"RefElGa85"], Cell[4524615, 156111, 433, 12, 83, "Text", CellTags->"RefFiaS87"], Cell[4525051, 156125, 372, 11, 59, "Text", CellTags->"RefFips94"], Cell[4525426, 156138, 236, 9, 34, "Text", CellTags->"RefFrie73"], Cell[4525665, 156149, 312, 10, 59, "Text", CellTags->"RefGarJ79"], Cell[4525980, 156161, 309, 9, 59, "Text", CellTags->"RefGilMS74"], Cell[4526292, 156172, 237, 9, 34, "Text", CellTags->"RefGol67"], Cell[4526532, 156183, 252, 9, 34, "Text", CellTags->"RefHall67"], Cell[4526787, 156194, 267, 9, 34, "Text", CellTags->"RefHar45"], Cell[4527057, 156205, 295, 9, 34, "Text", CellTags->"RefHast88"], Cell[4527355, 156216, 391, 10, 59, "Text", CellTags->"RefHelR83"], Cell[4527749, 156228, 275, 9, 34, "Text", CellTags->"RefHuff52"], Cell[4528027, 156239, 301, 9, 59, "Text", CellTags->"RefJoha94a"], Cell[4528331, 156250, 260, 9, 34, "Text", CellTags->"RefJoha94b"], Cell[4528594, 156261, 448, 12, 83, "Text", CellTags->"RefJohKS93"], Cell[4529045, 156275, 258, 9, 34, "Text", CellTags->"RefKahn67"], Cell[4529306, 156286, 265, 9, 34, "Text", CellTags->"RefKhin57"], Cell[4529574, 156297, 417, 15, 59, "Text", CellTags->"RefKnud94"], Cell[4529994, 156314, 284, 10, 34, "Text", CellTags->"RefKnut69"], Cell[4530281, 156326, 278, 9, 34, "Text", CellTags->"RefKnut73"], Cell[4530562, 156337, 300, 10, 59, "Text", CellTags->"RefKnut81"], Cell[4530865, 156349, 418, 12, 59, "Text", CellTags->"RefKoch96"], Cell[4531286, 156363, 245, 9, 34, "Text", CellTags->"RefKonh81"], Cell[4531534, 156374, 307, 10, 59, "Text", CellTags->"RefKraf49"], Cell[4531844, 156386, 308, 9, 59, "Text", CellTags->"RefLagO83"], Cell[4532155, 156397, 322, 10, 59, "Text", CellTags->"RefLai92"], Cell[4532480, 156409, 442, 12, 59, "Text", CellTags->"RefLeeB88"], Cell[4532925, 156423, 260, 9, 34, "Text", CellTags->"RefLehm76"], Cell[4533188, 156434, 255, 9, 34, "Text", CellTags->"RefLenstA96"], Cell[4533446, 156445, 313, 9, 59, "Text", CellTags->"RefLenLL82"], Cell[4533762, 156456, 311, 11, 34, "Text", CellTags->"RefLens83"], Cell[4534076, 156469, 317, 10, 59, "Text", CellTags->"RefLens86"], Cell[4534396, 156481, 246, 9, 34, "Text", CellTags->"RefLiu68"], Cell[4534645, 156492, 330, 10, 59, "Text", CellTags->"RefLune87"], Cell[4534978, 156504, 291, 9, 59, "Text", CellTags->"RefMacW77"], Cell[4535272, 156515, 293, 9, 59, "Text", CellTags->"RefMas69"], Cell[4535568, 156526, 394, 10, 59, "Text", CellTags->"RefMatY93"], Cell[4535965, 156538, 277, 9, 34, "Text", CellTags->"RefMaur92"], Cell[4536245, 156549, 301, 9, 59, "Text", CellTags->"RefMcEl78"], Cell[4536549, 156560, 287, 9, 34, "Text", CellTags->"RefMcEl81"], Cell[4536839, 156571, 287, 9, 34, "Text", CellTags->"RefMcMi56"], Cell[4537129, 156582, 272, 9, 34, "Text", CellTags->"RefMene98"], Cell[4537404, 156593, 348, 10, 59, "Text", CellTags->"RefMeOkV93"], Cell[4537755, 156605, 287, 9, 59, "Text", CellTags->"RefMeOV97"], Cell[4538045, 156616, 326, 9, 59, "Text", CellTags->"RefMerH78"], Cell[4538374, 156627, 290, 9, 59, "Text", CellTags->"RefMey82"], Cell[4538667, 156638, 289, 9, 34, "Text", CellTags->"RefMill76"], Cell[4538959, 156649, 363, 10, 59, "Text", CellTags->"RefMill86"], Cell[4539325, 156661, 317, 10, 59, "Text", CellTags->"RefMoni80"], Cell[4539645, 156673, 378, 13, 35, "Text", CellTags->"RefMorB75"], Cell[4540026, 156688, 307, 9, 59, "Text", CellTags->"RefNied86"], Cell[4540336, 156699, 349, 10, 59, "Text", CellTags->"RefNybR93"], Cell[4540688, 156711, 429, 12, 59, "Text", CellTags->"RefOdly85"], Cell[4541120, 156725, 292, 9, 59, "Text", CellTags->"RefPatt75"], Cell[4541415, 156736, 343, 10, 59, "Text", CellTags->"RefPera86"], Cell[4541761, 156748, 498, 15, 60, "Text", CellTags->"RefPohH78"], Cell[4542262, 156765, 243, 9, 34, "Text", CellTags->"RefPoll75"], Cell[4542508, 156776, 283, 9, 34, "Text", CellTags->"RefPoll78"], Cell[4542794, 156787, 334, 10, 59, "Text", CellTags->"RefRabi79"], Cell[4543131, 156799, 277, 9, 34, "Text", CellTags->"RefRabi80a"], Cell[4543411, 156810, 262, 9, 34, "Text", CellTags->"RefRabi80b"], Cell[4543676, 156821, 277, 9, 34, "Text", CellTags->"RefRisL79"], Cell[4543956, 156832, 326, 10, 59, "Text", CellTags->"RefRivSA78"], Cell[4544285, 156844, 253, 9, 34, "Text", CellTags->"RefRose84"], Cell[4544541, 156855, 254, 9, 34, "Text", CellTags->"RefRuep86"], Cell[4544798, 156866, 366, 10, 59, "Text", CellTags->"RefSatA98"], Cell[4545167, 156878, 257, 9, 34, "Text", CellTags->"RefSchne96"], Cell[4545427, 156889, 384, 10, 59, "Text", CellTags->"RefSchno90"], Cell[4545814, 156901, 333, 12, 34, "Text", CellTags->"RefSchno91"], Cell[4546150, 156915, 308, 10, 59, "Text", CellTags->"RefScho95"], Cell[4546461, 156927, 264, 9, 34, "Text", CellTags->"RefSham79"], Cell[4546728, 156938, 326, 10, 59, "Text", CellTags->"RefSham82"], Cell[4547057, 156950, 275, 9, 34, "Text", CellTags->"RefShan49"], Cell[4547335, 156961, 260, 9, 34, "Text", CellTags->"RefShap83"], Cell[4547598, 156972, 254, 9, 34, "Text", CellTags->"RefSilv86"], Cell[4547855, 156983, 264, 10, 34, "Text", CellTags->"RefSilv98"], Cell[4548122, 156995, 302, 9, 59, "Text", CellTags->"RefSilT92"], Cell[4548427, 157006, 348, 10, 59, "Text", CellTags->"RefSimm92"], Cell[4548778, 157018, 273, 9, 34, "Text", CellTags->"RefSmar98"], Cell[4549054, 157029, 274, 9, 34, "Text", CellTags->"RefSolS77"], Cell[4549331, 157040, 250, 9, 34, "Text", CellTags->"RefStin95"], Cell[4549584, 157051, 351, 9, 59, "Text", CellTags->"RefSugK76"], Cell[4549938, 157062, 382, 11, 59, "Text", CellTags->"RefvTbu88"], Cell[4550323, 157075, 385, 11, 59, "Text", CellTags->"RefVaud98"], Cell[4550711, 157088, 567, 19, 59, "Text", CellTags->"RefVerT97"], Cell[4551281, 157109, 261, 9, 34, "Text", CellTags->"RefWell99"], Cell[4551545, 157120, 296, 9, 59, "Text", CellTags->"RefWien90"], Cell[4551844, 157131, 311, 9, 59, "Text", CellTags->"RefZivL77"], Cell[4552158, 157142, 317, 9, 59, "Text", CellTags->"RefZivL78"] }, Closed]], Cell[CellGroupData[{ Cell[4552512, 157156, 69, 1, 36, "Chapter", CellTags->"Chap Notations"], Cell[4552584, 157159, 4798, 178, 698, "Text", PageBreakBelow->True], Cell[4557385, 157339, 3900, 161, 526, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4561322, 157505, 49, 1, 36, "Chapter", CellTags->"Chap Index"], Cell[4561374, 157508, 20, 0, 45, "Section"], Cell[4561397, 157510, 4231, 174, 860, "Text"], Cell[4565631, 157686, 5695, 234, 1113, "Text"], Cell[4571329, 157922, 20, 0, 45, "Section"], Cell[4571352, 157924, 2589, 131, 592, "Text"], Cell[4573944, 158057, 20, 0, 45, "Section"], Cell[4573967, 158059, 11886, 527, 2810, "Text"], Cell[4585856, 158588, 20, 0, 45, "Section"], Cell[4585879, 158590, 4320, 207, 1030, "Text", PageBreakBelow->True], Cell[4590202, 158799, 20, 0, 45, "Section"], Cell[4590225, 158801, 2603, 113, 616, "Text"], Cell[4592831, 158916, 64, 2, 45, "Section"], Cell[4592898, 158920, 3136, 144, 763, "Text"], Cell[4596037, 159066, 64, 2, 45, "Section"], Cell[4596104, 159070, 2770, 123, 713, "Text"], Cell[4598877, 159195, 20, 0, 45, "Section"], Cell[4598900, 159197, 827, 35, 153, "Text", PageBreakBelow->False], Cell[4599730, 159234, 71, 2, 45, "Section", PageBreakAbove->True, PageBreakBelow->Automatic], Cell[4599804, 159238, 3453, 162, 762, "Text"], Cell[4603260, 159402, 20, 0, 45, "Section"], Cell[4603283, 159404, 584, 25, 128, "Text", PageBreakBelow->False], Cell[4603870, 159431, 44, 1, 45, "Section", PageBreakAbove->False], Cell[4603917, 159434, 1479, 64, 323, "Text", PageBreakBelow->False], Cell[4605399, 159500, 44, 1, 45, "Section", PageBreakAbove->False], Cell[4605446, 159503, 3753, 165, 890, "Text"], Cell[4609202, 159670, 20, 0, 45, "Section"], Cell[4609225, 159672, 3724, 159, 884, "Text", PageBreakBelow->False], Cell[4612952, 159833, 20, 0, 45, "Section"], Cell[4612975, 159835, 1089, 49, 226, "Text"], Cell[4614067, 159886, 88, 3, 45, "Section", PageBreakAbove->False], Cell[4614158, 159891, 2039, 93, 494, "Text", PageBreakBelow->False], Cell[4616200, 159986, 44, 1, 45, "Section", PageBreakAbove->False], Cell[4616247, 159989, 6746, 293, 1518, "Text"], Cell[4622996, 160284, 20, 0, 45, "Section"], Cell[4623019, 160286, 758, 34, 177, "Text", PageBreakBelow->False], Cell[4623780, 160322, 43, 1, 45, "Section", PageBreakAbove->True], Cell[4623826, 160325, 3204, 144, 787, "Text"], Cell[4627033, 160471, 20, 0, 45, "Section"], Cell[4627056, 160473, 7580, 343, 1835, "Text"], Cell[4634639, 160818, 20, 0, 45, "Section"], Cell[4634662, 160820, 2111, 97, 518, "Text"], Cell[4636776, 160919, 20, 0, 45, "Section"], Cell[4636799, 160921, 1019, 46, 226, "Text"], Cell[4637821, 160969, 20, 0, 45, "Section"], Cell[4637844, 160971, 847, 38, 226, "Text"], Cell[4638694, 161011, 20, 0, 45, "Section"], Cell[4638717, 161013, 880, 37, 202, "Text"], Cell[4639600, 161052, 20, 0, 45, "Section"], Cell[4639623, 161054, 242, 8, 31, "Text"], Cell[4639868, 161064, 20, 0, 45, "Section"], Cell[4639891, 161066, 210, 9, 31, "Text"], Cell[4640104, 161077, 20, 0, 45, "Section"], Cell[4640127, 161079, 544, 24, 128, "Text"] }, Closed]] } ] *) (* End of internal cache information *)