(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 7.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 25847, 655] NotebookOptionsPosition[ 24625, 617] NotebookOutlinePosition[ 25059, 635] CellTagsIndexPosition[ 25016, 632] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[BoxData[ RowBox[{"SetDirectory", "[", RowBox[{"NotebookDirectory", "[", "]"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{"read", " ", "plaintext", " ", "inputs"}], "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"inputs", "=", RowBox[{"StringSplit", "[", RowBox[{"ReadList", "[", RowBox[{"\"\\"", ",", "String"}], "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"is", "=", RowBox[{ RowBox[{ RowBox[{"StringTrim", "[", RowBox[{"#", ",", "\"\<0x\>\""}], "]"}], "&"}], "/@", "inputs"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"inputs", "=", RowBox[{"Map", "[", RowBox[{ RowBox[{ RowBox[{"FromDigits", "[", RowBox[{"#", ",", "16"}], "]"}], "&"}], ",", "is", ",", RowBox[{"{", "2", "}"}]}], "]"}]}], ";"}]}]}]], "Input", CellChangeTimes->{{3.513065164153782*^9, 3.513065164701598*^9}, { 3.51306956390343*^9, 3.513069593104686*^9}, {3.5130699021288524`*^9, 3.5130699027752953`*^9}, {3.513072041709684*^9, 3.5130720429273796`*^9}, { 3.6047750649215713`*^9, 3.6047750684215765`*^9}, {3.6047751308016634`*^9, 3.6047751699517183`*^9}, {3.604775205431768*^9, 3.604775209171773*^9}, { 3.6047753763720074`*^9, 3.604775378742011*^9}, {3.604775445462104*^9, 3.6047755065721893`*^9}, {3.60477563539237*^9, 3.604775664782411*^9}, { 3.604775717942486*^9, 3.6047757458425245`*^9}, {3.604775813222619*^9, 3.6047760178839054`*^9}, 3.604776217714185*^9, {3.611654553014601*^9, 3.611654555544605*^9}, 3.6576111564330072`*^9, {3.7204347847718115`*^9, 3.7204347932733574`*^9}}], Cell[BoxData[{ RowBox[{"Length", "[", "inputs", "]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"inputs", "[", RowBox[{"[", RowBox[{"1", ",", "All"}], "]"}], "]"}], "//", RowBox[{ RowBox[{"BaseForm", "[", RowBox[{"#", ",", "16"}], "]"}], "&"}], " ", RowBox[{"(*", RowBox[{"debug", ":", " ", RowBox[{"print", " ", "the", " ", "first", " ", "block"}]}], "*)"}]}]}], "Input", CellChangeTimes->{{3.60477614246408*^9, 3.604776148824089*^9}, { 3.7204352933027515`*^9, 3.720435305065805*^9}}], Cell[BoxData[ RowBox[{"recLen", "=", RowBox[{ RowBox[{"Import", "[", RowBox[{"\"\\"", ",", "\"\\""}], "]"}], "[", RowBox[{"[", RowBox[{"1", ",", "1"}], "]"}], "]"}], RowBox[{"(*", RowBox[{ "read", " ", "length", " ", "of", " ", "one", " ", "complete", " ", "trace"}], "*)"}]}]], "Input", CellChangeTimes->{{3.6047725781640882`*^9, 3.6047726245241537`*^9}, { 3.6047728509444704`*^9, 3.6047728549544764`*^9}, {3.6047728903545256`*^9, 3.604772892964529*^9}, {3.60477367922663*^9, 3.6047736850566387`*^9}, { 3.6047764424945*^9, 3.6047764426545*^9}, {3.611654395614381*^9, 3.6116544204244156`*^9}, {3.6116544546444635`*^9, 3.6116545073645372`*^9}, {3.611656982271825*^9, 3.6116569830418262`*^9}, 3.657611148657194*^9, 3.6576112471096745`*^9, {3.7204334339389772`*^9, 3.720433436988076*^9}, {3.720433614531517*^9, 3.7204336175115733`*^9}, 3.720434584600828*^9, {3.7204348191751294`*^9, 3.7204348743819485`*^9}, { 3.7204349530964828`*^9, 3.7204349543014317`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"(*", " ", RowBox[{ RowBox[{ "prepare", " ", "to", " ", "read", " ", "parts", " ", "of", " ", "traces", "\[IndentingNewLine]", "start"}], " ", "=", " ", RowBox[{ RowBox[{ "number", " ", "of", " ", "samples", " ", "to", " ", "skip", " ", "at", " ", "the", " ", "start", " ", "of", " ", "each", " ", "trace", "\[IndentingNewLine]", "len"}], " ", "=", " ", RowBox[{ RowBox[{ "number", " ", "of", " ", "samples", " ", "to", " ", "keep", " ", "from", " ", "each", " ", "trace", "\[IndentingNewLine]", "count"}], " ", "=", " ", RowBox[{ "number", " ", "of", " ", "traces", " ", "to", " ", "read"}]}]}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"start", "=", "0"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"len", "=", "recLen"}], ";"}], RowBox[{"(*", RowBox[{ "CHANGE", " ", "to", " ", "the", " ", "length", " ", "of", " ", "the", " ", "first", " ", "round"}], "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"count", "=", "10"}], ";", RowBox[{"(*", RowBox[{ RowBox[{"CHANGE", " ", "to", " ", RowBox[{"Length", "[", "inputs", "]"}]}], ";", " ", RowBox[{"for", " ", "the", " ", "attack"}]}], "*)"}], "\[IndentingNewLine]", RowBox[{"type", "=", "\"\\""}]}]}]}]], "Input", CellChangeTimes->{{3.6047725781640882`*^9, 3.6047726245241537`*^9}, { 3.6047728509444704`*^9, 3.6047728549544764`*^9}, {3.6047728903545256`*^9, 3.604772892964529*^9}, {3.60477367922663*^9, 3.6047736850566387`*^9}, { 3.6047764424945*^9, 3.6047764426545*^9}, {3.611654395614381*^9, 3.6116544204244156`*^9}, {3.6116544546444635`*^9, 3.6116545073645372`*^9}, {3.611656982271825*^9, 3.6116569830418262`*^9}, 3.657611148657194*^9, 3.6576112471096745`*^9, {3.7204334339389772`*^9, 3.720433436988076*^9}, {3.720433614531517*^9, 3.7204336175115733`*^9}, 3.720434584600828*^9, {3.7204348191751294`*^9, 3.7204350410331383`*^9}, { 3.720435726616678*^9, 3.720435735879939*^9}, {3.7204393408982005`*^9, 3.720439433030507*^9}, 3.72043946895192*^9}], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"t", "=", RowBox[{"ConstantArray", "[", RowBox[{"0.", ",", RowBox[{"{", RowBox[{"count", ",", "len"}], "}"}]}], "]"}]}], ";"}], " ", RowBox[{"(*", RowBox[{"prepare", " ", "empty", " ", "matrix"}], "*)"}]}], "\n", RowBox[{ RowBox[{"f", "=", RowBox[{"OpenRead", "[", RowBox[{"\"\\"", ",", RowBox[{"BinaryFormat", "\[Rule]", "True"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"For", "[", RowBox[{ RowBox[{"i", "=", "1"}], ",", RowBox[{"i", "\[LessEqual]", "count"}], ",", RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"BinaryReadList", "[", RowBox[{"f", ",", "type", ",", "start"}], "]"}], ";", RowBox[{"(*", "skip", "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"t", "[", RowBox[{"[", "i", "]"}], "]"}], "=", RowBox[{"N", "[", RowBox[{"BinaryReadList", "[", RowBox[{"f", ",", "type", ",", "len"}], "]"}], "]"}]}], ";", RowBox[{"(*", RowBox[{"read", " ", "interesting", " ", "part"}], "*)"}], "\[IndentingNewLine]", RowBox[{"BinaryReadList", "[", RowBox[{"f", ",", "type", ",", RowBox[{"recLen", "-", RowBox[{"(", RowBox[{"start", "+", "len"}], ")"}]}]}], "]"}], ";"}]}], RowBox[{"(*", "skip", "*)"}], "\[IndentingNewLine]", "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"Close", "[", "f", "]"}], ";"}]}], "Input", CellChangeTimes->{{3.6047736543465953`*^9, 3.6047737432467194`*^9}, { 3.604773840806856*^9, 3.6047738437368603`*^9}, 3.6047763663443937`*^9, { 3.7204350706630774`*^9, 3.7204351113945007`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"Dimensions", "[", "t", "]"}], RowBox[{"(*", RowBox[{"dimensions", " ", "of", " ", "matrix", " ", "of", " ", "traces"}], "*)"}]}]], "Input", CellChangeTimes->{{3.657611200974016*^9, 3.657611203442487*^9}, { 3.720435139439351*^9, 3.7204351499092684`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"mt", "=", RowBox[{"Mean", "[", RowBox[{"Transpose", "[", "t", "]"}], "]"}]}], ";"}], " ", RowBox[{"(*", RowBox[{"remove", " ", "mean", " ", "of", " ", "each", " ", "trace", " ", RowBox[{"(", "detrend", ")"}]}], "*)"}]}], "\[IndentingNewLine]", RowBox[{ RowBox[{"t", "=", RowBox[{"t", "-", "mt"}]}], ";"}]}], "Input", CellChangeTimes->{{3.513064701337701*^9, 3.5130647223900642`*^9}, { 3.5130691259617333`*^9, 3.5130691476566343`*^9}, {3.697802894461648*^9, 3.6978029010809946`*^9}, {3.720435204500185*^9, 3.720435232348072*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"ListLinePlot", "[", RowBox[{ RowBox[{"t", "[", RowBox[{"[", "1", "]"}], "]"}], ",", RowBox[{"PlotRange", "\[Rule]", "All"}]}], "]"}], RowBox[{"(*", RowBox[{"plot", " ", "the", " ", "1", "st", " ", "trace"}], "*)"}]}]], "Input", CellChangeTimes->{{3.513059525407263*^9, 3.5130595320064497`*^9}, { 3.5130597927680807`*^9, 3.5130597934028053`*^9}, {3.5130607553441668`*^9, 3.513060770237745*^9}, {3.513060805087077*^9, 3.5130608247957764`*^9}, { 3.513064529241294*^9, 3.5130645554105177`*^9}, {3.5130646262800045`*^9, 3.5130646414577446`*^9}, {3.513064908861528*^9, 3.5130649090265565`*^9}, 3.5130690322353106`*^9, {3.611656491884932*^9, 3.6116564951749363`*^9}, { 3.720435152775014*^9, 3.720435178730044*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"ListLinePlot", "[", RowBox[{"t", "[", RowBox[{"[", RowBox[{"All", ",", RowBox[{"1", ";;", "100"}]}], "]"}], "]"}], "]"}], RowBox[{"(*", RowBox[{"plot", " ", "zoomed", " ", "overlapping", " ", "trace"}], "*)"}]}]], "Input", CellChangeTimes->{ 3.5130651127205505`*^9, 3.5130690498250046`*^9, 3.5130691784642324`*^9, { 3.7204352499893413`*^9, 3.7204352709064436`*^9}}], Cell[BoxData[ RowBox[{"(*", " ", RowBox[{ RowBox[{"STOP", ":", " ", RowBox[{ "Select", " ", "the", " ", "interesting", " ", "part", " ", "of", " ", "traces"}]}], ",", " ", RowBox[{ RowBox[{"change", " ", "start"}], "="}], ",", " ", RowBox[{"len", "="}], ",", " ", RowBox[{"count", "=", " ", RowBox[{"...", " ", RowBox[{"above", "."}]}]}]}], " ", "*)"}]], "Input", CellChangeTimes->{{3.720439262833274*^9, 3.7204392959636936`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{ RowBox[{"**", "**", "**", "**", "**"}], "*", " ", "Define", " ", "useful", " ", "functions"}], " ", "***********)"}], "\[IndentingNewLine]", RowBox[{"(*", RowBox[{"setup", " ", "AES", " ", "SBOX"}], "*)"}], "\[IndentingNewLine]", RowBox[{ StyleBox[ RowBox[{ RowBox[{ "ss", "=", "\"\<0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, \ 0x2B, 0xFE, 0xD7, 0xAB, 0x76,\n 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, \ 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,\n 0xB7, 0xFD, 0x93, \ 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,\ \n 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, \ 0xEB, 0x27, 0xB2, 0x75,\n 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, \ 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,\n 0x53, 0xD1, 0x00, 0xED, \ 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,\n \ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, \ 0x3C, 0x9F, 0xA8,\n 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, \ 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,\n 0xCD, 0x0C, 0x13, 0xEC, 0x5F, \ 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,\n 0x60, \ 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, \ 0x0B, 0xDB,\n 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, \ 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,\n 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, \ 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,\n 0xBA, 0x78, \ 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, \ 0x8A,\n 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, \ 0xB9, 0x86, 0xC1, 0x1D, 0x9E,\n 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, \ 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,\n 0x8C, 0xA1, 0x89, \ 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, \ 0x16\>\""}], ";"}], FontSize->9], "\[IndentingNewLine]", RowBox[{ RowBox[{"sss", "=", RowBox[{"StringTrim", "[", RowBox[{ RowBox[{"StringTrim", "[", RowBox[{"StringSplit", "[", RowBox[{"ss", ",", "\"\<,\>\""}], "]"}], "]"}], ",", "\"\<0x\>\""}], "]"}]}], ";", RowBox[{"(*", RowBox[{"convert", " ", "to", " ", "hex", " ", "strings"}], "*)"}], "\[IndentingNewLine]", RowBox[{"SubBytes", "=", RowBox[{"Map", "[", RowBox[{ RowBox[{ RowBox[{"FromDigits", "[", RowBox[{"#", ",", "16"}], "]"}], "&"}], ",", "sss"}], "]"}]}], ";", RowBox[{"(*", RowBox[{"convert", " ", "to", " ", "integers"}], "*)"}], "\[IndentingNewLine]", RowBox[{"ClearAll", "[", "SBOX", "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"SBOX", "[", "a_", "]"}], ":=", RowBox[{"SubBytes", "[", RowBox[{"[", RowBox[{"a", "+", "1"}], "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SBOX", "[", "0", "]"}], "\[Equal]", "16^^63", RowBox[{"(*", RowBox[{"test", " ", "SBOX", RowBox[{"(", "0", ")"}]}], "*)"}]}]}]}]], "Input", CellChangeTimes->{{3.611654569214624*^9, 3.6116546224046984`*^9}, 3.720435287858545*^9, {3.7204391212751875`*^9, 3.72043914322598*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"ClearAll", "[", "HammingWeight", "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"HammingWeight", "[", "x_", "]"}], ":=", RowBox[{"DigitCount", "[", RowBox[{"x", ",", "2", ",", "1"}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{"HammingWeight", "[", "16^^00", "]"}], "\[IndentingNewLine]", RowBox[{"HammingWeight", "[", "16^^FF", "]"}], "\[IndentingNewLine]", RowBox[{"HammingWeight", "[", RowBox[{"{", RowBox[{"16^^A3", ",", "16^^00", ",", "16^^21"}], "}"}], "]"}]}], "Input", CellChangeTimes->{{3.6116554925799284`*^9, 3.611655515599961*^9}, 3.6116556132500973`*^9, {3.611655674950184*^9, 3.6116556795801907`*^9}, { 3.6116557152702403`*^9, 3.6116557190102453`*^9}, {3.61165586224049*^9, 3.6116558682004986`*^9}, 3.611656188129399*^9, {3.720435635640376*^9, 3.7204356859751062`*^9}, {3.7204359822956524`*^9, 3.7204360272497416`*^9}, {3.720436612207198*^9, 3.7204366371002493`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{ RowBox[{ "**", "**", "**", "**", "**", "**", "**", "**", "**", "**", "**", "**", "**"}], "*", " ", "Attack", " ", "the", " ", "first", " ", "key", " ", RowBox[{ "byte", " ", "**", "**", "**", "**", "**", "**", "**", "**", "**", "**", "**", "**", "**"}]}], "*****)"}], "\[IndentingNewLine]", RowBox[{"(*", " ", RowBox[{ "You", " ", "need", " ", "to", " ", "have", " ", "selected", " ", "the", " ", "interesting", " ", "parts", " ", "of", " ", "measured", " ", "traces", " ", "for", " ", "correlation"}], " ", "*)"}]}]], "Input", CellChangeTimes->{{3.7204391531928515`*^9, 3.720439218197921*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{ "Select", " ", "the", " ", "first", " ", "byte", " ", "of", " ", "each", " ", "input"}], "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"d", "=", RowBox[{"inputs", "[", RowBox[{"[", RowBox[{ RowBox[{"1", ";;", "count"}], ",", "1"}], "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"d", "[", RowBox[{"[", RowBox[{"1", ";;", "20"}], "]"}], "]"}], "//", RowBox[{ RowBox[{"BaseForm", "[", RowBox[{"#", ",", "16"}], "]"}], "&"}]}]}]}]], "Input", CellChangeTimes->{{3.720436066249104*^9, 3.720436073200232*^9}, { 3.7204361291892776`*^9, 3.720436140346721*^9}, {3.720437898533883*^9, 3.7204379207177186`*^9}, {3.7204379911764402`*^9, 3.7204380042089243`*^9}, { 3.7204380452344737`*^9, 3.7204380454299173`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{"Generate", " ", "key", " ", "hypotheses"}], "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"k", "=", RowBox[{"Range", "[", RowBox[{"0", ",", "255"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"k", "[", RowBox[{"[", RowBox[{"1", ";;", "20"}], "]"}], "]"}], "//", RowBox[{ RowBox[{"BaseForm", "[", RowBox[{"#", ",", "16"}], "]"}], "&"}]}]}]}]], "Input", CellChangeTimes->{{3.7204363069291754`*^9, 3.720436313709281*^9}, 3.720436529424485*^9, {3.7204380153299246`*^9, 3.7204380488776207`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{ "XOR", " ", "each", " ", "data", " ", "byte", " ", "with", " ", "each", " ", "key"}], "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"xmat", "=", RowBox[{"Outer", "[", RowBox[{"BitXor", ",", "d", ",", "k"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"xmat", "[", RowBox[{"[", RowBox[{ RowBox[{"1", ";;", "10"}], ",", RowBox[{"1", ";;", "10"}]}], "]"}], "]"}], "//", "MatrixForm"}], "//", RowBox[{ RowBox[{"BaseForm", "[", RowBox[{"#", ",", "16"}], "]"}], "&"}]}]}]}]], "Input", CellChangeTimes->{{3.7204378406581306`*^9, 3.720437873889809*^9}, { 3.7204380578574905`*^9, 3.72043808961254*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{ "Substitute", " ", "with", " ", "SBOX", " ", "all", " ", "XORed", " ", "values"}], "*)"}], "\[IndentingNewLine]", RowBox[{"smat", "=", RowBox[{"Map", "[", RowBox[{"?", RowBox[{ RowBox[{ RowBox[{",?];", "\n", RowBox[{"smat", "[", RowBox[{"[", RowBox[{ RowBox[{"1", ";;", "10"}], ",", RowBox[{"1", ";;", "10"}]}], "]"}], "]"}]}], "//", "MatrixForm"}], "//", RowBox[{ RowBox[{"BaseForm", "[", RowBox[{"#", ",", "16"}], "]"}], "&"}]}]}]}]}]}]], "Input", CellChangeTimes->{{3.7204364937533484`*^9, 3.7204365216630898`*^9}, { 3.7204381098511887`*^9, 3.720438147519025*^9}, {3.7204381799849195`*^9, 3.72043818617476*^9}, 3.7204385169275365`*^9, {3.720438846096431*^9, 3.720438866277361*^9}}, EmphasizeSyntaxErrors->True], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{"Compute", " ", "Hamming", " ", RowBox[{"Weights", " ", "--"}], " ", "the", " ", "matrix", " ", "of", " ", "hypothetical", " ", "power", " ", "consumption"}], "*)"}], "\[IndentingNewLine]", RowBox[{"hmat", "=", RowBox[{"Map", "[", RowBox[{"?", RowBox[{ RowBox[{",?];", "\n", RowBox[{"hmat", "[", RowBox[{"[", RowBox[{ RowBox[{"1", ";;", "10"}], ",", RowBox[{"1", ";;", "10"}]}], "]"}], "]"}]}], "//", "MatrixForm"}]}]}]}]}]], "Input", CellChangeTimes->{{3.720436564076136*^9, 3.720436573148843*^9}, 3.7204366713173647`*^9, {3.720437434578974*^9, 3.7204374489522295`*^9}, { 3.720438195365692*^9, 3.720438208866293*^9}, {3.7204389027292747`*^9, 3.72043890395277*^9}, {3.7204390240388007`*^9, 3.720439046425144*^9}}, EmphasizeSyntaxErrors->True], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{"Compute", " ", "the", " ", "correlation", " ", RowBox[{"matrix", " ", "--"}], " ", "correlate", " ", "the", " ", "hypotheses", " ", "with", " ", "measured", " ", "traces"}], "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"Dimensions", "[", "hmat", "]"}], "\[IndentingNewLine]", RowBox[{"Dimensions", "[", "t", "]"}], "\[IndentingNewLine]", RowBox[{"corr", "=", RowBox[{"Correlation", "[", RowBox[{"?", RowBox[{ RowBox[{",?];", "\[IndentingNewLine]", RowBox[{"corr", "[", RowBox[{"[", RowBox[{ RowBox[{"1", ";;", "10"}], ",", RowBox[{"1", ";;", "5"}]}], "]"}], "]"}]}], "//", "MatrixForm"}]}]}]}]}]}]], "Input", CellChangeTimes->{{3.7204366947095766`*^9, 3.7204367233700914`*^9}, { 3.7204374518595214`*^9, 3.7204374574933295`*^9}, {3.720438914786463*^9, 3.720438916653968*^9}, {3.7204389933387804`*^9, 3.7204390078214912`*^9}, { 3.720439049151926*^9, 3.7204390634049435`*^9}}, EmphasizeSyntaxErrors->True], Cell[BoxData[ RowBox[{"acorr", "=", RowBox[{"Abs", "[", RowBox[{ RowBox[{"?", RowBox[{"];", "\n", "maxcorr"}]}], "=", RowBox[{"Max", "[", RowBox[{ RowBox[{"?", RowBox[{"]", "\n", RowBox[{"{", RowBox[{"kindex", ",", "kpos"}], "}"}]}]}], "=", RowBox[{ RowBox[{ RowBox[{ RowBox[{"Position", "[", RowBox[{"acorr", ",", "maxcorr"}], "]"}], "[", RowBox[{"[", "1", "]"}], "]"}], "\[IndentingNewLine]", "key"}], "=", RowBox[{"kindex", "-", RowBox[{"1", "\[IndentingNewLine]", RowBox[{"BaseForm", "[", RowBox[{"key", ",", "16"}], "]"}]}]}]}]}]}]}]}]}]], "Input", CellChangeTimes->{{3.7204368809288006`*^9, 3.720436892960585*^9}, 3.72043825056677*^9, {3.720438930572811*^9, 3.720438933656006*^9}}, EmphasizeSyntaxErrors->True], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{"Find", " ", "the", " ", "correlation", " ", "peak", RowBox[{"(", "s", ")"}], " ", "in", " ", "the", " ", "trace", " ", "plot"}], "*)"}], "\[IndentingNewLine]", RowBox[{"ListLinePlot", "[", RowBox[{"corr", "[", RowBox[{"[", RowBox[{"?", "]],PlotRange\[Rule]All]"}]}]}]}]}]], "Input", CellChangeTimes->{{3.720437664036378*^9, 3.720437668858079*^9}, { 3.7204389531392536`*^9, 3.7204389679561768`*^9}}, EmphasizeSyntaxErrors->True], Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{"Break", " ", "all", " ", "key", " ", RowBox[{"bytes", "!"}]}], "*)"}], "\[IndentingNewLine]", RowBox[{"(*", "\[IndentingNewLine]", RowBox[{ RowBox[{"kk", "=", RowBox[{"{", "}"}]}], ";", "\[IndentingNewLine]", RowBox[{"For", "[", RowBox[{ RowBox[{"ki", "=", "1"}], ",", RowBox[{"ki", "\[LessEqual]", "16"}], ",", RowBox[{"ki", "++"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"AppendTo", "[", RowBox[{"kk", ",", "key"}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{ "\"\\"", ",", " ", "\"\< at position \>\"", ",", " ", "\"\< with correlation \>\""}], "]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"BaseForm", "[", RowBox[{"kk", ",", "16"}], "]"}], "\[IndentingNewLine]", RowBox[{"FromCharacterCode", "[", "kk", "]"}]}]}], "\[IndentingNewLine]", "*)"}]}]], "Input", CellChangeTimes->{{3.5130696191801653`*^9, 3.5130696330894313`*^9}, { 3.513069906023134*^9, 3.513069908271037*^9}, {3.513070107142098*^9, 3.5130701234115644`*^9}, 3.513072048142866*^9, 3.6116553510297303`*^9, { 3.6116554562198772`*^9, 3.6116554859399195`*^9}, {3.6116555178099637`*^9, 3.611655619500106*^9}, {3.6116556523401523`*^9, 3.6116557420702777`*^9}, { 3.61165577646435*^9, 3.6116557933043737`*^9}, {3.611655836908444*^9, 3.6116558509384637`*^9}, {3.6116559727286634`*^9, 3.611655978018671*^9}, { 3.6116560616130557`*^9, 3.6116560931031*^9}, {3.6116561897594013`*^9, 3.6116562043994217`*^9}, {3.611656539034998*^9, 3.6116565408050003`*^9}, { 3.6977984386017427`*^9, 3.697798459144847*^9}, {3.6977985148794065`*^9, 3.6977985833439856`*^9}, {3.697798645947137*^9, 3.6977986636405888`*^9}, { 3.697801698213625*^9, 3.697801776406316*^9}, {3.697801810083218*^9, 3.697801884028393*^9}, {3.697801985851428*^9, 3.69780202420901*^9}, { 3.6978021615495586`*^9, 3.697802209294267*^9}, {3.697802468640934*^9, 3.6978024749311595`*^9}, {3.720172526518976*^9, 3.7201725707035656`*^9}, 3.720433541599208*^9, {3.7204356258210487`*^9, 3.720435626626298*^9}, { 3.7204357862180295`*^9, 3.7204357878500185`*^9}, {3.7204358320926394`*^9, 3.7204358376169844`*^9}, {3.720435896349845*^9, 3.720435901189147*^9}, { 3.7204372729625654`*^9, 3.720437349472704*^9}, {3.7204383744797044`*^9, 3.720438395475066*^9}, {3.720438574027712*^9, 3.720438574545648*^9}, { 3.7204389746913157`*^9, 3.7204389843366966`*^9}}] }, PrintingStyleEnvironment->"SlideShow", WindowSize->{1264, 777}, WindowMargins->{{0, Automatic}, {0, Automatic}}, ShowSelection->True, Magnification:>1.25 Inherited, FrontEndVersion->"9.0 for Microsoft Windows (64-bit) (January 25, 2013)", StyleDefinitions->"Default.nb" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[545, 20, 104, 2, 36, "Input"], Cell[652, 24, 1604, 37, 106, "Input"], Cell[2259, 63, 528, 14, 60, "Input"], Cell[2790, 79, 1050, 20, 36, "Input"], Cell[3843, 101, 2189, 48, 198, "Input"], Cell[6035, 151, 1732, 46, 198, "Input"], Cell[7770, 199, 302, 7, 36, "Input"], Cell[8075, 208, 613, 14, 60, "Input"], Cell[8691, 224, 794, 16, 36, "Input"], Cell[9488, 242, 439, 12, 36, "Input"], Cell[9930, 256, 481, 13, 36, "Input"], Cell[10414, 271, 3361, 69, 543, "Input"], Cell[13778, 342, 988, 19, 129, "Input"], Cell[14769, 363, 697, 15, 60, "Input"], Cell[15469, 380, 878, 24, 83, "Input"], Cell[16350, 406, 619, 18, 83, "Input"], Cell[16972, 426, 757, 22, 83, "Input"], Cell[17732, 450, 901, 25, 83, "Input"], Cell[18636, 477, 899, 22, 83, "Input"], Cell[19538, 501, 1080, 25, 129, "Input"], Cell[20621, 528, 874, 24, 129, "Input"], Cell[21498, 554, 512, 12, 60, "Input"], Cell[22013, 568, 2608, 47, 244, "Input"] } ] *) (* End of internal cache information *)