{ "cells": [ { "cell_type": "markdown", "id": "0745c7fd", "metadata": {}, "source": [ "# Three classic encripted messages with increasing security\n", "\n", "\n", "\n", "## 1 - A monoalphabetical cipher\n", "\n", "The first one \"msg1\" is the result of applying a simple mono-alphabetic transformation.\n", "\n", "Statistics for the occurence of each character in texts of this kind (portuguese) are given by the dictionary PTstats\n", "\n", "### Before executing *anything* you need to obtain a file named \"work??.py\" and rename it as \"data.py\"." ] }, { "cell_type": "code", "execution_count": 1, "id": "6085bf54", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import string\n", "from data import *\n", "\n", "display(bar_chart([Stats[c] for c in string.ascii_lowercase]))" ] }, { "cell_type": "markdown", "id": "d37c9240", "metadata": {}, "source": [ "The message was converted to a numerical code: 'a'->1, 'b'->2,..." ] }, { "cell_type": "markdown", "id": "3a9fb0a5", "metadata": {}, "source": [ "### It should be quite easy to decript this message without almost any programming involved" ] }, { "cell_type": "code", "execution_count": null, "id": "585e4270", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "bd7b00a4", "metadata": {}, "source": [ "## 2 - A simple Vigenère message\n", "\n", "In the next message, \"msg2\", a simple Vigènere was used. The \"msg2\" was coded the same manner as \"msg1\". \n", "\n", "We suggest that you use the Friedman test to determine the period (the size of the key).\n", "\n", "Friedman proved that, for a class of cyphers that includes Vigenère, given two (long) texts, $T$ and $T'$, of the same size ($|T|=|T'|$), and with the same coincidence index ($Ic(T)=Ic(T')$), their correspondent cyphertexts $E(T)$ and $E(T')$ satisfy\n", "\n", "$$K(T,T')=\\sum_i \\frac{\\delta(E(T)_i,E(T')_i)}{|T|}\\sim Ic(T),$$\n", "where\n", "\n", "$$\\delta(a,b)=\\begin{cases}1& \\text{if }a=b,\\\\\n", " 0& \\text{otherwise,}\n", " \\end{cases}$$\n", "$T_i$ denotes the $i$th letter of $T$, and $Ic(T)$ the coincidence index of $T$. \n", "\n", "\n", "Thus, if $P^j(T)$ denotes the $j$th circular permutation of $T$, and $C$ is criptogram resulting from applying a periodic cypher of period $p$, the succesion $(K(C,P^i(C))_i$ should have local maximums that differ by exactly $p$. \n", "\n", "Knowing the period, one can study the statistic of occurences of each $\\{C_{pi+j}\\mid i\\in\\mathbb{N}\\}_{j