7e8f74c8008dd29dfb0894cf45659635ea2b3d80
[cipher-tools.git] / 2014 / 2014-challenge7.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 1,
6 "metadata": {
7 "collapsed": false
8 },
9 "outputs": [],
10 "source": [
11 "import os,sys,inspect\n",
12 "currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))\n",
13 "parentdir = os.path.dirname(currentdir)\n",
14 "sys.path.insert(0,parentdir) \n",
15 "\n",
16 "import matplotlib.pyplot as plt\n",
17 "import pandas as pd\n",
18 "import collections\n",
19 "import string\n",
20 "%matplotlib inline\n",
21 "\n",
22 "from cipherbreak import *\n",
23 "\n",
24 "c7a = open('7a.ciphertext').read()\n",
25 "c7b = open('7b.ciphertext').read()"
26 ]
27 },
28 {
29 "cell_type": "code",
30 "execution_count": 2,
31 "metadata": {
32 "collapsed": false
33 },
34 "outputs": [
35 {
36 "data": {
37 "text/plain": [
38 "<matplotlib.axes._subplots.AxesSubplot at 0x7fe4081aa6d8>"
39 ]
40 },
41 "execution_count": 2,
42 "metadata": {},
43 "output_type": "execute_result"
44 },
45 {
46 "data": {
47 "image/png": "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\n",
48 "text/plain": [
49 "<matplotlib.figure.Figure at 0x7fe408191f98>"
50 ]
51 },
52 "metadata": {},
53 "output_type": "display_data"
54 }
55 ],
56 "source": [
57 "freqs = pd.Series(english_counts)\n",
58 "freqs.plot(kind='bar')"
59 ]
60 },
61 {
62 "cell_type": "code",
63 "execution_count": 3,
64 "metadata": {
65 "collapsed": false
66 },
67 "outputs": [
68 {
69 "data": {
70 "text/plain": [
71 "<matplotlib.axes._subplots.AxesSubplot at 0x7fe3dd3dba20>"
72 ]
73 },
74 "execution_count": 3,
75 "metadata": {},
76 "output_type": "execute_result"
77 },
78 {
79 "data": {
80 "image/png": "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\n",
81 "text/plain": [
82 "<matplotlib.figure.Figure at 0x7fe3dd4129e8>"
83 ]
84 },
85 "metadata": {},
86 "output_type": "display_data"
87 }
88 ],
89 "source": [
90 "freqs_7a = pd.Series(collections.Counter([l.lower() for l in c7a if l in string.ascii_letters]))\n",
91 "freqs_7a.plot(kind='bar')"
92 ]
93 },
94 {
95 "cell_type": "code",
96 "execution_count": 4,
97 "metadata": {
98 "collapsed": false
99 },
100 "outputs": [
101 {
102 "data": {
103 "text/plain": [
104 "<matplotlib.axes._subplots.AxesSubplot at 0x7fe3dd3b1390>"
105 ]
106 },
107 "execution_count": 4,
108 "metadata": {},
109 "output_type": "execute_result"
110 },
111 {
112 "data": {
113 "image/png": "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\nQmCC\n",
114 "text/plain": [
115 "<matplotlib.figure.Figure at 0x7fe3dd45a240>"
116 ]
117 },
118 "metadata": {},
119 "output_type": "display_data"
120 }
121 ],
122 "source": [
123 "freqs_7b = pd.Series(collections.Counter([l.lower() for l in c7b if l in string.ascii_letters]))\n",
124 "freqs_7b.plot(kind='bar')"
125 ]
126 },
127 {
128 "cell_type": "code",
129 "execution_count": 5,
130 "metadata": {
131 "collapsed": false
132 },
133 "outputs": [
134 {
135 "data": {
136 "text/plain": [
137 "'veyjmyjkrzilysyjeydorulcsrcjnmoiddeugurlogfsnwcrlhckhghmwkejxlyktlagflalvtmgkyyomvlmgkyjosfdrzepwaqgnrzeqzinoaqforkcsltjwdussrzarlhcnajneqzabbakeebatjgoiklgcerzebjidlwmgdussnmljwdgftmlhceeazalasksnbtlmukcvtfwilderhrckuksbjqtfwcpwwfsdydrcsdwsbyfdmfeblhcneqkejohguhussjmciqfmjuqoirzosltfwsfapuwwmmlbzatwhyvnmadcstfstrzedvafsdzwelgpcjaraneanrzeqwwylepkscshmjscaslglmfgcjakqsrwrwlhcuurswyqollhcktyjbmsrbkibwcjwapwdyfapwamxapgulvfgnekwtcjsqiuyjeuatfsdgktgfcravcharlepfodtojlsdssrwncvtmjegffmjccvdcukndarwsgkaukokwtfanediiwtfasmfaqmbpwsamekasqaolscmmpjwodqeyjsyyouzellhcqfgltcvajgcydsfapuatfsjsjypagewdgfsnwcraolkyqleklhcveacpjstckcyfcyjrwscpsncveqaglwdrgdchlmqaljotsrceorwonwrylebnefacjwdckiefebxopmnbwrqwamhepstggnqawykajjeyvyagnawrlwdytosltfwrcxepwnawtmlhcuazdeqanrzejssrhaplodlhcxdydoeturlhcfevlscutggnfsskwrcsljqwmjrgwdgliqwnajynleboirzakgrckeamrceobafgwdyesagtpsnqhoqatggnaapfwryfdrwljkuqohyltfwyuwrcjeydlwmprgwfstgvollulvepktyfdgkhmotfwwfglcssqwmzdygkpmoepwdrzeqgrrgfagmnmtgfgrzeweuqlbcvogfggkrcsljqillelkitwalvwmmlbtupftfjosyhytarlepqilvawkillhyltgeerzegjillepuenlmgyhrforuaruhyfyrzilyuqwfsdbsltfwyasnfsrbdyfsvczihsciwdydoaslqgciwtgftfwmgvdjwodlhcgccsnasnwguewtkwaazaplsfgwgfgrzebwenkeyuazdeqanrzepwgggngvolliksggferzeskwgdlzwanjozdekturatksylwebkokwdghlmeaaqtmyerlhcxujdcmnepsgceankfpgmrzemealagmnepfmcftgxiyergyhratgkillhcarzwsranrwrcktqlondawslmfguwajdhyneydorlojgsczepw'"
138 ]
139 },
140 "execution_count": 5,
141 "metadata": {},
142 "output_type": "execute_result"
143 }
144 ],
145 "source": [
146 "c7as = sanitise(c7a)\n",
147 "c7as"
148 ]
149 },
150 {
151 "cell_type": "code",
152 "execution_count": 6,
153 "metadata": {
154 "collapsed": false
155 },
156 "outputs": [
157 {
158 "data": {
159 "text/plain": [
160 "'anwaecnndrtwtanireoahsrdntieerdctewayerevaaarpioerobsedescrehlaoitithsdtrinosepeplthtnidtwsduledlhotpeaterhaaredeoaiodtahregerothwhtsureteeinwigiresetpowicooonitseudseechacteofiileonewiotacteodteuneahsedaptryemronmomlexontkemeoyvitsteenhantrertieineotndlhpoplyitewitrsedeevdycfrmnsnaypinmteeneeinahinepritedehveleaorelllvmocnahncepherohjuuvehautathttetoasipowwneedselopgdeslfedterfcaatehjasdtrprleseeretetecneorrsgckamiiwaefutiashaongcthsrenrehtrsthhaceinwtprloghetodaeraloeedeatsomldwedtwefsbelevpdteonoignsavftegsebomcehatietnrsptonthusorecredendcetlwaehesedrncveracuhoihaleinaemeunherdesttstasipedeyleeemtiisiigothntssfolnitretrwhemtkhhswtorcssnererohteencsapeblircnthuleofenrsromrnshmaddaodeatihioroutwevthapeceetovterdleaditewdottttcatkmbhtheicwantnisedwatxankeabovoanmswlprgaispodfogndpedeswrdacttrefhdesyaberretlavod'"
161 ]
162 },
163 "execution_count": 6,
164 "metadata": {},
165 "output_type": "execute_result"
166 }
167 ],
168 "source": [
169 "c7bs = sanitise(c7b)\n",
170 "c7bs"
171 ]
172 },
173 {
174 "cell_type": "code",
175 "execution_count": 7,
176 "metadata": {
177 "collapsed": false
178 },
179 "outputs": [
180 {
181 "data": {
182 "text/plain": [
183 "('say', -1726.4679903722085)"
184 ]
185 },
186 "execution_count": 7,
187 "metadata": {},
188 "output_type": "execute_result"
189 }
190 ],
191 "source": [
192 "key_a, score = vigenere_frequency_break(c7as)\n",
193 "key_a, score"
194 ]
195 },
196 {
197 "cell_type": "code",
198 "execution_count": 8,
199 "metadata": {
200 "collapsed": false
201 },
202 "outputs": [
203 {
204 "data": {
205 "text/plain": [
206 "'dear mark things area lot clearer now i flew out to inspect the ship myself last night and took a good look around the reason the ship was not scuttled was that the valves had jammed it looks like the driftwood was pulled into the mechanism and blocked the inlet presumably the crew had already abandoned the vessel which was lucky for us without the ship we would have had no idea that the fda had been operating in these waters seahorse is no longer a mystery the cutaway on the starboard side cleared an area of around five meters square with a distinctive pattern of bolts fastened to reinforced deck plates i saw something like this on a sub rescue mission a couple of years ago when they fitted a local ship with a jury rigged inspection system the deck plates can carry a crane designed to deploy an rova remote operated vehicle designed for undersea operations i was already concerned about the reference to the cables in the last part of the fda log but the next section has me really worried it is encrypted with a more secure modified amsco transposition cipher and tells us what they were really up to what i dont understand is how the whole assembly is powered the sort of computing they must be doing is really intensive and would burn through a battery in days in that time their intercept might not catch anything useful but they can hardly have hijacked a local socket in the middle of the ocean can you get me a chart showing the deepsea cables in the region i dont imagine the us will be a problem but it may need some diplomacy to get the full coverage maps from the omani government if i am right it is in their best interests to playalong we all have alot to lose here'"
207 ]
208 },
209 "execution_count": 8,
210 "metadata": {},
211 "output_type": "execute_result"
212 }
213 ],
214 "source": [
215 "' '.join(segment(vigenere_decipher(c7as, key_a)))"
216 ]
217 },
218 {
219 "cell_type": "code",
220 "execution_count": 9,
221 "metadata": {
222 "collapsed": false
223 },
224 "outputs": [
225 {
226 "data": {
227 "text/plain": [
228 "(((1, 2, 0, 4, 3), (2, 1), <AmscoFillStyle.continuous: 1>),\n",
229 " -1902.8377732825452)"
230 ]
231 },
232 "execution_count": 9,
233 "metadata": {},
234 "output_type": "execute_result"
235 }
236 ],
237 "source": [
238 "key_b, score = amsco_break(c7bs)\n",
239 "key_b, score"
240 ]
241 },
242 {
243 "cell_type": "code",
244 "execution_count": 12,
245 "metadata": {
246 "collapsed": false
247 },
248 "outputs": [
249 {
250 "data": {
251 "text/plain": [
252 "'phase seven we approached the cable junction undercover of night with nautilus at an elevation of three feet towing seahorse to starboard comms interception showed that we remained undetected and seahorse was deployed at operating depth the various layers of armoured protection were removed from the cable and as expected once the steel jacket was removed the other layers provided little resistance the divers entered the water and cut into the core to insert the optical repeaters linking them back to the man in the middle unit which was powered up and fully tested initial tests showed that it was operating as expected and three keys have already been recovered from the omani transmissions with daylight approaching the remaining tests were postponed for the following night and the ship returned to deeper waters where it remained at low deck height the divers were left at seahorse to decompress slowly and will be recovered tomorrow once the final tests have been concluded'"
253 ]
254 },
255 "execution_count": 12,
256 "metadata": {},
257 "output_type": "execute_result"
258 }
259 ],
260 "source": [
261 "' '.join(segment(amsco_transposition_decipher(c7bs, key_b[0], fillpattern=key_b[1], fillstyle=key_b[2])))"
262 ]
263 },
264 {
265 "cell_type": "code",
266 "execution_count": 11,
267 "metadata": {
268 "collapsed": false,
269 "scrolled": true
270 },
271 "outputs": [
272 {
273 "data": {
274 "text/plain": [
275 "['cable',\n",
276 " 'facto',\n",
277 " 'facts',\n",
278 " 'gabon',\n",
279 " 'hafts',\n",
280 " 'hefts',\n",
281 " 'ibexs',\n",
282 " 'kabul',\n",
283 " 'lacys',\n",
284 " 'ladys',\n",
285 " 'laius',\n",
286 " 'lefts',\n",
287 " 'macon',\n",
288 " 'macro',\n",
289 " 'macys',\n",
290 " 'malts',\n",
291 " 'melon',\n",
292 " 'melts',\n",
293 " 'negro',\n",
294 " 'oahus',\n",
295 " 'obeys',\n",
296 " 'obits',\n",
297 " 'odets',\n",
298 " 'pacts',\n",
299 " 'pants',\n",
300 " 'pelts',\n",
301 " 'pints',\n",
302 " 'piotr',\n",
303 " 'pious',\n",
304 " 'plots',\n",
305 " 'plows',\n",
306 " 'ploys',\n",
307 " 'rafts',\n",
308 " 'rants',\n",
309 " 'remus',\n",
310 " 'rents',\n",
311 " 'riots',\n",
312 " 'scout',\n",
313 " 'shout',\n",
314 " 'snout',\n",
315 " 'cabbed',\n",
316 " 'cabbie',\n",
317 " 'cabbys',\n",
318 " 'cabral',\n",
319 " 'dabble',\n",
320 " 'faeroe',\n",
321 " 'gabbro',\n",
322 " 'ibexes',\n",
323 " 'jaguar',\n",
324 " 'kaboom',\n",
325 " 'kaftan',\n",
326 " 'lacuna',\n",
327 " 'lagoon',\n",
328 " 'lefter',\n",
329 " 'legume',\n",
330 " 'macaws',\n",
331 " 'magyar',\n",
332 " 'malays',\n",
333 " 'maltas',\n",
334 " 'mellon',\n",
335 " 'negevs',\n",
336 " 'nellys',\n",
337 " 'nelson',\n",
338 " 'odious',\n",
339 " 'paddys',\n",
340 " 'panzas',\n",
341 " 'peggys',\n",
342 " 'pelves',\n",
343 " 'pennys',\n",
344 " 'photos',\n",
345 " 'pinups',\n",
346 " 'qantas',\n",
347 " 'rabats',\n",
348 " 'rallys',\n",
349 " 'refuse',\n",
350 " 'refute',\n",
351 " 'remuss',\n",
352 " 'renews',\n",
353 " 'repute',\n",
354 " 'scouts',\n",
355 " 'shouts',\n",
356 " 'snouts',\n",
357 " 'cabbage',\n",
358 " 'cabrera',\n",
359 " 'dabbled',\n",
360 " 'gadwall',\n",
361 " 'ladonna',\n",
362 " 'leftest',\n",
363 " 'madonna',\n",
364 " 'malayan',\n",
365 " 'million',\n",
366 " 'papacys',\n",
367 " 'pellets',\n",
368 " 'penneys',\n",
369 " 'qantass',\n",
370 " 'ragtags',\n",
371 " 'refuses',\n",
372 " 'refuter',\n",
373 " 'regrets',\n",
374 " 'rennets',\n",
375 " 'renters',\n",
376 " 'reroute',\n",
377 " 'sallust',\n",
378 " 'macassar',\n",
379 " 'mahatmas',\n",
380 " 'mahayana',\n",
381 " 'nanettes',\n",
382 " 'palatals',\n",
383 " 'phosphor',\n",
384 " 'reenters',\n",
385 " 'phosphors',\n",
386 " 'sinusitis',\n",
387 " 'malayalams',\n",
388 " 'sinusitiss']"
389 ]
390 },
391 "execution_count": 11,
392 "metadata": {},
393 "output_type": "execute_result"
394 }
395 ],
396 "source": [
397 "transpositions[key_b[0]]"
398 ]
399 },
400 {
401 "cell_type": "code",
402 "execution_count": null,
403 "metadata": {
404 "collapsed": false
405 },
406 "outputs": [],
407 "source": []
408 }
409 ],
410 "metadata": {
411 "kernelspec": {
412 "display_name": "Python 3",
413 "language": "python",
414 "name": "python3"
415 },
416 "language_info": {
417 "codemirror_mode": {
418 "name": "ipython",
419 "version": 3
420 },
421 "file_extension": ".py",
422 "mimetype": "text/x-python",
423 "name": "python",
424 "nbconvert_exporter": "python",
425 "pygments_lexer": "ipython3",
426 "version": "3.4.3"
427 }
428 },
429 "nbformat": 4,
430 "nbformat_minor": 0
431 }