├── .github
└── FUNDING.yml
├── LICENSE
├── README.md
├── en
└── 1. introduction
│ ├── .ipynb_checkpoints
│ └── 1.1-brief-historical-review-and-context-checkpoint.ipynb
│ └── 1.1-brief-historical-review-and-context.ipynb
└── pt
└── 1. introducao
├── .ipynb_checkpoints
└── 1.1-breve-revisao-historica-e-contexto-checkpoint.ipynb
├── 1.1-breve-revisao-historica-e-contexto.ipynb
└── extras
├── .ipynb_checkpoints
├── 1.1.1-cifra-deslocamento-cesar-checkpoint.ipynb
└── 1.1.4-experimento-dupla-fenda-thomas-young-1801-checkpoint.ipynb
├── 1.1.1-cifra-deslocamento-cesar.ipynb
└── 1.1.4-experimento-dupla-fenda-thomas-young-1801.ipynb
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: qiskrypt
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: qiskrypt
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: ['https://www.paypal.com/paypalme/qiskrypt', 'https://www.buymeacoffee.com/qiskrypt']
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Qiskrypt
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Qiskrypt - Tutorials
2 |
3 |
4 |
5 | #### Statistics and Status
6 |
7 | [](https://github.com/qiskrypt)
8 | [](https://github.com/qiskrypt/qiskrypt-tutorials/fork)
9 | [](https://github.com/qiskrypt/qiskrypt-tutorials/stargazers)
10 | [](https://github.com/qiskrypt/qiskrypt-tutorials/watchers)
11 |
12 | [](https://github.com/qiskrypt)
13 | [](https://github.com/qiskrypt)
14 | [](https://github.com/qiskrypt/qiskrypt/)
15 | [](https://qiskrypt.github.io/)
16 |
17 | [](https://github.com/qiskrypt/qiskrypt-tutorials/)
18 | [](https://github.com/qiskrypt/qiskrypt-tutorials/)
19 | [](https://github.com/qiskrypt/qiskrypt-tutorials/)
20 | [](https://github.com/qiskrypt/qiskrypt-tutorials/)
21 |
22 | [](https://github.com/qiskrypt/qiskrypt-tutorials/)
23 | [](https://github.com/qiskrypt/qiskrypt-tutorials/)
24 | [](https://github.com/qiskrypt/qiskrypt-tutorials/)
25 | [](https://github.com/qiskrypt/qiskrypt-tutorials/)
26 |
27 | [](https://github.com/rubenandrebarreiro/)
28 |
29 | [](https://ciencias.ulisboa.pt/pt/perfil/ansouto)
30 | [](http://sqig.math.ist.utl.pt/pmat/)
31 | [](https://www.math.tecnico.ulisboa.pt/~npaunkov/)
32 | [](http://www.walterkrawec.org/)
33 |
34 | [](https://liberapay.com/qiskrypt/)
35 | [](https://liberapay.com/qiskrypt/)
36 | [](https://github.com/qiskrypt/qiskrypt-tutorials/archive/master.zip)
37 | [](https://github.com/qiskrypt/qiskrypt-tutorials/archive/master.zip)
38 |
39 |
40 | #### Launch the GitHub Repository in Binder
41 |
42 | [](https://mybinder.org/v2/gh/qiskrypt/qiskrypt-tutorials/HEAD)
43 |
44 |
45 | #### Languages, Frameworks, Libraries & IDEs
46 |
47 | [](https://www.anaconda.com/)
48 | [](https://www.python.org/)
49 | [](https://pypi.org/)
50 |
51 | [](https://www.ibm.com/quantum-computing/)
52 | [](https://qiskit.org/)
53 |
54 | [](https://numpy.org/)
55 | [](https://www.sympy.org/)
56 | [](https://www.scipy.org/)
57 | [](https://pandas.pydata.org/)
58 |
59 | [](https://www.shellscript.sh/)
60 | [](https://jupyter.org/)
61 | [](https://www.jetbrains.com/pycharm/)
62 |
63 |
64 | #### Funding
65 |
66 | []()
67 | [](https://buymeacoffee.com/qiskrypt)
68 | [](https://liberapay.com/qiskrypt/donate)
69 | [](https://www.patreon.com/qiskrypt)
70 | [](https://www.paypal.me/qiskrypt)
71 |
72 |
73 | #### Social
74 |
75 | [](https://www.facebook.com/qiskrypt)
76 | []()
77 | []()
78 | []()
79 | [](https://github.com/qiskrypt/)
80 |
81 |
82 | #### Contacts & Chatting
83 |
84 | [](mailto:qiskrypt@gmail.com)
85 | []()
86 | []()
87 | []()
88 | []()
89 |
--------------------------------------------------------------------------------
/en/1. introduction/.ipynb_checkpoints/1.1-brief-historical-review-and-context-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "text/html": [
11 | ""
12 | ],
13 | "text/plain": [
14 | ""
15 | ]
16 | },
17 | "metadata": {},
18 | "output_type": "display_data"
19 | }
20 | ],
21 | "source": [
22 | "from IPython.core.display import display, HTML\n",
23 | "display(HTML(\"\"))"
24 | ]
25 | },
26 | {
27 | "cell_type": "markdown",
28 | "metadata": {},
29 | "source": [
30 | "# 1.1. Brief Historical Review and Context"
31 | ]
32 | },
33 | {
34 | "cell_type": "markdown",
35 | "metadata": {},
36 | "source": [
37 | "Since the ancient times, the humanity always felt the need of represent and exchange information, in private, what made some remarkable theoretical and scientific fields to emerge, over the ages, such as, **_Information Science_**, **_Computer Science_**, **_Cryptography_** or the **_Internet_** itself."
38 | ]
39 | },
40 | {
41 | "cell_type": "markdown",
42 | "metadata": {},
43 | "source": [
44 | "From the need of exchange information in private, the field of **_Cryptography_** emerged as the study of secure communication techniques, allowing only the sender and an authorized receiver of a message, to view its content, by the both processes of:\n",
45 | "* **_Encryption_**:\n",
46 | " * Scrambling ordinary text (also known as, _plain-text_), into what is known as, _cipher-text_ to be sent, which is the procedure made by the _sender_;\n",
47 | "* **_Decryption_**:\n",
48 | " * Recovering of the _cipher-text_ back again to its original state (i.e., the _plain-text_), which is the procedure made by the _receiver_;"
49 | ]
50 | },
51 | {
52 | "cell_type": "markdown",
53 | "metadata": {},
54 | "source": [
55 | "In fact, the first evidence of **_Cryptography_** came from **_Ancient Egyptians_**, namely with complex **_Hieroglyphs_** and **_Pictograms_**, to write secret messages, where the secret encoding was only known by the scribes, while the earliest computational tool known, was the **_Sumerian Abacus_**, in **_Babylon_**."
56 | ]
57 | },
58 | {
59 | "cell_type": "markdown",
60 | "metadata": {},
61 | "source": [
62 | "These events date back to _4,000_ years ago, and since then, these needs were becoming more crucial than ever, in people's daily lives, where they need to be connected worldwide."
63 | ]
64 | },
65 | {
66 | "cell_type": "markdown",
67 | "metadata": {},
68 | "source": [
69 | "The emergence of the **_Cryptography_**, over the years, required to be introduced the concepts of:\n",
70 | "* **_Encryption Algorithm_**:\n",
71 | " * The rules for the _encryption_ and _decryption_ of the information;\n",
72 | "* **_Secret Key_**:\n",
73 | " * The secret input parameter of the _encryption algorithm_;"
74 | ]
75 | },
76 | {
77 | "cell_type": "markdown",
78 | "metadata": {},
79 | "source": [
80 | "Over the early times until the begining of the 20th century, the popularity of **_Cryptography_** has increased severely, with _cryptographic primitives_ becoming increasingly stronger (i.e., more difficult of being _forcibly_ _decrypted_, without authorization, commonly referred as, being \"_broken_\" or \"_cracked_\")."
81 | ]
82 | },
83 | {
84 | "cell_type": "markdown",
85 | "metadata": {},
86 | "source": [
87 | "The **_Transposition_**/**_Shifting_** and **_Substitution Ciphers_** dominated most of this era, being the **_Caesar Shift_**, the **_Polyalphabetic Substitution_**, **_Vigenère Ciphers_**, some notable examples of it."
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "Years later, **_Thomas Young_** demonstrated that, the light can behave as both, _waves_ and _particles_, at the same time, in his **_Double-Slit Experiment_** \\[1, 2\\], in _1801_, and started to unveil the probabilistic nature of **_Quantum Mechanical_** phenomena, in the modern physics field."
95 | ]
96 | },
97 | {
98 | "cell_type": "markdown",
99 | "metadata": {},
100 | "source": [
101 | "In the beginning of the 20th century, in _1900_ and _1901_, **_Max Planck_** suggested that, the radiation, being, either matter or light, is quantized, in discrete amounts \\[3–6\\], giving rise to the term _quantum_ itself, while **_Albert Einstein_** proposed the concept of a _quantum of light_, later known as, _photon_, as also, the observation of the _particle-wave duality of photons_ \\[7–10\\], in _1905_ and _1906_."
102 | ]
103 | },
104 | {
105 | "cell_type": "markdown",
106 | "metadata": {},
107 | "source": [
108 | "At the start of the **_WW1_**, during the event of the **_Zimmermann Telegram_**, were introduced two important aspects in **_Cryptography_**, such as, every time that a cryptographic primitive is \"_broken_\", a stronger one is developed and the reveal of the success in \"_breaking_\" a cipher takes times to provide adversarial advantage, from which, arise the concept of **_Cryptanalysis_**."
109 | ]
110 | },
111 | {
112 | "cell_type": "markdown",
113 | "metadata": {},
114 | "source": [
115 | "In _1919_, **_Ernest Rutherford_** found the first evidence ever for a _proton_, while in _1924_, **_Louis de Broglie_** proposed that matter has wave properties."
116 | ]
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "metadata": {},
121 | "source": [
122 | "In other hand, **_Wolfgang Pauli_** formulated the _exclusion principle_ for _electrons_, in an _atom_, in _1925_ and, one year later, **_Erwin Schrödinger_** developed the _wave mechanics_ and **_Max Born_** gave a probability interpretation of **_Quantum Mechanics_** \\[11–15\\]."
123 | ]
124 | },
125 | {
126 | "cell_type": "markdown",
127 | "metadata": {},
128 | "source": [
129 | "Later on, **_Werner Heisenberg_** formulated the **_Principle of Uncertainty_**, in _1927_, and **_Paul Dirac_** combined **_Quantum Mechanics_** and **_Special Relativity_** of **_Albert Einstein_**, in _1928_, what made them became well established, in _1930_, demonstrating which ones are the _fundamental particles_ \\[16, 17\\]."
130 | ]
131 | },
132 | {
133 | "cell_type": "markdown",
134 | "metadata": {},
135 | "source": [
136 | "In _1935_, **_Erwin Schrödinger_** proposed an experiment, known as, the **_Schrodinger's Cat_**, to illustrate the _quantum superposition_ and the **_Copenhagen Interpretation_** of **_Quantum Mechanics_** \\[18\\]."
137 | ]
138 | },
139 | {
140 | "cell_type": "markdown",
141 | "metadata": {},
142 | "source": [
143 | "At the same time, also in _1935_, it was witnessed a change of paradigm on **_Information Science_**, given by the **_Church-Turing Thesis_**, where the idea of the **_Turing Machines_** (or **_Computers_**), was formulated, as any machine that performs effective computational methods \\[19–22\\]."
144 | ]
145 | },
146 | {
147 | "cell_type": "markdown",
148 | "metadata": {},
149 | "source": [
150 | "During the **_WW2_**, the **_Cryptography_** was relevant, with the **_Enigma Machine_**, being \"_broken_\" by the **_Polish_** \"**_Cryptographic Bomb_**\", but it was only made public more than _20_ years later."
151 | ]
152 | },
153 | {
154 | "cell_type": "markdown",
155 | "metadata": {},
156 | "source": [
157 | "Other remarkable events, were the development of **_Colossus_** **_Mark 1_** and **_Mark 2_**, in _1943_ and _1944_, respectively, the introduction of the **_von Neumann Architecture_**, by **_John von Neumann_**, in _1945_, as a model for computer architectures, and the development of **_ENIAC_**, by **_John Eckert_** and **_John Mauchly_**, in _1946_, as the first programmable, electronic, general-purpose digital computer."
158 | ]
159 | },
160 | {
161 | "cell_type": "markdown",
162 | "metadata": {},
163 | "source": [
164 | "A huge contribution for the computational processing growth, was the introduction of the **_Semi-Conductor Devices_** and the **_Transistors_**, by **_John Bardeen_**, **_Walter Brattain_** and **_William Shockley_**, at **_Bell Labs_**, in _1947_, which gave them the **_Nobel Prize_**, in _1956_, allowing the study of new more complex problems, making the field of **_Computational Complexity Theory_** to emerge."
165 | ]
166 | },
167 | {
168 | "cell_type": "markdown",
169 | "metadata": {},
170 | "source": [
171 | "The **_ARPA_** (**_DARPA_**), was launched by the **_Defence Department of USA_**, in _1958_, financing also the **_ARPANET_**, between _1962_ and _1966_, as the first ever _wide-area_ _packet-switching network_, enabling access to remote computers, leading to the beginning of the **_Internet_** itself, while in _1969_, **_BBN_** developed the **_IMP_**s and then, was sent the first message ever, over the **_Internet_**."
172 | ]
173 | },
174 | {
175 | "cell_type": "markdown",
176 | "metadata": {},
177 | "source": [
178 | "In _1973_, the **_NBS_** (**_NIST_**) made a public call for a _cryptographic primitive_ to be adopted as the _standard_ by the **_USA Government_**, with the **_DES_** being approved and becoming the global _standard_ for _encryption_, while for the first time ever, an _encryption algorithm_ was disclosed for public analysis."
179 | ]
180 | },
181 | {
182 | "cell_type": "markdown",
183 | "metadata": {},
184 | "source": [
185 | "Since then, other _cryptographic primitives_ being proposed, along the years, such as, **_AES_**, **_3DES_**, **_Twofish_**, **_Blowfish_**, **_Serpent_**, **_RC4_**, **_IDEA_** \\[23–26\\], known as, _symmetric key ciphers_."
186 | ]
187 | },
188 | {
189 | "cell_type": "markdown",
190 | "metadata": {},
191 | "source": [
192 | "In 1981, the **_NSF_** expanded **_ARPANET_** to the **_Computer Science_** community, when it funded the **_CSNET_** and adopted the **_TCP/IP Protocol_**, as a _standard_, in _1983_."
193 | ]
194 | },
195 | {
196 | "cell_type": "markdown",
197 | "metadata": {},
198 | "source": [
199 | "Additionally, the **_BBN_** assumed **_CSNET_**'s operation management, in _1984_, while the **_ARPANET_** launched the **_NSFNET_** in _1985_, with the aim of connecting all the **_University Computer Science Departments_**, across the **_USA_**."
200 | ]
201 | },
202 | {
203 | "cell_type": "markdown",
204 | "metadata": {},
205 | "source": [
206 | "The **_Internet_** and the _communications_ have a major remark in _1989_, when **_Tim Berners-Lee_**, of **_CERN_**, created the **_HTTP_**, as a _standard_, proposing also, the concept of **_WWW_** in _1990_."
207 | ]
208 | },
209 | {
210 | "cell_type": "markdown",
211 | "metadata": {},
212 | "source": [
213 | "At the beginning of the 21st century, a major management problem was felt, with the growth of the business industry, due to the increasing number of _secret keys_ to be distributed between companies and their customers, in which, handing over the _secret keys_ directly, started to become unbearable."
214 | ]
215 | },
216 | {
217 | "cell_type": "markdown",
218 | "metadata": {},
219 | "source": [
220 | "A solution to this problem was anticipated by **_Whifield Diffie_**, **_Martin Hellman_** and **_Ralph Merkle_** in _1976_, presenting the concept of _key distribution_ \\[27\\]."
221 | ]
222 | },
223 | {
224 | "cell_type": "markdown",
225 | "metadata": {},
226 | "source": [
227 | "This concept of _key distribution_ was different from what is nowadays considered to be a _public-key cryptosystem_, by using _asymmetric keys_ (_pair of keys_), where one key is _public_ and the other one is kept _private_."
228 | ]
229 | },
230 | {
231 | "cell_type": "markdown",
232 | "metadata": {},
233 | "source": [
234 | "This procedure, currently known as the **_Diffie-Hellman_** **_Key Exchange_**, made possible to be established keys, without the need of the two participants share previous information, in advance, allowing an exchange of messages in public, while ensuring _confidentiality_."
235 | ]
236 | },
237 | {
238 | "cell_type": "markdown",
239 | "metadata": {},
240 | "source": [
241 | "In instance, it uses a _modular arithmetic_ and _one-way function_ (1), from which its security relies mostly on the mathematical properties of the **_Discrete Logarithm Problem_** (2), believed to be a computational hard problem, or a **_NP-Intermediate Problem_** (3), and thus, believed to be difficult to \"_break_\"."
242 | ]
243 | },
244 | {
245 | "cell_type": "markdown",
246 | "metadata": {},
247 | "source": [
248 | "Later, in _1977_, **_Ronald Rivest_**, **_Adi Shamir_** and **_Leonard Adleman_**, also proposed the **_RSA Cryptosystem_** \\[28\\], extending the work of **_Diffie_** and **_Hellman_**, where the same \"_public_\" key would be used by anyone to privately communicate with an user."
249 | ]
250 | },
251 | {
252 | "cell_type": "markdown",
253 | "metadata": {},
254 | "source": [
255 | "The **_RSA cryptosystem_** is based on the **_Factorization Problem_** (4), in which its security, relies on the mathematical assumption that, if a _very large_ _prime number_ is used in it, then, it would be extremely difficult to compute the _private-key_, based on the knowledge of the _public-key_, in a reasonable (non exponential) amount of time."
256 | ]
257 | },
258 | {
259 | "cell_type": "markdown",
260 | "metadata": {},
261 | "source": [
262 | "Since then, other remarkable _cryptographic primitives_ were proposed, such as:\n",
263 | "* **_Digital Signatures_**;\n",
264 | "* **_Elliptic-Curve Cryptography_**;\n",
265 | "* **_Interactive Proofs_**;\n",
266 | "* **_Byzantine Agreements_**;\n",
267 | "* **_Multiparty Computations_**;\n",
268 | "* **_Cryptocurrencies_**;\n",
269 | "* **_Blockchains_**;\n",
270 | "* **_Homomorphic Encryption_**;"
271 | ]
272 | },
273 | {
274 | "cell_type": "markdown",
275 | "metadata": {},
276 | "source": [
277 | "Although, the **_1st Quantum Revolution_**, formulated by some notable names, such as, **_Albert Einstein_**, **_Max Plank_**, **_Werner Heisenberg_**, **_Erwin Schrödinger_**, or **_Wolfgang Pauli_**, gave us new rules that govern physical reality, in their fundamental _atomic_ and _subatomic_ levels, during the 20th century."
278 | ]
279 | },
280 | {
281 | "cell_type": "markdown",
282 | "metadata": {},
283 | "source": [
284 | "Now, in the 21th century, the **_2nd Quantum Revolution_** is taking these rules and is using them to develop new powerful technologies, being **_Quantum Computing_**, one of the most remarkable examples of it."
285 | ]
286 | },
287 | {
288 | "cell_type": "markdown",
289 | "metadata": {},
290 | "source": [
291 | "In fact, the physicist **_Richard Feynman_**, winner of the **_Nobel Prize_** in _1965_, claimed, at a certain point, that **_Quantum Computing_** would be the future of **_Computer Science_**, by taking advantage of the application of **_Quantum Mechanics_** to **_Computer Science_** to process information and data \\[54\\]."
292 | ]
293 | },
294 | {
295 | "cell_type": "markdown",
296 | "metadata": {},
297 | "source": [
298 | "From this idea, new research topics emerged, such as:\n",
299 | "* **_Quantum Cryptography_**;\n",
300 | "* **_Quantum Networks_**/**_Quantum Internet_**;\n",
301 | "* **_Quantum Communications_**;\n",
302 | "* **_Quantum Artificial Intelligence_**;\n",
303 | "* **_Quantum Game Theory_**;\n",
304 | "* **_Quantum Machine Learning_**;\n",
305 | "* **_Quantum Deep Learning_**;\n",
306 | "* **_Quantum Cognition_**;\n",
307 | "* **_Quantum Optimization_**;\n",
308 | "* **_Quantum Simulation_**;"
309 | ]
310 | },
311 | {
312 | "cell_type": "markdown",
313 | "metadata": {},
314 | "source": [
315 | "As well, a huge variety of _quantum_ _algorithms_ and _protocols_ were developed, reason why, **_EU_**, **_USA_** and **_China_**, are strongly investing in **_quantum technologies_**, and with great results already achieved \\[60, 61\\]."
316 | ]
317 | },
318 | {
319 | "cell_type": "markdown",
320 | "metadata": {},
321 | "source": [
322 | "***"
323 | ]
324 | },
325 | {
326 | "cell_type": "markdown",
327 | "metadata": {},
328 | "source": [
329 | "### Acronyms:\n",
330 | "* N/A"
331 | ]
332 | },
333 | {
334 | "cell_type": "markdown",
335 | "metadata": {},
336 | "source": [
337 | "***"
338 | ]
339 | },
340 | {
341 | "cell_type": "markdown",
342 | "metadata": {},
343 | "source": [
344 | "### Notes:\n",
345 | "1. N/A\n",
346 | "2. N/A\n",
347 | "3. N/A\n",
348 | "4. N/A"
349 | ]
350 | },
351 | {
352 | "cell_type": "markdown",
353 | "metadata": {},
354 | "source": [
355 | "***"
356 | ]
357 | },
358 | {
359 | "cell_type": "markdown",
360 | "metadata": {},
361 | "source": [
362 | "### References:\n",
363 | "* N/A"
364 | ]
365 | },
366 | {
367 | "cell_type": "markdown",
368 | "metadata": {},
369 | "source": [
370 | "***"
371 | ]
372 | },
373 | {
374 | "cell_type": "markdown",
375 | "metadata": {},
376 | "source": [
377 | "**Last updated on:** June 27, 2021\n",
378 | "\n",
379 | "**Author:** _Rúben André Barreiro_\n",
380 | "\n",
381 | "**Adapted from the Master Dissertation/Thesis:**\n",
382 | "* \"_Semi-Quantum Conference Key Agreement (SQCKA)_\" - 2021\n",
383 | "\n",
384 | "**© Copyright Qiskrypt, 2021, all rights reserved.**"
385 | ]
386 | },
387 | {
388 | "cell_type": "markdown",
389 | "metadata": {},
390 | "source": [
391 | "***"
392 | ]
393 | },
394 | {
395 | "cell_type": "markdown",
396 | "metadata": {},
397 | "source": [
398 | "
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License."
399 | ]
400 | }
401 | ],
402 | "metadata": {
403 | "kernelspec": {
404 | "display_name": "Python 3",
405 | "language": "python",
406 | "name": "python3"
407 | },
408 | "language_info": {
409 | "codemirror_mode": {
410 | "name": "ipython",
411 | "version": 3
412 | },
413 | "file_extension": ".py",
414 | "mimetype": "text/x-python",
415 | "name": "python",
416 | "nbconvert_exporter": "python",
417 | "pygments_lexer": "ipython3",
418 | "version": "3.8.5"
419 | }
420 | },
421 | "nbformat": 4,
422 | "nbformat_minor": 4
423 | }
424 |
--------------------------------------------------------------------------------
/en/1. introduction/1.1-brief-historical-review-and-context.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "text/html": [
11 | ""
12 | ],
13 | "text/plain": [
14 | ""
15 | ]
16 | },
17 | "metadata": {},
18 | "output_type": "display_data"
19 | }
20 | ],
21 | "source": [
22 | "from IPython.core.display import display, HTML\n",
23 | "display(HTML(\"\"))"
24 | ]
25 | },
26 | {
27 | "cell_type": "markdown",
28 | "metadata": {},
29 | "source": [
30 | "# 1.1. Brief Historical Review and Context"
31 | ]
32 | },
33 | {
34 | "cell_type": "markdown",
35 | "metadata": {},
36 | "source": [
37 | "Since the ancient times, the humanity always felt the need of represent and exchange information, in private, what made some remarkable theoretical and scientific fields to emerge, over the ages, such as, **_Information Science_**, **_Computer Science_**, **_Cryptography_** or the **_Internet_** itself."
38 | ]
39 | },
40 | {
41 | "cell_type": "markdown",
42 | "metadata": {},
43 | "source": [
44 | "From the need of exchange information in private, the field of **_Cryptography_** emerged as the study of secure communication techniques, allowing only the sender and an authorized receiver of a message, to view its content, by the both processes of:\n",
45 | "* **_Encryption_**:\n",
46 | " * Scrambling ordinary text (also known as, _plain-text_), into what is known as, _cipher-text_ to be sent, which is the procedure made by the _sender_;\n",
47 | "* **_Decryption_**:\n",
48 | " * Recovering of the _cipher-text_ back again to its original state (i.e., the _plain-text_), which is the procedure made by the _receiver_;"
49 | ]
50 | },
51 | {
52 | "cell_type": "markdown",
53 | "metadata": {},
54 | "source": [
55 | "In fact, the first evidence of **_Cryptography_** came from **_Ancient Egyptians_**, namely with complex **_Hieroglyphs_** and **_Pictograms_**, to write secret messages, where the secret encoding was only known by the scribes, while the earliest computational tool known, was the **_Sumerian Abacus_**, in **_Babylon_**."
56 | ]
57 | },
58 | {
59 | "cell_type": "markdown",
60 | "metadata": {},
61 | "source": [
62 | "These events date back to _4,000_ years ago, and since then, these needs were becoming more crucial than ever, in people's daily lives, where they need to be connected worldwide."
63 | ]
64 | },
65 | {
66 | "cell_type": "markdown",
67 | "metadata": {},
68 | "source": [
69 | "The emergence of the **_Cryptography_**, over the years, required to be introduced the concepts of:\n",
70 | "* **_Encryption Algorithm_**:\n",
71 | " * The rules for the _encryption_ and _decryption_ of the information;\n",
72 | "* **_Secret Key_**:\n",
73 | " * The secret input parameter of the _encryption algorithm_;"
74 | ]
75 | },
76 | {
77 | "cell_type": "markdown",
78 | "metadata": {},
79 | "source": [
80 | "Over the early times until the begining of the 20th century, the popularity of **_Cryptography_** has increased severely, with _cryptographic primitives_ becoming increasingly stronger (i.e., more difficult of being _forcibly_ _decrypted_, without authorization, commonly referred as, being \"_broken_\" or \"_cracked_\")."
81 | ]
82 | },
83 | {
84 | "cell_type": "markdown",
85 | "metadata": {},
86 | "source": [
87 | "The **_Transposition_**/**_Shifting_** and **_Substitution Ciphers_** dominated most of this era, being the **_Caesar Shift_**, the **_Polyalphabetic Substitution_**, **_Vigenère Ciphers_**, some notable examples of it."
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "Years later, **_Thomas Young_** demonstrated that, the light can behave as both, _waves_ and _particles_, at the same time, in his **_Double-Slit Experiment_** \\[1, 2\\], in _1801_, and started to unveil the probabilistic nature of **_Quantum Mechanical_** phenomena, in the modern physics field."
95 | ]
96 | },
97 | {
98 | "cell_type": "markdown",
99 | "metadata": {},
100 | "source": [
101 | "In the beginning of the 20th century, in _1900_ and _1901_, **_Max Planck_** suggested that, the radiation, being, either matter or light, is quantized, in discrete amounts \\[3–6\\], giving rise to the term _quantum_ itself, while **_Albert Einstein_** proposed the concept of a _quantum of light_, later known as, _photon_, as also, the observation of the _particle-wave duality of photons_ \\[7–10\\], in _1905_ and _1906_."
102 | ]
103 | },
104 | {
105 | "cell_type": "markdown",
106 | "metadata": {},
107 | "source": [
108 | "At the start of the **_WW1_**, during the event of the **_Zimmermann Telegram_**, were introduced two important aspects in **_Cryptography_**, such as, every time that a cryptographic primitive is \"_broken_\", a stronger one is developed and the reveal of the success in \"_breaking_\" a cipher takes times to provide adversarial advantage, from which, arise the concept of **_Cryptanalysis_**."
109 | ]
110 | },
111 | {
112 | "cell_type": "markdown",
113 | "metadata": {},
114 | "source": [
115 | "In _1919_, **_Ernest Rutherford_** found the first evidence ever for a _proton_, while in _1924_, **_Louis de Broglie_** proposed that matter has wave properties."
116 | ]
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "metadata": {},
121 | "source": [
122 | "In other hand, **_Wolfgang Pauli_** formulated the _exclusion principle_ for _electrons_, in an _atom_, in _1925_ and, one year later, **_Erwin Schrödinger_** developed the _wave mechanics_ and **_Max Born_** gave a probability interpretation of **_Quantum Mechanics_** \\[11–15\\]."
123 | ]
124 | },
125 | {
126 | "cell_type": "markdown",
127 | "metadata": {},
128 | "source": [
129 | "Later on, **_Werner Heisenberg_** formulated the **_Principle of Uncertainty_**, in _1927_, and **_Paul Dirac_** combined **_Quantum Mechanics_** and **_Special Relativity_** of **_Albert Einstein_**, in _1928_, what made them became well established, in _1930_, demonstrating which ones are the _fundamental particles_ \\[16, 17\\]."
130 | ]
131 | },
132 | {
133 | "cell_type": "markdown",
134 | "metadata": {},
135 | "source": [
136 | "In _1935_, **_Erwin Schrödinger_** proposed an experiment, known as, the **_Schrodinger's Cat_**, to illustrate the _quantum superposition_ and the **_Copenhagen Interpretation_** of **_Quantum Mechanics_** \\[18\\]."
137 | ]
138 | },
139 | {
140 | "cell_type": "markdown",
141 | "metadata": {},
142 | "source": [
143 | "At the same time, also in _1935_, it was witnessed a change of paradigm on **_Information Science_**, given by the **_Church-Turing Thesis_**, where the idea of the **_Turing Machines_** (or **_Computers_**), was formulated, as any machine that performs effective computational methods \\[19–22\\]."
144 | ]
145 | },
146 | {
147 | "cell_type": "markdown",
148 | "metadata": {},
149 | "source": [
150 | "During the **_WW2_**, the **_Cryptography_** was relevant, with the **_Enigma Machine_**, being \"_broken_\" by the **_Polish_** \"**_Cryptographic Bomb_**\", but it was only made public more than _20_ years later."
151 | ]
152 | },
153 | {
154 | "cell_type": "markdown",
155 | "metadata": {},
156 | "source": [
157 | "Other remarkable events, were the development of **_Colossus_** **_Mark 1_** and **_Mark 2_**, in _1943_ and _1944_, respectively, the introduction of the **_von Neumann Architecture_**, by **_John von Neumann_**, in _1945_, as a model for computer architectures, and the development of **_ENIAC_**, by **_John Eckert_** and **_John Mauchly_**, in _1946_, as the first programmable, electronic, general-purpose digital computer."
158 | ]
159 | },
160 | {
161 | "cell_type": "markdown",
162 | "metadata": {},
163 | "source": [
164 | "A huge contribution for the computational processing growth, was the introduction of the **_Semi-Conductor Devices_** and the **_Transistors_**, by **_John Bardeen_**, **_Walter Brattain_** and **_William Shockley_**, at **_Bell Labs_**, in _1947_, which gave them the **_Nobel Prize_**, in _1956_, allowing the study of new more complex problems, making the field of **_Computational Complexity Theory_** to emerge."
165 | ]
166 | },
167 | {
168 | "cell_type": "markdown",
169 | "metadata": {},
170 | "source": [
171 | "The **_ARPA_** (**_DARPA_**), was launched by the **_Defence Department of USA_**, in _1958_, financing also the **_ARPANET_**, between _1962_ and _1966_, as the first ever _wide-area_ _packet-switching network_, enabling access to remote computers, leading to the beginning of the **_Internet_** itself, while in _1969_, **_BBN_** developed the **_IMP_**s and then, was sent the first message ever, over the **_Internet_**."
172 | ]
173 | },
174 | {
175 | "cell_type": "markdown",
176 | "metadata": {},
177 | "source": [
178 | "In _1973_, the **_NBS_** (**_NIST_**) made a public call for a _cryptographic primitive_ to be adopted as the _standard_ by the **_USA Government_**, with the **_DES_** being approved and becoming the global _standard_ for _encryption_, while for the first time ever, an _encryption algorithm_ was disclosed for public analysis."
179 | ]
180 | },
181 | {
182 | "cell_type": "markdown",
183 | "metadata": {},
184 | "source": [
185 | "Since then, other _cryptographic primitives_ being proposed, along the years, such as, **_AES_**, **_3DES_**, **_Twofish_**, **_Blowfish_**, **_Serpent_**, **_RC4_**, **_IDEA_** \\[23–26\\], known as, _symmetric key ciphers_."
186 | ]
187 | },
188 | {
189 | "cell_type": "markdown",
190 | "metadata": {},
191 | "source": [
192 | "In 1981, the **_NSF_** expanded **_ARPANET_** to the **_Computer Science_** community, when it funded the **_CSNET_** and adopted the **_TCP/IP Protocol_**, as a _standard_, in _1983_."
193 | ]
194 | },
195 | {
196 | "cell_type": "markdown",
197 | "metadata": {},
198 | "source": [
199 | "Additionally, the **_BBN_** assumed **_CSNET_**'s operation management, in _1984_, while the **_ARPANET_** launched the **_NSFNET_** in _1985_, with the aim of connecting all the **_University Computer Science Departments_**, across the **_USA_**."
200 | ]
201 | },
202 | {
203 | "cell_type": "markdown",
204 | "metadata": {},
205 | "source": [
206 | "The **_Internet_** and the _communications_ have a major remark in _1989_, when **_Tim Berners-Lee_**, of **_CERN_**, created the **_HTTP_**, as a _standard_, proposing also, the concept of **_WWW_** in _1990_."
207 | ]
208 | },
209 | {
210 | "cell_type": "markdown",
211 | "metadata": {},
212 | "source": [
213 | "At the beginning of the 21st century, a major management problem was felt, with the growth of the business industry, due to the increasing number of _secret keys_ to be distributed between companies and their customers, in which, handing over the _secret keys_ directly, started to become unbearable."
214 | ]
215 | },
216 | {
217 | "cell_type": "markdown",
218 | "metadata": {},
219 | "source": [
220 | "A solution to this problem was anticipated by **_Whifield Diffie_**, **_Martin Hellman_** and **_Ralph Merkle_** in _1976_, presenting the concept of _key distribution_ \\[27\\]."
221 | ]
222 | },
223 | {
224 | "cell_type": "markdown",
225 | "metadata": {},
226 | "source": [
227 | "This concept of _key distribution_ was different from what is nowadays considered to be a _public-key cryptosystem_, by using _asymmetric keys_ (_pair of keys_), where one key is _public_ and the other one is kept _private_."
228 | ]
229 | },
230 | {
231 | "cell_type": "markdown",
232 | "metadata": {},
233 | "source": [
234 | "This procedure, currently known as the **_Diffie-Hellman_** **_Key Exchange_**, made possible to be established keys, without the need of the two participants share previous information, in advance, allowing an exchange of messages in public, while ensuring _confidentiality_."
235 | ]
236 | },
237 | {
238 | "cell_type": "markdown",
239 | "metadata": {},
240 | "source": [
241 | "In instance, it uses a _modular arithmetic_ and _one-way function_ (1), from which its security relies mostly on the mathematical properties of the **_Discrete Logarithm Problem_** (2), believed to be a computational hard problem, or a **_NP-Intermediate Problem_** (3), and thus, believed to be difficult to \"_break_\"."
242 | ]
243 | },
244 | {
245 | "cell_type": "markdown",
246 | "metadata": {},
247 | "source": [
248 | "Later, in _1977_, **_Ronald Rivest_**, **_Adi Shamir_** and **_Leonard Adleman_**, also proposed the **_RSA Cryptosystem_** \\[28\\], extending the work of **_Diffie_** and **_Hellman_**, where the same \"_public_\" key would be used by anyone to privately communicate with an user."
249 | ]
250 | },
251 | {
252 | "cell_type": "markdown",
253 | "metadata": {},
254 | "source": [
255 | "The **_RSA cryptosystem_** is based on the **_Factorization Problem_** (4), in which its security, relies on the mathematical assumption that, if a _very large_ _prime number_ is used in it, then, it would be extremely difficult to compute the _private-key_, based on the knowledge of the _public-key_, in a reasonable (non exponential) amount of time."
256 | ]
257 | },
258 | {
259 | "cell_type": "markdown",
260 | "metadata": {},
261 | "source": [
262 | "Since then, other remarkable _cryptographic primitives_ were proposed, such as:\n",
263 | "* **_Digital Signatures_**;\n",
264 | "* **_Elliptic-Curve Cryptography_**;\n",
265 | "* **_Interactive Proofs_**;\n",
266 | "* **_Byzantine Agreements_**;\n",
267 | "* **_Multiparty Computations_**;\n",
268 | "* **_Cryptocurrencies_**;\n",
269 | "* **_Blockchains_**;\n",
270 | "* **_Homomorphic Encryption_**;"
271 | ]
272 | },
273 | {
274 | "cell_type": "markdown",
275 | "metadata": {},
276 | "source": [
277 | "Although, the **_1st Quantum Revolution_**, formulated by some notable names, such as, **_Albert Einstein_**, **_Max Plank_**, **_Werner Heisenberg_**, **_Erwin Schrödinger_**, or **_Wolfgang Pauli_**, gave us new rules that govern physical reality, in their fundamental _atomic_ and _subatomic_ levels, during the 20th century."
278 | ]
279 | },
280 | {
281 | "cell_type": "markdown",
282 | "metadata": {},
283 | "source": [
284 | "Now, in the 21th century, the **_2nd Quantum Revolution_** is taking these rules and is using them to develop new powerful technologies, being **_Quantum Computing_**, one of the most remarkable examples of it."
285 | ]
286 | },
287 | {
288 | "cell_type": "markdown",
289 | "metadata": {},
290 | "source": [
291 | "In fact, the physicist **_Richard Feynman_**, winner of the **_Nobel Prize_** in _1965_, claimed, at a certain point, that **_Quantum Computing_** would be the future of **_Computer Science_**, by taking advantage of the application of **_Quantum Mechanics_** to **_Computer Science_** to process information and data \\[54\\]."
292 | ]
293 | },
294 | {
295 | "cell_type": "markdown",
296 | "metadata": {},
297 | "source": [
298 | "From this idea, new research topics emerged, such as:\n",
299 | "* **_Quantum Cryptography_**;\n",
300 | "* **_Quantum Networks_**/**_Quantum Internet_**;\n",
301 | "* **_Quantum Communications_**;\n",
302 | "* **_Quantum Artificial Intelligence_**;\n",
303 | "* **_Quantum Game Theory_**;\n",
304 | "* **_Quantum Machine Learning_**;\n",
305 | "* **_Quantum Deep Learning_**;\n",
306 | "* **_Quantum Cognition_**;\n",
307 | "* **_Quantum Optimization_**;\n",
308 | "* **_Quantum Simulation_**;"
309 | ]
310 | },
311 | {
312 | "cell_type": "markdown",
313 | "metadata": {},
314 | "source": [
315 | "As well, a huge variety of _quantum_ _algorithms_ and _protocols_ were developed, reason why, **_EU_**, **_USA_** and **_China_**, are strongly investing in **_quantum technologies_**, and with great results already achieved \\[60, 61\\]."
316 | ]
317 | },
318 | {
319 | "cell_type": "markdown",
320 | "metadata": {},
321 | "source": [
322 | "***"
323 | ]
324 | },
325 | {
326 | "cell_type": "markdown",
327 | "metadata": {},
328 | "source": [
329 | "### Acronyms:\n",
330 | "* N/A"
331 | ]
332 | },
333 | {
334 | "cell_type": "markdown",
335 | "metadata": {},
336 | "source": [
337 | "***"
338 | ]
339 | },
340 | {
341 | "cell_type": "markdown",
342 | "metadata": {},
343 | "source": [
344 | "### Notes:\n",
345 | "1. N/A\n",
346 | "2. N/A\n",
347 | "3. N/A\n",
348 | "4. N/A"
349 | ]
350 | },
351 | {
352 | "cell_type": "markdown",
353 | "metadata": {},
354 | "source": [
355 | "***"
356 | ]
357 | },
358 | {
359 | "cell_type": "markdown",
360 | "metadata": {},
361 | "source": [
362 | "### References:\n",
363 | "* N/A"
364 | ]
365 | },
366 | {
367 | "cell_type": "markdown",
368 | "metadata": {},
369 | "source": [
370 | "***"
371 | ]
372 | },
373 | {
374 | "cell_type": "markdown",
375 | "metadata": {},
376 | "source": [
377 | "**Last updated on:** June 27, 2021\n",
378 | "\n",
379 | "**Author:** _Rúben André Barreiro_\n",
380 | "\n",
381 | "**Adapted from the Master Dissertation/Thesis:**\n",
382 | "* \"_Semi-Quantum Conference Key Agreement (SQCKA)_\" - 2021\n",
383 | "\n",
384 | "**© Copyright Qiskrypt, 2021, all rights reserved.**"
385 | ]
386 | },
387 | {
388 | "cell_type": "markdown",
389 | "metadata": {},
390 | "source": [
391 | "***"
392 | ]
393 | },
394 | {
395 | "cell_type": "markdown",
396 | "metadata": {},
397 | "source": [
398 | "
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License."
399 | ]
400 | }
401 | ],
402 | "metadata": {
403 | "kernelspec": {
404 | "display_name": "Python 3",
405 | "language": "python",
406 | "name": "python3"
407 | },
408 | "language_info": {
409 | "codemirror_mode": {
410 | "name": "ipython",
411 | "version": 3
412 | },
413 | "file_extension": ".py",
414 | "mimetype": "text/x-python",
415 | "name": "python",
416 | "nbconvert_exporter": "python",
417 | "pygments_lexer": "ipython3",
418 | "version": "3.8.5"
419 | }
420 | },
421 | "nbformat": 4,
422 | "nbformat_minor": 4
423 | }
424 |
--------------------------------------------------------------------------------
/pt/1. introducao/.ipynb_checkpoints/1.1-breve-revisao-historica-e-contexto-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "text/html": [
11 | ""
12 | ],
13 | "text/plain": [
14 | ""
15 | ]
16 | },
17 | "metadata": {},
18 | "output_type": "display_data"
19 | }
20 | ],
21 | "source": [
22 | "from IPython.core.display import display, HTML\n",
23 | "display(HTML(\"\"))"
24 | ]
25 | },
26 | {
27 | "cell_type": "markdown",
28 | "metadata": {},
29 | "source": [
30 | "# 1.1. Breve Revisão Histórica e Contexto"
31 | ]
32 | },
33 | {
34 | "cell_type": "markdown",
35 | "metadata": {},
36 | "source": [
37 | "Desde os tempos antigos, que a humanidade sempre sentiu a necessidade de representar e trocar informação, em privado, o que fez com que alguns campos teóricos e ciêntificos emergissem, ao longo dos anos, tais como, **_Ciência da Informação_**, **_Ciência da Computação_**, **_Criptografia_** ou a própria **_Internet_**."
38 | ]
39 | },
40 | {
41 | "cell_type": "markdown",
42 | "metadata": {},
43 | "source": [
44 | "A partir da necessidade de trocar informação em privado, o campo de **_Criptografia_** emergiu como o estudo de técnicas de comunicação segura, permitindo apenas que o _emissor_ e um _receptor_ autorizado de uma mensagem, vejam o seu conteúdo, através de ambos os processos de:\n",
45 | "* **_Encriptação_**:\n",
46 | " * Codificação de texto ordinário (também conhecido como, _texto em claro_), no que é conhecido como, _texto de cifra_ a ser enviado, que é o procedimento feito pelo _emissor_;\n",
47 | "* **_Desencriptação_**:\n",
48 | " * Recuperação do _texto de cifra_ de volta ao seu estado original (i.e., o _texto em claro_), que é o procedimento feito pelo _receptor_;"
49 | ]
50 | },
51 | {
52 | "cell_type": "markdown",
53 | "metadata": {},
54 | "source": [
55 | "Na verdade, primeira evidência da **_Criptografia_** surgiu ainda muito antes do **_Império de Roma_**, de **_Júlio Cesar_**, surgindo dos **_Egípcios Antigos_**, nomeadamente com o uso de **_Hieróglifos_** e **_Pictogramas_** complexos, para escrever mensagens secretas, onde a codificação secreta era apenas conhecido pelos escribas, enquanto que a primeira ferramenta computacional conhecida, foi o **_Ábaco Sumérico_**, na **_Babilónia_**."
56 | ]
57 | },
58 | {
59 | "cell_type": "markdown",
60 | "metadata": {},
61 | "source": [
62 | "Estes eventos datam de _4.000_ anos atrás, e desde então, essas necessidades foram tornando-se mais cruciais do que nunca, na vida diária das pessoas, onde elas precisam de estarem conectadas no mundo inteiro."
63 | ]
64 | },
65 | {
66 | "cell_type": "markdown",
67 | "metadata": {},
68 | "source": [
69 | "A emergência da **_Criptografia_**, ao longo dos anos, obrigou a que fossem introduzidos os conceitos de:\n",
70 | "* **_Algoritmo de Encriptação_**:\n",
71 | " * As regras para a _encriptação_ e _desencriptação_ da informação;\n",
72 | "* **_Chave Secreta_**:\n",
73 | " * O parâmetro de entrada secreto do _algoritmo de encriptação_;"
74 | ]
75 | },
76 | {
77 | "cell_type": "markdown",
78 | "metadata": {},
79 | "source": [
80 | "Ao longo dos primeiros tempos até ao início do século XX, a popularidade da **_Criptografia_** aumentou bastante, com _primitivas criptográficas_ tornando-se cada vez mais fortes (i.e., mais difíceis de serem _forçadamente_ _desencriptadas_, sem autorização, normalmente referido como, sendo \"_quebradas_\" ou \"_crackadas_\", como demonstrado no exemplo anterior)."
81 | ]
82 | },
83 | {
84 | "cell_type": "markdown",
85 | "metadata": {},
86 | "source": [
87 | "As **_Cifras_** de **_Substituição_** e **_Transposição_**/**_Deslocação_** dominaram maior parte desta era, sendo o **_Deslocamento de César_**, a **_Substituição Poli-Alfabética_** ou as **_Cifras Vigenère_**, alguns notáveis exemplos disso."
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "Anos mais tarde, **_Thomas Young_** demonstrou que, a luz pode-se comportar como sendo ambas, _ondas_ e _partículas_, ao mesmo tempo, no seu **_Experimento da Dupla-Fenda_** \\[1, 2\\], em _1801_, e começou a desvendar a natureza probabilística dos fenómenos da **_Mecânica Quântica_**, no campo da física moderna."
95 | ]
96 | },
97 | {
98 | "cell_type": "markdown",
99 | "metadata": {},
100 | "source": [
101 | "No começo do século XX, em _1900_ e _1901_, **_Max Planck_** sugeriu que, a radiação, sendo, quer matéria ou luz, é quantizada, quantidades discretas \\[3-6\\], dando origem ao próprio termo de _quântica_, enquanto **_Albert Einstein_** propôs o conceito de _quantum de luz_, mais tarde conhecido como, _fotão_, como também, a observação da _dualidade de partícula-onda dos fotões_ \\[7-10\\], em _1905_ e _1906_."
102 | ]
103 | },
104 | {
105 | "cell_type": "markdown",
106 | "metadata": {},
107 | "source": [
108 | "No início da **_1ª Guerra Mundial_**, durante o evento do **_Telegrama de Zimmermann_**, foram introduzidos dois aspetos importantes na **_Criptografia_**, tais como, cada vez que uma _primitiva criptográfica_ é \"_quebrada_\", uma mais forte é desenvolvida e a revelação do sucesso em \"_quebrar_\" uma cifra leva tempo até fornece vantagem ao adversário, a partir da qual, surgiu o conceito de **_Criptanálise_**."
109 | ]
110 | },
111 | {
112 | "cell_type": "markdown",
113 | "metadata": {},
114 | "source": [
115 | "Em _1919_, **_Ernest Rutherford_** descobriu a primeira evidência de sempre para um _protão_, enquanto em _1924_, **_Louis de Broglie_** propôs que a _matéria_ tem propriedades de _onda_."
116 | ]
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "metadata": {},
121 | "source": [
122 | "Por outro lado, **_Wolfgang Pauli_** formulou o _princípio da exclusão_ para _electrões_, num _átomo_, em _1925_ e, um ano mais tarde, **_Erwin Schrödinger_** desenvolveu a _mecânica das ondas_ e **_Max Born_** deu uma interpretação de probabilidades à **_Mecânica Quântica_** \\[11–15\\]."
123 | ]
124 | },
125 | {
126 | "cell_type": "markdown",
127 | "metadata": {},
128 | "source": [
129 | "Mais tarde, **_Werner Heisenberg_** formulou o **_Príncipio da Relatividade_**, em _1927_, e **_Paul Dirac_** combinou a **_Mecânica Quântica_** e **_Relatividade Espacial_** de **_Albert Einstein_**, em _1928_, o que fez com que se tornassem beme estabelecidas, em _1930_, demonstrando quais são as _partículas fundamentais_ \\[16, 17\\]."
130 | ]
131 | },
132 | {
133 | "cell_type": "markdown",
134 | "metadata": {},
135 | "source": [
136 | "Em _1935_, **_Erwin Schrödinger_** propôs um experimento, conhecido como, o **_Gato do Schrodinger_**, para ilustrar a _superposição quântica_ e a **_Interpretação de Copenhaga_** da **_Mecânica Quântica_** \\[18\\]."
137 | ]
138 | },
139 | {
140 | "cell_type": "markdown",
141 | "metadata": {},
142 | "source": [
143 | "Ao mesmo tempo, também em 1935, foi testemunhada uma mudança de paradigma na **_Ciência da Informação_**, dada pela **_Tese de Church-Turing_**, onde a idéia das **_Máquinas de Turing_** (ou **_Computadores_**), foi formulada, como qualquer máquina que efetua métodos computacionais eficazes \\[19–22\\]."
144 | ]
145 | },
146 | {
147 | "cell_type": "markdown",
148 | "metadata": {},
149 | "source": [
150 | "Durante a **_2ª Guerra Mundial_**, a **_Criptografia_** foi relevante, com a **_Máquina de Enigma_**, sendo \"_quebrada_\" pela \"**_Bomba Criptográfica_**\" **_Polaca_**, mas isto foi apenas tornado público mais de _20_ anos depois."
151 | ]
152 | },
153 | {
154 | "cell_type": "markdown",
155 | "metadata": {},
156 | "source": [
157 | "Outros eventos marcantes, foram o desenvolvimento do **_Colossus_** **_Mark 1_** e **_Mark 2_**, em _1943_ e _1944_, respectivamente, a introdução da **_Arquitetura de von Neumann_**, por **_John von Neumann_**, em _1945_, como um modelo para arquiteturas de computadores, e o desenvolvimento do **_ENIAC_**, por **_John Eckert_** e **_John Mauchly_**, em _1946_, como o primeiro computador digital programável, eletrónico e de uso geral."
158 | ]
159 | },
160 | {
161 | "cell_type": "markdown",
162 | "metadata": {},
163 | "source": [
164 | "Uma grande contribuição para o crescimento do processamento computacional, foi a introdução dos **_Dispositivos Semi-Condutores_** e os **_Transistors_**, por **_John Bardeen_**, **_Walter Brattain_** e **_William Shockley_**, nos **_Bell Labs_**, em _1947_, que lhes valeu o **_Prémio Nobel_**, em _1956_, permitindo o estudo de problemas novos mais complexos, fazendo com que o campo da **_Teoria da Complexidade Computacional_** a emergir."
165 | ]
166 | },
167 | {
168 | "cell_type": "markdown",
169 | "metadata": {},
170 | "source": [
171 | "A **_ARPA_** (**_DARPA_**), foi lançada pelo **_Departamento de Defesa dos EUA_**, em _1958_, financiando também a **_ARPANET_**, entre _1962_ e _1966_, como a primeira _rede de comutação de pacotes_ de _área ampla_, permitindo o acesso a computadores remotos, levando ao início da própria **_Internet_**, enquanto em _1969_, a **_BNN_** desenvolveu os **_IMP_**s e então, foi enviada a primeira mensagem de sempre, através da **_Internet_**."
172 | ]
173 | },
174 | {
175 | "cell_type": "markdown",
176 | "metadata": {},
177 | "source": [
178 | "Em _1973_, o **_NBS_** (**_NIST_**) fez uma chamada pública para _primitivas criptográficas_ a serem adoptadas como o _padrão_ pelo **_Gonverno dos EUA_**, com o **_DES_** sendo aprovado e tornando-se o _padrão_ para _encriptação_, enquanto pela primeira vez de sempre, um _algoritmo de encriptação_ foi divulgado para análise pública."
179 | ]
180 | },
181 | {
182 | "cell_type": "markdown",
183 | "metadata": {},
184 | "source": [
185 | "Desde então, outras _primitivas criptográficas_ foram propostos, ao longo dos anos, tais como, **_AES_**, **_3DES_**, **_Twofish_**, **_Blowfish_**, **_Serpent_**, **_RC4_**, **_IDEA_** \\[23-26\\], conhecidas como, _cifras de chave simétrica_."
186 | ]
187 | },
188 | {
189 | "cell_type": "markdown",
190 | "metadata": {},
191 | "source": [
192 | "Em 1981, o **_NSF_** expandiu a **_ARPANET_** à comunidade da **_Ciência da Computação_**, quando fundou o **_CSNET_** e adotou o **_Protocolo TCP/IP_**, como um _padrão_, em _1983_."
193 | ]
194 | },
195 | {
196 | "cell_type": "markdown",
197 | "metadata": {},
198 | "source": [
199 | "Adicionalmente, a **_BBN_** assumiu a gestão de operações da **_CSNET_**, em _1984_, enquanto a **_ARPANET_** lançou o **_NSFNET_** em _1985_, com o objetivo de conectar todos os **_Departamentos de Ciência da Computação_**, ao longo dos **_EUA_**."
200 | ]
201 | },
202 | {
203 | "cell_type": "markdown",
204 | "metadata": {},
205 | "source": [
206 | "A **_Internet_** e as _comunicações_ tiveram um grande destaque em _1989_, quando **_Tim Berners-Lee_**, do **_CERN_**, criou o **_HTTP_**, como um _padrão_, propondo também, o conceito de **_WWW_** em _1990_."
207 | ]
208 | },
209 | {
210 | "cell_type": "markdown",
211 | "metadata": {},
212 | "source": [
213 | "No início do século XXI, foi sentido um grande problema de gestão, com o crescimento da indústria empresarial, devido ao aumento do número de _chaves secretas_ a serem distribuídas entre as empresas e seus clientes, nas quais, a entrega direta das _chaves secretas_, começou a ficar insuportável."
214 | ]
215 | },
216 | {
217 | "cell_type": "markdown",
218 | "metadata": {},
219 | "source": [
220 | "Uma solução para este problema foi antecipada por **_Whifield Diffie_**, **_Martin Hellman_** e **_Ralph Merkle_** em _1976_, apresentando o conceito de _distribuição de chave_ \\[27\\]."
221 | ]
222 | },
223 | {
224 | "cell_type": "markdown",
225 | "metadata": {},
226 | "source": [
227 | "Este conceito da _distribuição de chave_ era diferente do que é hoje considerado ser um _criptosistema de chave-pública_, ao usar _chaves assimétricas_ (_par de chaves_), onde uma chave é _pública_ e a outra é mantida _privada_."
228 | ]
229 | },
230 | {
231 | "cell_type": "markdown",
232 | "metadata": {},
233 | "source": [
234 | "Este procedimento, atualmente conhecido como a **_Troca de Chaves_** de **_Diffie-Hellman_**, tornou possível estabelecer chaves, sem a necessidade de os dois participantes partilharem informação prévia, \n",
235 | "com antecedência, permitindo uma troca de mensagens em público, garantindo ao mesmo tempo _confidenciabilidade_."
236 | ]
237 | },
238 | {
239 | "cell_type": "markdown",
240 | "metadata": {},
241 | "source": [
242 | "Em instância, ele usa uma _função_ _aritmética modular_ e _unilateral_ (1), da qual sua segurança depende principalmente das propriedades matemáticas do **_Problema de Logaritmo Discreto_** (2), que se acreditou ser um problema computacional difícil, ou um **_NP-Intermediário Problema_** (3) e, portanto, considerado difícil de se \"_quebrar_\"."
243 | ]
244 | },
245 | {
246 | "cell_type": "markdown",
247 | "metadata": {},
248 | "source": [
249 | "Mais tarde, em _1977_, **_Ronald Rivest_**, **_Adi Shamir_** e **_Leonard Adleman_**, também propôs o o **_Criptosistema RSA_** \\[28\\], estendendo o trabalho de **_Diffie_** e **_Hellman_**, onde a mesma chave \"_pública_\" seria usada por qualquer pessoa para comunicar em particular com um utilizador."
250 | ]
251 | },
252 | {
253 | "cell_type": "markdown",
254 | "metadata": {},
255 | "source": [
256 | "O **_Criptosistema RSA_** é baseado no **_Problema de Factorização_** (4), no qual a sua segurança, baseia-se na suposição matemática de que, se um _número primo_ _muito grande_ é usado no mesmo, então, será extremamente difícil calcular a sua _chave privada_, baseado no conhecimento da _chave pública_, numa quantidade razoável (não exponêncial) de tempo."
257 | ]
258 | },
259 | {
260 | "cell_type": "markdown",
261 | "metadata": {},
262 | "source": [
263 | "Desde então, outras _primitivas criptográficas_ notáveis foram propostas, tais como:\n",
264 | "* **_Assinaturas Digitais_**;\n",
265 | "* **_Criptografia de Curva-Elíptica_**;\n",
266 | "* **_Provas Interactivas_**;\n",
267 | "* **_Acordos Bizantinos_**;\n",
268 | "* **_Computações Multipartidas_**;\n",
269 | "* **_Criptomoedas_**;\n",
270 | "* **_Blockchains_**;\n",
271 | "* **_Encriptação Homomórfica_**;"
272 | ]
273 | },
274 | {
275 | "cell_type": "markdown",
276 | "metadata": {},
277 | "source": [
278 | "No entanto, a **_1ª Revolução Quântica_**, formulada por alguns nomes notáveis, como, **_Albert Einstein_**, **_Max Plank_**, **_Werner Heisenberg_**, **_Erwin Schrödinger_** ou **_Wolfgang Pauli_**, deu-nos novas regras que regem a realidade física, nos seus níveis _atómicos_ e _subatómicos_ fundamentais, durante o século XX."
279 | ]
280 | },
281 | {
282 | "cell_type": "markdown",
283 | "metadata": {},
284 | "source": [
285 | "Agora, no século XXI, a **_2ª Revolução Quântica_** está a aproveitar essas regras e está usando-as para desenvolver novas tecnologias poderosas, sendo a **_Computação Quântica_**, um dos exemplos mais notáveis disso."
286 | ]
287 | },
288 | {
289 | "cell_type": "markdown",
290 | "metadata": {},
291 | "source": [
292 | "Na verdade, o físico **_Richard Feynman_**, vencedor do **_Prémio Nobel_** em _1965_, afirmou, a certa altura, que a **_Computação Quântica_** seria o futuro da **_Ciência da Computação_**, ao aproveitar a aplicação da **_Mecânica Quântica_** à **_Ciência da Computação_** para processar informação e dados \\[54\\]."
293 | ]
294 | },
295 | {
296 | "cell_type": "markdown",
297 | "metadata": {},
298 | "source": [
299 | "A partir desta idéia, novos tópicos de investigação surgiram, tais como:\n",
300 | "* **_Criptografia Quântica_**;\n",
301 | "* **_Redes Quânticas_**/**_Internet Quântica_**;\n",
302 | "* **_Comunicações Quânticas_**;\n",
303 | "* **_Inteligência Artificial Quântica_**;\n",
304 | "* **_Teoria de Jogos Quântica_**;\n",
305 | "* **_Aprendizagem de Máquina Quântica_**;\n",
306 | "* **_Aprendizagem Profunda Quântica_**;\n",
307 | "* **_Cognição Quântica_**;\n",
308 | "* **_Optimização Quântica_**;\n",
309 | "* **_Simulação Quântica_**;"
310 | ]
311 | },
312 | {
313 | "cell_type": "markdown",
314 | "metadata": {},
315 | "source": [
316 | "Além disso, uma grande variedade de _algoritmos_ e _protocolos_ _quânticos_ foram desenvolvidos, razão pela qual, a **_UE_**, os **_EUA_** e a **_China_**, estão investindo fortemente em _tecnologias quânticas_, e com ótimos resultados já alcançados \\[60, 61\\]."
317 | ]
318 | },
319 | {
320 | "cell_type": "markdown",
321 | "metadata": {},
322 | "source": [
323 | "***"
324 | ]
325 | },
326 | {
327 | "cell_type": "markdown",
328 | "metadata": {},
329 | "source": [
330 | "### Acrónimos:\n",
331 | "* N/A"
332 | ]
333 | },
334 | {
335 | "cell_type": "markdown",
336 | "metadata": {},
337 | "source": [
338 | "***"
339 | ]
340 | },
341 | {
342 | "cell_type": "markdown",
343 | "metadata": {},
344 | "source": [
345 | "### Notas:\n",
346 | "1. N/A\n",
347 | "2. N/A\n",
348 | "3. N/A\n",
349 | "4. N/A"
350 | ]
351 | },
352 | {
353 | "cell_type": "markdown",
354 | "metadata": {},
355 | "source": [
356 | "***"
357 | ]
358 | },
359 | {
360 | "cell_type": "markdown",
361 | "metadata": {},
362 | "source": [
363 | "### Referências:\n",
364 | "* N/A"
365 | ]
366 | },
367 | {
368 | "cell_type": "markdown",
369 | "metadata": {},
370 | "source": [
371 | "***"
372 | ]
373 | },
374 | {
375 | "cell_type": "markdown",
376 | "metadata": {},
377 | "source": [
378 | "**Uma atualização em:** 27 de Junho, 2021\n",
379 | "\n",
380 | "**Autor:** _Rúben André Barreiro_\n",
381 | "\n",
382 | "**Adaptado da Dissertação/Tese de Mestrado:**\n",
383 | "* \"_Acordo de Chave de Conferência Semi-Quântico (ACCSQ)_\" - 2021\n",
384 | "\n",
385 | "**© Direitos de autoria Qiskrypt, 2021, todos os direitos reservados.**"
386 | ]
387 | },
388 | {
389 | "cell_type": "markdown",
390 | "metadata": {},
391 | "source": [
392 | "***"
393 | ]
394 | },
395 | {
396 | "cell_type": "markdown",
397 | "metadata": {},
398 | "source": [
399 | "
Este trabalho está licenciado sobre uma Licensa Internacional da Creative Commons Attribution-NonCommercial-NoDerivatives 4.0."
400 | ]
401 | }
402 | ],
403 | "metadata": {
404 | "kernelspec": {
405 | "display_name": "Python 3",
406 | "language": "python",
407 | "name": "python3"
408 | },
409 | "language_info": {
410 | "codemirror_mode": {
411 | "name": "ipython",
412 | "version": 3
413 | },
414 | "file_extension": ".py",
415 | "mimetype": "text/x-python",
416 | "name": "python",
417 | "nbconvert_exporter": "python",
418 | "pygments_lexer": "ipython3",
419 | "version": "3.8.5"
420 | }
421 | },
422 | "nbformat": 4,
423 | "nbformat_minor": 4
424 | }
425 |
--------------------------------------------------------------------------------
/pt/1. introducao/1.1-breve-revisao-historica-e-contexto.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "text/html": [
11 | ""
12 | ],
13 | "text/plain": [
14 | ""
15 | ]
16 | },
17 | "metadata": {},
18 | "output_type": "display_data"
19 | }
20 | ],
21 | "source": [
22 | "from IPython.core.display import display, HTML\n",
23 | "display(HTML(\"\"))"
24 | ]
25 | },
26 | {
27 | "cell_type": "markdown",
28 | "metadata": {},
29 | "source": [
30 | "# 1.1. Breve Revisão Histórica e Contexto"
31 | ]
32 | },
33 | {
34 | "cell_type": "markdown",
35 | "metadata": {},
36 | "source": [
37 | "Desde os tempos antigos, que a humanidade sempre sentiu a necessidade de representar e trocar informação, em privado, o que fez com que alguns campos teóricos e ciêntificos emergissem, ao longo dos anos, tais como, **_Ciência da Informação_**, **_Ciência da Computação_**, **_Criptografia_** ou a própria **_Internet_**."
38 | ]
39 | },
40 | {
41 | "cell_type": "markdown",
42 | "metadata": {},
43 | "source": [
44 | "A partir da necessidade de trocar informação em privado, o campo de **_Criptografia_** emergiu como o estudo de técnicas de comunicação segura, permitindo apenas que o _emissor_ e um _receptor_ autorizado de uma mensagem, vejam o seu conteúdo, através de ambos os processos de:\n",
45 | "* **_Encriptação_**:\n",
46 | " * Codificação de texto ordinário (também conhecido como, _texto em claro_), no que é conhecido como, _texto de cifra_ a ser enviado, que é o procedimento feito pelo _emissor_;\n",
47 | "* **_Desencriptação_**:\n",
48 | " * Recuperação do _texto de cifra_ de volta ao seu estado original (i.e., o _texto em claro_), que é o procedimento feito pelo _receptor_;"
49 | ]
50 | },
51 | {
52 | "cell_type": "markdown",
53 | "metadata": {},
54 | "source": [
55 | "Na verdade, primeira evidência da **_Criptografia_** surgiu ainda muito antes do **_Império de Roma_**, de **_Júlio Cesar_**, surgindo dos **_Egípcios Antigos_**, nomeadamente com o uso de **_Hieróglifos_** e **_Pictogramas_** complexos, para escrever mensagens secretas, onde a codificação secreta era apenas conhecido pelos escribas, enquanto que a primeira ferramenta computacional conhecida, foi o **_Ábaco Sumérico_**, na **_Babilónia_**."
56 | ]
57 | },
58 | {
59 | "cell_type": "markdown",
60 | "metadata": {},
61 | "source": [
62 | "Estes eventos datam de _4.000_ anos atrás, e desde então, essas necessidades foram tornando-se mais cruciais do que nunca, na vida diária das pessoas, onde elas precisam de estarem conectadas no mundo inteiro."
63 | ]
64 | },
65 | {
66 | "cell_type": "markdown",
67 | "metadata": {},
68 | "source": [
69 | "A emergência da **_Criptografia_**, ao longo dos anos, obrigou a que fossem introduzidos os conceitos de:\n",
70 | "* **_Algoritmo de Encriptação_**:\n",
71 | " * As regras para a _encriptação_ e _desencriptação_ da informação;\n",
72 | "* **_Chave Secreta_**:\n",
73 | " * O parâmetro de entrada secreto do _algoritmo de encriptação_;"
74 | ]
75 | },
76 | {
77 | "cell_type": "markdown",
78 | "metadata": {},
79 | "source": [
80 | "Ao longo dos primeiros tempos até ao início do século XX, a popularidade da **_Criptografia_** aumentou bastante, com _primitivas criptográficas_ tornando-se cada vez mais fortes (i.e., mais difíceis de serem _forçadamente_ _desencriptadas_, sem autorização, normalmente referido como, sendo \"_quebradas_\" ou \"_crackadas_\", como demonstrado no exemplo anterior)."
81 | ]
82 | },
83 | {
84 | "cell_type": "markdown",
85 | "metadata": {},
86 | "source": [
87 | "As **_Cifras_** de **_Substituição_** e **_Transposição_**/**_Deslocação_** dominaram maior parte desta era, sendo o **_Deslocamento de César_**, a **_Substituição Poli-Alfabética_** ou as **_Cifras Vigenère_**, alguns notáveis exemplos disso."
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "Anos mais tarde, **_Thomas Young_** demonstrou que, a luz pode-se comportar como sendo ambas, _ondas_ e _partículas_, ao mesmo tempo, no seu **_Experimento da Dupla-Fenda_** \\[1, 2\\], em _1801_, e começou a desvendar a natureza probabilística dos fenómenos da **_Mecânica Quântica_**, no campo da física moderna."
95 | ]
96 | },
97 | {
98 | "cell_type": "markdown",
99 | "metadata": {},
100 | "source": [
101 | "No começo do século XX, em _1900_ e _1901_, **_Max Planck_** sugeriu que, a radiação, sendo, quer matéria ou luz, é quantizada, quantidades discretas \\[3-6\\], dando origem ao próprio termo de _quântica_, enquanto **_Albert Einstein_** propôs o conceito de _quantum de luz_, mais tarde conhecido como, _fotão_, como também, a observação da _dualidade de partícula-onda dos fotões_ \\[7-10\\], em _1905_ e _1906_."
102 | ]
103 | },
104 | {
105 | "cell_type": "markdown",
106 | "metadata": {},
107 | "source": [
108 | "No início da **_1ª Guerra Mundial_**, durante o evento do **_Telegrama de Zimmermann_**, foram introduzidos dois aspetos importantes na **_Criptografia_**, tais como, cada vez que uma _primitiva criptográfica_ é \"_quebrada_\", uma mais forte é desenvolvida e a revelação do sucesso em \"_quebrar_\" uma cifra leva tempo até fornece vantagem ao adversário, a partir da qual, surgiu o conceito de **_Criptanálise_**."
109 | ]
110 | },
111 | {
112 | "cell_type": "markdown",
113 | "metadata": {},
114 | "source": [
115 | "Em _1919_, **_Ernest Rutherford_** descobriu a primeira evidência de sempre para um _protão_, enquanto em _1924_, **_Louis de Broglie_** propôs que a _matéria_ tem propriedades de _onda_."
116 | ]
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "metadata": {},
121 | "source": [
122 | "Por outro lado, **_Wolfgang Pauli_** formulou o _princípio da exclusão_ para _electrões_, num _átomo_, em _1925_ e, um ano mais tarde, **_Erwin Schrödinger_** desenvolveu a _mecânica das ondas_ e **_Max Born_** deu uma interpretação de probabilidades à **_Mecânica Quântica_** \\[11–15\\]."
123 | ]
124 | },
125 | {
126 | "cell_type": "markdown",
127 | "metadata": {},
128 | "source": [
129 | "Mais tarde, **_Werner Heisenberg_** formulou o **_Príncipio da Relatividade_**, em _1927_, e **_Paul Dirac_** combinou a **_Mecânica Quântica_** e **_Relatividade Espacial_** de **_Albert Einstein_**, em _1928_, o que fez com que se tornassem beme estabelecidas, em _1930_, demonstrando quais são as _partículas fundamentais_ \\[16, 17\\]."
130 | ]
131 | },
132 | {
133 | "cell_type": "markdown",
134 | "metadata": {},
135 | "source": [
136 | "Em _1935_, **_Erwin Schrödinger_** propôs um experimento, conhecido como, o **_Gato do Schrodinger_**, para ilustrar a _superposição quântica_ e a **_Interpretação de Copenhaga_** da **_Mecânica Quântica_** \\[18\\]."
137 | ]
138 | },
139 | {
140 | "cell_type": "markdown",
141 | "metadata": {},
142 | "source": [
143 | "Ao mesmo tempo, também em 1935, foi testemunhada uma mudança de paradigma na **_Ciência da Informação_**, dada pela **_Tese de Church-Turing_**, onde a idéia das **_Máquinas de Turing_** (ou **_Computadores_**), foi formulada, como qualquer máquina que efetua métodos computacionais eficazes \\[19–22\\]."
144 | ]
145 | },
146 | {
147 | "cell_type": "markdown",
148 | "metadata": {},
149 | "source": [
150 | "Durante a **_2ª Guerra Mundial_**, a **_Criptografia_** foi relevante, com a **_Máquina de Enigma_**, sendo \"_quebrada_\" pela \"**_Bomba Criptográfica_**\" **_Polaca_**, mas isto foi apenas tornado público mais de _20_ anos depois."
151 | ]
152 | },
153 | {
154 | "cell_type": "markdown",
155 | "metadata": {},
156 | "source": [
157 | "Outros eventos marcantes, foram o desenvolvimento do **_Colossus_** **_Mark 1_** e **_Mark 2_**, em _1943_ e _1944_, respectivamente, a introdução da **_Arquitetura de von Neumann_**, por **_John von Neumann_**, em _1945_, como um modelo para arquiteturas de computadores, e o desenvolvimento do **_ENIAC_**, por **_John Eckert_** e **_John Mauchly_**, em _1946_, como o primeiro computador digital programável, eletrónico e de uso geral."
158 | ]
159 | },
160 | {
161 | "cell_type": "markdown",
162 | "metadata": {},
163 | "source": [
164 | "Uma grande contribuição para o crescimento do processamento computacional, foi a introdução dos **_Dispositivos Semi-Condutores_** e os **_Transistors_**, por **_John Bardeen_**, **_Walter Brattain_** e **_William Shockley_**, nos **_Bell Labs_**, em _1947_, que lhes valeu o **_Prémio Nobel_**, em _1956_, permitindo o estudo de problemas novos mais complexos, fazendo com que o campo da **_Teoria da Complexidade Computacional_** a emergir."
165 | ]
166 | },
167 | {
168 | "cell_type": "markdown",
169 | "metadata": {},
170 | "source": [
171 | "A **_ARPA_** (**_DARPA_**), foi lançada pelo **_Departamento de Defesa dos EUA_**, em _1958_, financiando também a **_ARPANET_**, entre _1962_ e _1966_, como a primeira _rede de comutação de pacotes_ de _área ampla_, permitindo o acesso a computadores remotos, levando ao início da própria **_Internet_**, enquanto em _1969_, a **_BNN_** desenvolveu os **_IMP_**s e então, foi enviada a primeira mensagem de sempre, através da **_Internet_**."
172 | ]
173 | },
174 | {
175 | "cell_type": "markdown",
176 | "metadata": {},
177 | "source": [
178 | "Em _1973_, o **_NBS_** (**_NIST_**) fez uma chamada pública para _primitivas criptográficas_ a serem adoptadas como o _padrão_ pelo **_Gonverno dos EUA_**, com o **_DES_** sendo aprovado e tornando-se o _padrão_ para _encriptação_, enquanto pela primeira vez de sempre, um _algoritmo de encriptação_ foi divulgado para análise pública."
179 | ]
180 | },
181 | {
182 | "cell_type": "markdown",
183 | "metadata": {},
184 | "source": [
185 | "Desde então, outras _primitivas criptográficas_ foram propostos, ao longo dos anos, tais como, **_AES_**, **_3DES_**, **_Twofish_**, **_Blowfish_**, **_Serpent_**, **_RC4_**, **_IDEA_** \\[23-26\\], conhecidas como, _cifras de chave simétrica_."
186 | ]
187 | },
188 | {
189 | "cell_type": "markdown",
190 | "metadata": {},
191 | "source": [
192 | "Em 1981, o **_NSF_** expandiu a **_ARPANET_** à comunidade da **_Ciência da Computação_**, quando fundou o **_CSNET_** e adotou o **_Protocolo TCP/IP_**, como um _padrão_, em _1983_."
193 | ]
194 | },
195 | {
196 | "cell_type": "markdown",
197 | "metadata": {},
198 | "source": [
199 | "Adicionalmente, a **_BBN_** assumiu a gestão de operações da **_CSNET_**, em _1984_, enquanto a **_ARPANET_** lançou o **_NSFNET_** em _1985_, com o objetivo de conectar todos os **_Departamentos de Ciência da Computação_**, ao longo dos **_EUA_**."
200 | ]
201 | },
202 | {
203 | "cell_type": "markdown",
204 | "metadata": {},
205 | "source": [
206 | "A **_Internet_** e as _comunicações_ tiveram um grande destaque em _1989_, quando **_Tim Berners-Lee_**, do **_CERN_**, criou o **_HTTP_**, como um _padrão_, propondo também, o conceito de **_WWW_** em _1990_."
207 | ]
208 | },
209 | {
210 | "cell_type": "markdown",
211 | "metadata": {},
212 | "source": [
213 | "No início do século XXI, foi sentido um grande problema de gestão, com o crescimento da indústria empresarial, devido ao aumento do número de _chaves secretas_ a serem distribuídas entre as empresas e seus clientes, nas quais, a entrega direta das _chaves secretas_, começou a ficar insuportável."
214 | ]
215 | },
216 | {
217 | "cell_type": "markdown",
218 | "metadata": {},
219 | "source": [
220 | "Uma solução para este problema foi antecipada por **_Whifield Diffie_**, **_Martin Hellman_** e **_Ralph Merkle_** em _1976_, apresentando o conceito de _distribuição de chave_ \\[27\\]."
221 | ]
222 | },
223 | {
224 | "cell_type": "markdown",
225 | "metadata": {},
226 | "source": [
227 | "Este conceito da _distribuição de chave_ era diferente do que é hoje considerado ser um _criptosistema de chave-pública_, ao usar _chaves assimétricas_ (_par de chaves_), onde uma chave é _pública_ e a outra é mantida _privada_."
228 | ]
229 | },
230 | {
231 | "cell_type": "markdown",
232 | "metadata": {},
233 | "source": [
234 | "Este procedimento, atualmente conhecido como a **_Troca de Chaves_** de **_Diffie-Hellman_**, tornou possível estabelecer chaves, sem a necessidade de os dois participantes partilharem informação prévia, \n",
235 | "com antecedência, permitindo uma troca de mensagens em público, garantindo ao mesmo tempo _confidenciabilidade_."
236 | ]
237 | },
238 | {
239 | "cell_type": "markdown",
240 | "metadata": {},
241 | "source": [
242 | "Em instância, ele usa uma _função_ _aritmética modular_ e _unilateral_ (1), da qual sua segurança depende principalmente das propriedades matemáticas do **_Problema de Logaritmo Discreto_** (2), que se acreditou ser um problema computacional difícil, ou um **_NP-Intermediário Problema_** (3) e, portanto, considerado difícil de se \"_quebrar_\"."
243 | ]
244 | },
245 | {
246 | "cell_type": "markdown",
247 | "metadata": {},
248 | "source": [
249 | "Mais tarde, em _1977_, **_Ronald Rivest_**, **_Adi Shamir_** e **_Leonard Adleman_**, também propôs o o **_Criptosistema RSA_** \\[28\\], estendendo o trabalho de **_Diffie_** e **_Hellman_**, onde a mesma chave \"_pública_\" seria usada por qualquer pessoa para comunicar em particular com um utilizador."
250 | ]
251 | },
252 | {
253 | "cell_type": "markdown",
254 | "metadata": {},
255 | "source": [
256 | "O **_Criptosistema RSA_** é baseado no **_Problema de Factorização_** (4), no qual a sua segurança, baseia-se na suposição matemática de que, se um _número primo_ _muito grande_ é usado no mesmo, então, será extremamente difícil calcular a sua _chave privada_, baseado no conhecimento da _chave pública_, numa quantidade razoável (não exponêncial) de tempo."
257 | ]
258 | },
259 | {
260 | "cell_type": "markdown",
261 | "metadata": {},
262 | "source": [
263 | "Desde então, outras _primitivas criptográficas_ notáveis foram propostas, tais como:\n",
264 | "* **_Assinaturas Digitais_**;\n",
265 | "* **_Criptografia de Curva-Elíptica_**;\n",
266 | "* **_Provas Interactivas_**;\n",
267 | "* **_Acordos Bizantinos_**;\n",
268 | "* **_Computações Multipartidas_**;\n",
269 | "* **_Criptomoedas_**;\n",
270 | "* **_Blockchains_**;\n",
271 | "* **_Encriptação Homomórfica_**;"
272 | ]
273 | },
274 | {
275 | "cell_type": "markdown",
276 | "metadata": {},
277 | "source": [
278 | "No entanto, a **_1ª Revolução Quântica_**, formulada por alguns nomes notáveis, como, **_Albert Einstein_**, **_Max Plank_**, **_Werner Heisenberg_**, **_Erwin Schrödinger_** ou **_Wolfgang Pauli_**, deu-nos novas regras que regem a realidade física, nos seus níveis _atómicos_ e _subatómicos_ fundamentais, durante o século XX."
279 | ]
280 | },
281 | {
282 | "cell_type": "markdown",
283 | "metadata": {},
284 | "source": [
285 | "Agora, no século XXI, a **_2ª Revolução Quântica_** está a aproveitar essas regras e está usando-as para desenvolver novas tecnologias poderosas, sendo a **_Computação Quântica_**, um dos exemplos mais notáveis disso."
286 | ]
287 | },
288 | {
289 | "cell_type": "markdown",
290 | "metadata": {},
291 | "source": [
292 | "Na verdade, o físico **_Richard Feynman_**, vencedor do **_Prémio Nobel_** em _1965_, afirmou, a certa altura, que a **_Computação Quântica_** seria o futuro da **_Ciência da Computação_**, ao aproveitar a aplicação da **_Mecânica Quântica_** à **_Ciência da Computação_** para processar informação e dados \\[54\\]."
293 | ]
294 | },
295 | {
296 | "cell_type": "markdown",
297 | "metadata": {},
298 | "source": [
299 | "A partir desta idéia, novos tópicos de investigação surgiram, tais como:\n",
300 | "* **_Criptografia Quântica_**;\n",
301 | "* **_Redes Quânticas_**/**_Internet Quântica_**;\n",
302 | "* **_Comunicações Quânticas_**;\n",
303 | "* **_Inteligência Artificial Quântica_**;\n",
304 | "* **_Teoria de Jogos Quântica_**;\n",
305 | "* **_Aprendizagem de Máquina Quântica_**;\n",
306 | "* **_Aprendizagem Profunda Quântica_**;\n",
307 | "* **_Cognição Quântica_**;\n",
308 | "* **_Optimização Quântica_**;\n",
309 | "* **_Simulação Quântica_**;"
310 | ]
311 | },
312 | {
313 | "cell_type": "markdown",
314 | "metadata": {},
315 | "source": [
316 | "Além disso, uma grande variedade de _algoritmos_ e _protocolos_ _quânticos_ foram desenvolvidos, razão pela qual, a **_UE_**, os **_EUA_** e a **_China_**, estão investindo fortemente em _tecnologias quânticas_, e com ótimos resultados já alcançados \\[60, 61\\]."
317 | ]
318 | },
319 | {
320 | "cell_type": "markdown",
321 | "metadata": {},
322 | "source": [
323 | "***"
324 | ]
325 | },
326 | {
327 | "cell_type": "markdown",
328 | "metadata": {},
329 | "source": [
330 | "### Acrónimos:\n",
331 | "* N/A"
332 | ]
333 | },
334 | {
335 | "cell_type": "markdown",
336 | "metadata": {},
337 | "source": [
338 | "***"
339 | ]
340 | },
341 | {
342 | "cell_type": "markdown",
343 | "metadata": {},
344 | "source": [
345 | "### Notas:\n",
346 | "1. N/A\n",
347 | "2. N/A\n",
348 | "3. N/A\n",
349 | "4. N/A"
350 | ]
351 | },
352 | {
353 | "cell_type": "markdown",
354 | "metadata": {},
355 | "source": [
356 | "***"
357 | ]
358 | },
359 | {
360 | "cell_type": "markdown",
361 | "metadata": {},
362 | "source": [
363 | "### Referências:\n",
364 | "* N/A"
365 | ]
366 | },
367 | {
368 | "cell_type": "markdown",
369 | "metadata": {},
370 | "source": [
371 | "***"
372 | ]
373 | },
374 | {
375 | "cell_type": "markdown",
376 | "metadata": {},
377 | "source": [
378 | "**Uma atualização em:** 27 de Junho, 2021\n",
379 | "\n",
380 | "**Autor:** _Rúben André Barreiro_\n",
381 | "\n",
382 | "**Adaptado da Dissertação/Tese de Mestrado:**\n",
383 | "* \"_Acordo de Chave de Conferência Semi-Quântico (ACCSQ)_\" - 2021\n",
384 | "\n",
385 | "**© Direitos de autoria Qiskrypt, 2021, todos os direitos reservados.**"
386 | ]
387 | },
388 | {
389 | "cell_type": "markdown",
390 | "metadata": {},
391 | "source": [
392 | "***"
393 | ]
394 | },
395 | {
396 | "cell_type": "markdown",
397 | "metadata": {},
398 | "source": [
399 | "
Este trabalho está licenciado sobre uma Licensa Internacional da Creative Commons Attribution-NonCommercial-NoDerivatives 4.0."
400 | ]
401 | }
402 | ],
403 | "metadata": {
404 | "kernelspec": {
405 | "display_name": "Python 3",
406 | "language": "python",
407 | "name": "python3"
408 | },
409 | "language_info": {
410 | "codemirror_mode": {
411 | "name": "ipython",
412 | "version": 3
413 | },
414 | "file_extension": ".py",
415 | "mimetype": "text/x-python",
416 | "name": "python",
417 | "nbconvert_exporter": "python",
418 | "pygments_lexer": "ipython3",
419 | "version": "3.8.5"
420 | }
421 | },
422 | "nbformat": 4,
423 | "nbformat_minor": 4
424 | }
425 |
--------------------------------------------------------------------------------
/pt/1. introducao/extras/.ipynb_checkpoints/1.1.1-cifra-deslocamento-cesar-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "text/html": [
11 | ""
12 | ],
13 | "text/plain": [
14 | ""
15 | ]
16 | },
17 | "metadata": {},
18 | "output_type": "display_data"
19 | }
20 | ],
21 | "source": [
22 | "# Preenchimento da disposição do Jupyter Notebook, em Tela Cheia\n",
23 | "from IPython.core.display import display, HTML\n",
24 | "display(HTML(\"\"))"
25 | ]
26 | },
27 | {
28 | "cell_type": "markdown",
29 | "metadata": {},
30 | "source": [
31 | "# 1.1.1. Cifra de Deslocamento de César"
32 | ]
33 | },
34 | {
35 | "cell_type": "markdown",
36 | "metadata": {},
37 | "source": [
38 | "O **_Império Romano_** foi o período _pós-republicano_ da _antiga civilização romana_, caracterizado por uma forma de _governo autocrática_ liderada por um _imperador_ e por extensas _possessões territoriais_, em volta do _Mar Mediterrâneo_ na _Europa_, _África_ e _Ásia_."
39 | ]
40 | },
41 | {
42 | "cell_type": "markdown",
43 | "metadata": {},
44 | "source": [
45 | "Este _império_ foi governado, durante vários anos, por **_Júlio César_**, visto como um dos mais _severos_ e _impediosos_ _ditadores_ destes tempos."
46 | ]
47 | },
48 | {
49 | "cell_type": "markdown",
50 | "metadata": {},
51 | "source": [
52 | "Durante as suas inúmeras conquistas, o _imperador_ **_Júlio César_** usava um método para trocar mensagens, de forma _secreta_, com os seus _generais_, de forma a planearem tácticas de guerra, de forma segura e sem serem interceptadas pelos seus adversários."
53 | ]
54 | },
55 | {
56 | "cell_type": "markdown",
57 | "metadata": {},
58 | "source": [
59 | "Este método para trocar mensagens, viria a ser conhecido mais tarde como, a **_Cifra de Deslocamento de César_**, em homenagem ao próprio o _imperador_ **_Júlio César_**."
60 | ]
61 | },
62 | {
63 | "cell_type": "markdown",
64 | "metadata": {},
65 | "source": [
66 | "A **_Cifra de Deslocamento de César_** é baseada em _substituições de caractéres_, no qual cada letra da mensagem é substituída por outra, que se apresenta no mesmo _alfabeto_, deslocado um certo número de caractéres para a esquerda ou para direita."
67 | ]
68 | },
69 | {
70 | "cell_type": "markdown",
71 | "metadata": {},
72 | "source": [
73 | "Um simples exemplo de **_Encriptação_** e **_Desencriptação_** desta _cifra_, pode ser alcançado fazendo apenas _deslocações alfabéticas_ de _3_ posições, (para a esquerda ou para a direita) nos caractéres do texto dado como parâmetro de entrada:\n",
74 | "* Para o processo de **_Encriptação_**:\n",
75 | " * _Parâmetro de Entrada_: $m$ (_texto em claro_);\n",
76 | " * _Operação de Transformação:_ $c = enc(m)$ (_deslocação de s=3 caractéres para a direita no alfabeto_);\n",
77 | "* Para o processo de **_Desencriptação_**:\n",
78 | " * _Parâmetro de Entrada_: $c$ (_texto de cifra_);\n",
79 | " * _Operação de Transformação:_ $m = dec(c)$ (_deslocação de s=3 caractéres para a esquerda no alfabeto_);"
80 | ]
81 | },
82 | {
83 | "cell_type": "markdown",
84 | "metadata": {},
85 | "source": [
86 | "**_NOTA_**:\n",
87 | "* Neste exemplo, é usado uma _deslocação_ de 3 _caracteres_, mas este parâmetro não precisa de ser obrigatoriamente _3_ e pode ser variável;"
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "Especificado o exemplo, ambos os processos de **_Encriptação_** e **_Desencriptação_** podem ser facilmente definidos em **_Python_**, como demonstrado de seguida."
95 | ]
96 | },
97 | {
98 | "cell_type": "markdown",
99 | "metadata": {},
100 | "source": [
101 | "Antes de mais, é necessário fazer a codificação de caractéres para valores inteiros décimais, de forma a operar os caractéres e as suas transformações em **_Python_**, segundo o _padrão_ do **_Código de ASCII_** (ver mais detalhes em: [https://pt.wikipedia.org/wiki/ASCII](https://pt.wikipedia.org/wiki/ASCII))."
102 | ]
103 | },
104 | {
105 | "cell_type": "markdown",
106 | "metadata": {},
107 | "source": [
108 | "Para isso, e sabendo que se está a trabalhar com _deslocações alfabéticas_, é necessário definir o _deslocamento_ inicial do alfabeto (i.e., para a primeira letra do mesmo), segundo o _padrão_ do **_Código de ASCII_**, em que:\n",
109 | "* Para a letra '**_A_**' (_maiúscula_), temos o _código_ _65_, em _décimal_;\n",
110 | "* Para a letra '**_a_**' (_minúscula_), temos o _código_ _97_, em _décimal_;"
111 | ]
112 | },
113 | {
114 | "cell_type": "code",
115 | "execution_count": 2,
116 | "metadata": {},
117 | "outputs": [
118 | {
119 | "name": "stdout",
120 | "output_type": "stream",
121 | "text": [
122 | "Codigo ASCII para o caractér 'A' (maiúscula): 65\n",
123 | "Codigo ASCII para o caractér 'a' (minúscula): 97\n"
124 | ]
125 | }
126 | ],
127 | "source": [
128 | "# Definição do Código ASCII para os caractéres 'A' (maiúscula) e 'a' (minúscula) \n",
129 | "CODIGO_ASCII_A_MAISCULA = ord(\"A\")\n",
130 | "CODIGO_ASCII_A_MINUSCULA = ord(\"a\")\n",
131 | "\n",
132 | "# Impressão do Código ASCII para os caractéres 'A' (maiúscula) e 'a' (minúscula) \n",
133 | "print(\"Codigo ASCII para o caractér 'A' (maiúscula): \", CODIGO_ASCII_A_MAISCULA)\n",
134 | "print(\"Codigo ASCII para o caractér 'a' (minúscula): \", CODIGO_ASCII_A_MINUSCULA)"
135 | ]
136 | },
137 | {
138 | "cell_type": "markdown",
139 | "metadata": {},
140 | "source": [
141 | "Adicionalmente, também se sabe que o alfabeto tem exatamente 26 caractéres e que a numeração décimal tem 10 digitos diferentes e distintos:"
142 | ]
143 | },
144 | {
145 | "cell_type": "code",
146 | "execution_count": 3,
147 | "metadata": {},
148 | "outputs": [],
149 | "source": [
150 | "# Definição do número de caractéres do alfabeto (i.e., 26 letras)\n",
151 | "NUMERO_CARACTERES_ALFABETO = 26\n",
152 | "\n",
153 | "# Definição do número de digítos da numeração décimal (i.e., 10 dígitos diferentes e distintos)\n",
154 | "NUMEROS_DIGITOS_DECIMAIS = 10"
155 | ]
156 | },
157 | {
158 | "cell_type": "markdown",
159 | "metadata": {},
160 | "source": [
161 | "Para a implementação do processo de **_Encriptação_** em **_Python_**, temos:"
162 | ]
163 | },
164 | {
165 | "cell_type": "code",
166 | "execution_count": 4,
167 | "metadata": {},
168 | "outputs": [],
169 | "source": [
170 | "# Função em Python para o processo de Encriptação, usando a Cifra de César,\n",
171 | "# dado um Texto em Claro e usando uma deslocação de s=3 caractéres alfabéticos,\n",
172 | "# por defeito, para a direita, de forma a obter-se o Texto de Cifra final\n",
173 | "def encriptacao_cifra_cesar(texto_em_claro, deslocacao=3):\n",
174 | " \n",
175 | " # Inicialização do Texto de Cifra\n",
176 | " texto_de_cifra = \"\"\n",
177 | " \n",
178 | " # Percorre o Texto em Claro\n",
179 | " for caracter_indice in range(len(texto_em_claro)):\n",
180 | " \n",
181 | " # Acesso ao caractér atual do Texto em Claro dado como parâmetro\n",
182 | " caracter = texto_em_claro[caracter_indice]\n",
183 | " \n",
184 | " # Encripta o caractér atual, no caso de ser um maiúscula\n",
185 | " if (caracter.isupper()):\n",
186 | " \n",
187 | " # Realiza a deslocação de s=3 caractéres alfabéticos, por defeito, para a direita,\n",
188 | " # sobre o caracter atual do Texto em Claro\n",
189 | " texto_de_cifra += chr(((ord(caracter) + deslocacao - CODIGO_ASCII_A_MAISCULA) % NUMERO_CARACTERES_ALFABETO) + CODIGO_ASCII_A_MAISCULA)\n",
190 | " \n",
191 | " # Encripta o caractér atual, no caso de ser um minúscula\n",
192 | " elif (caracter.islower()):\n",
193 | " \n",
194 | " # Realiza a deslocação de s=3 caractéres alfabéticos, por defeito, para a direita,\n",
195 | " # sobre o caracter atual do Texto em Claro\n",
196 | " texto_de_cifra += chr(((ord(caracter) + deslocacao - CODIGO_ASCII_A_MINUSCULA) % NUMERO_CARACTERES_ALFABETO) + CODIGO_ASCII_A_MINUSCULA)\n",
197 | " \n",
198 | " elif (caracter.isdigit()):\n",
199 | " texto_de_cifra += str(int(caracter) + deslocacao % NUMEROS_DIGITOS_DECIMAIS)\n",
200 | " \n",
201 | " else:\n",
202 | " texto_de_cifra += caracter\n",
203 | "\n",
204 | " # Retorna o Texto de Cifra final, depois da Encriptação\n",
205 | " return texto_de_cifra"
206 | ]
207 | },
208 | {
209 | "cell_type": "markdown",
210 | "metadata": {},
211 | "source": [
212 | "Para a implementação do processo de **_Desencriptação_** em **_Python_**, temos:"
213 | ]
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": 5,
218 | "metadata": {},
219 | "outputs": [],
220 | "source": [
221 | "# Função em Python para o processo de Desencriptação, usando a Cifra de César,\n",
222 | "# dado um Texto de Cifra e usando uma deslocação de s=3 caractéres alfabéticos,\n",
223 | "# por defeito, para a esquerda, de forma a obter-se o Texto em Claro final\n",
224 | "def desencriptacao_cifra_cesar(texto_de_cifra, deslocacao=3):\n",
225 | " \n",
226 | " # Inicialização do Texto em Claro\n",
227 | " texto_em_claro = \"\"\n",
228 | " \n",
229 | " # Percorre o Texto de Cifra\n",
230 | " for caracter_indice in range(len(texto_de_cifra)):\n",
231 | " \n",
232 | " # Acesso ao caractér atual do Texto de Cifra dado como parâmetro\n",
233 | " caracter = texto_de_cifra[caracter_indice]\n",
234 | " \n",
235 | " # Encripta o caractér atual, no caso de ser um maiúscula\n",
236 | " if (caracter.isupper()):\n",
237 | " \n",
238 | " # Realiza a deslocação de s=3 caractéres alfabéticos, por defeito, para a esquerda,\n",
239 | " # sobre o caracter atual do Texto em Claro\n",
240 | " texto_em_claro += chr(((ord(caracter) - deslocacao - CODIGO_ASCII_A_MAISCULA) % NUMERO_CARACTERES_ALFABETO) + CODIGO_ASCII_A_MAISCULA)\n",
241 | " \n",
242 | " # Encripta o caractér atual, no caso de ser um minúscula\n",
243 | " elif (caracter.islower()):\n",
244 | " \n",
245 | " # Realiza a deslocação de s=3 caractéres alfabéticos, por defeito, para a esquerda,\n",
246 | " # sobre o caracter atual do Texto em Claro\n",
247 | " texto_em_claro += chr(((ord(caracter) - deslocacao - CODIGO_ASCII_A_MINUSCULA) % NUMERO_CARACTERES_ALFABETO) + CODIGO_ASCII_A_MINUSCULA)\n",
248 | " \n",
249 | " elif (caracter.isdigit()):\n",
250 | " texto_em_claro += str(int(caracter) - deslocacao % NUMEROS_DIGITOS_DECIMAIS)\n",
251 | " \n",
252 | " else:\n",
253 | " texto_em_claro += caracter\n",
254 | " \n",
255 | " # Retorna o Texto em Claro final, depois da Desencriptação\n",
256 | " return texto_em_claro"
257 | ]
258 | },
259 | {
260 | "cell_type": "markdown",
261 | "metadata": {},
262 | "source": [
263 | "Agora, dado que já foram definidas as implementações de ambos os processos de **_Encriptação_** e **_Desencriptação_**, ao usar um _canal de comunicação_, agora já é possível transmitir _mensagens secretas_."
264 | ]
265 | },
266 | {
267 | "cell_type": "markdown",
268 | "metadata": {},
269 | "source": [
270 | "### Exemplo #1 - Envio de mensagem secreta"
271 | ]
272 | },
273 | {
274 | "cell_type": "markdown",
275 | "metadata": {},
276 | "source": [
277 | "Imagine-se o seguinte cenário:\n",
278 | "* A **_Alice_** é o **_Emissor_**;\n",
279 | "* O **_Bob_** é o **_Receptor_**;\n",
280 | "* A **_Alice_** pretende enviar ao **_Bob_**, a seguinte mensagem secreta \"_Longa vida ao Imperador Cesar!!!_\";"
281 | ]
282 | },
283 | {
284 | "cell_type": "markdown",
285 | "metadata": {},
286 | "source": [
287 | "Primeiro, têm que ser definidos os ingredientes fundamentais desta demonstração:"
288 | ]
289 | },
290 | {
291 | "cell_type": "code",
292 | "execution_count": 6,
293 | "metadata": {},
294 | "outputs": [],
295 | "source": [
296 | "# Definição do nome do Emissor\n",
297 | "NOME_EMISSOR = \"Alice\"\n",
298 | "\n",
299 | "# Definição do nome do Receptor\n",
300 | "NOME_RECEPTOR = \"Bob\"\n",
301 | "\n",
302 | "# Definição da mensagem, que a Alice pretende enviar ao Bob, de forma secreta\n",
303 | "MENSAGEM = \"Longa vida ao Imperador Cesar!!!\""
304 | ]
305 | },
306 | {
307 | "cell_type": "markdown",
308 | "metadata": {},
309 | "source": [
310 | "Podemos definir a implementação de uma função em **_Python_** simples, para enviar uma _mensagem secreta_, através de um _canal de comunicação_, da seguinte forma:"
311 | ]
312 | },
313 | {
314 | "cell_type": "code",
315 | "execution_count": 7,
316 | "metadata": {},
317 | "outputs": [],
318 | "source": [
319 | "# Função para enviar uma mensagem secreta, de um Emissor para um Receptor, usando a Cifra de César,\n",
320 | "# para os processos de Encriptação e Desencriptação da mensagem\n",
321 | "def enviar_mensagem_secreta_usando_cifra_cesar(nome_emissor, nome_receptor, mensagem):\n",
322 | " \n",
323 | " # Impressão do cabeçalho da demonstração do envio de uma mensagem secreta\n",
324 | " print(\"\\n\\n--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César ---\\n\\n\")\n",
325 | " \n",
326 | " # O Emissor quer enviar a mensagem secreta ao Receptor\n",
327 | " print(f\"O Emissor ({nome_emissor}) quer enviar a seguinte mensagem ao Receptor ({nome_receptor}):\\n - \\\"{mensagem}\\\" ...\\n\")\n",
328 | " \n",
329 | " # Encriptação da mensagem secreta, usando a Cifra de César\n",
330 | " texto_cifra = encriptacao_cifra_cesar(mensagem)\n",
331 | " \n",
332 | " # O Emissor encripta a mensagem secreta original a enviar\n",
333 | " print(f\"O Emissor ({nome_emissor}) encripta a mensagem secreta original a enviar (i.e., o texto em claro)...\\n\")\n",
334 | " \n",
335 | " # A transformação da mensagem secreta original no Texto de Cifra\n",
336 | " print(f\"Encriptação da mensagem secreta original a enviar (i.e., texto em claro):\\n - \\\"{mensagem}\\\" --> \\\"{texto_cifra}\\\"\\n\")\n",
337 | " \n",
338 | " # Envio da mensagem encripta do Emissor ao Receptor\n",
339 | " print(f\"Envio da mensagem encriptada, através do canal de comunicação, do Emissor ({nome_emissor}) para o Receptor ({nome_receptor})...\\n\")\n",
340 | " \n",
341 | " # O Receptor recebe a mensagem encriptada\n",
342 | " print(f\"O Receptor ({nome_receptor}) recebe a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
343 | " \n",
344 | " # Desencriptação da mensagem secreta, usando a Cifra de César\n",
345 | " texto_em_claro = desencriptacao_cifra_cesar(texto_cifra)\n",
346 | " \n",
347 | " # O Emissor encripta a mensagem secreta encriptada recebida\n",
348 | " print(f\"O Receptor ({nome_receptor}) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\\n\")\n",
349 | "\n",
350 | " # A transformação da mensagem secreta encriptada no Texto em Claro\n",
351 | " print(f\"Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\\n \\\"{texto_cifra}\\\" --> \\\"{texto_em_claro}\\\"\")\n",
352 | " \n",
353 | " # Impressão do rodapé da demonstração do envio de uma mensagem secreta\n",
354 | " print(\"\\n\\n--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César ---\\n\\n\")"
355 | ]
356 | },
357 | {
358 | "cell_type": "markdown",
359 | "metadata": {},
360 | "source": [
361 | "Agora, a **_Alice_** procede ao envio da mensagem ao **_Bob_**, de forma secreta, usando a função implementada anteriormente em **_Python_**:"
362 | ]
363 | },
364 | {
365 | "cell_type": "code",
366 | "execution_count": 8,
367 | "metadata": {},
368 | "outputs": [
369 | {
370 | "name": "stdout",
371 | "output_type": "stream",
372 | "text": [
373 | "\n",
374 | "\n",
375 | "--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César ---\n",
376 | "\n",
377 | "\n",
378 | "O Emissor (Alice) quer enviar a seguinte mensagem ao Receptor (Bob):\n",
379 | " - \"Longa vida ao Imperador Cesar!!!\" ...\n",
380 | "\n",
381 | "O Emissor (Alice) encripta a mensagem secreta original a enviar (i.e., o texto em claro)...\n",
382 | "\n",
383 | "Encriptação da mensagem secreta original a enviar (i.e., texto em claro):\n",
384 | " - \"Longa vida ao Imperador Cesar!!!\" --> \"Orqjd ylgd dr Lpshudgru Fhvdu!!!\"\n",
385 | "\n",
386 | "Envio da mensagem encriptada, através do canal de comunicação, do Emissor (Alice) para o Receptor (Bob)...\n",
387 | "\n",
388 | "O Receptor (Bob) recebe a mensagem encriptada (i.e., o texto de cifra)...\n",
389 | "\n",
390 | "O Receptor (Bob) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\n",
391 | "\n",
392 | "Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\n",
393 | " \"Orqjd ylgd dr Lpshudgru Fhvdu!!!\" --> \"Longa vida ao Imperador Cesar!!!\"\n",
394 | "\n",
395 | "\n",
396 | "--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César ---\n",
397 | "\n",
398 | "\n"
399 | ]
400 | }
401 | ],
402 | "source": [
403 | "# Envio da mensagem secreta, usando a Cifra de César\n",
404 | "enviar_mensagem_secreta_usando_cifra_cesar(NOME_EMISSOR, NOME_RECEPTOR, MENSAGEM)"
405 | ]
406 | },
407 | {
408 | "cell_type": "markdown",
409 | "metadata": {},
410 | "source": [
411 | "No entanto, também é facilmente perceptível neste exemplo de cenário que, caso um terceiro interveniente tenha conhecimento do _deslocamento alfabético_ usado em ambos os processos de **_Encriptação_** e **_Desencriptação_** e, conseguir de alguma forma, interceptar a mensagem secreta, no decorrer da sua transmissão pelo _canal de comunicação_ em uso, o mesmo poderá ter acesso ao conteúdo da mensagem secreta, ou até, alterá-lo e reenviar a mensagem secreta modificada."
412 | ]
413 | },
414 | {
415 | "cell_type": "markdown",
416 | "metadata": {},
417 | "source": [
418 | "Em seguida, é demonstrado o exemplo de um cenário, onde esta situação se verifica facilmente."
419 | ]
420 | },
421 | {
422 | "cell_type": "markdown",
423 | "metadata": {},
424 | "source": [
425 | "### Exemplo #2 - Envio de mensagem secreta, interceptada e modificada por um Atacante"
426 | ]
427 | },
428 | {
429 | "cell_type": "markdown",
430 | "metadata": {},
431 | "source": [
432 | "Imagine-se o seguinte cenário:\n",
433 | "* A **_Alice_** é o **_Emissor_**;\n",
434 | "* O **_Bob_** é o **_Receptor_**;\n",
435 | "* A **_Alice_** pretende enviar ao **_Bob_**, a seguinte mensagem secreta \"_Longa vida ao Imperador Cesar!!!_\";\n",
436 | "* A **_Alice_** e o **_Bob_** têm um _segredo partilhado_, que neste caso, é a _deslocação alfabética_, _s=3_;\n",
437 | "* A **_Eva_** é o **_Atacante_**;\n",
438 | "* A **_Eva_** também tem conhecimento do _segredo partilhado_ entre a **_Alice_** e o **_Bob_**;\n",
439 | "* A **_Eva_** vai interceptar a mensagem enviada para o **_Bob_**;\n",
440 | "* A **_Eva_** vai modificar o conteúdo da mensagem secreta de \"_Longa vida ao Imperador Cesar!!!_\" para \"_Longa vida ao Imperador Pompeu!!!_\";\n",
441 | "* A **_Eva_** envia a mensagem secreta modificada para o **_Bob_** (fazendo-se passar pela **_Alice_**), de forma que nem a **_Alice_** nem o **_Bob_** desconfiem de nada;"
442 | ]
443 | },
444 | {
445 | "cell_type": "markdown",
446 | "metadata": {},
447 | "source": [
448 | "Uma vez mais, têm que ser definidos os ingredientes fundamentais desta demonstração:"
449 | ]
450 | },
451 | {
452 | "cell_type": "code",
453 | "execution_count": 9,
454 | "metadata": {},
455 | "outputs": [],
456 | "source": [
457 | "# Definição do nome do Emissor\n",
458 | "NOME_EMISSOR = \"Alice\"\n",
459 | "\n",
460 | "# Definição do nome do Receptor\n",
461 | "NOME_RECEPTOR = \"Bob\"\n",
462 | "\n",
463 | "# Definição do nome do Atacante\n",
464 | "NOME_ATACANTE = \"Eva\"\n",
465 | "\n",
466 | "# Definição da mensagem, que a Alice pretende enviar ao Bob, de forma secreta e que a Eva pretende interceptar\n",
467 | "MENSAGEM = \"Longa vida ao Imperador Cesar!!!\""
468 | ]
469 | },
470 | {
471 | "cell_type": "markdown",
472 | "metadata": {},
473 | "source": [
474 | "Podemos definir a implementação de uma função em **_Python_** simples, para enviar uma _mensagem secreta_, através de um _canal de comunicação_ e que é interceptada e modificada por um **_Atacante_**, da seguinte forma:"
475 | ]
476 | },
477 | {
478 | "cell_type": "code",
479 | "execution_count": 10,
480 | "metadata": {},
481 | "outputs": [],
482 | "source": [
483 | "# Função para enviar uma mensagem secreta, de um Emissor para um Receptor, usando a Cifra de César,\n",
484 | "# para os processos de Encriptação e Desencriptação da mensagem, e interceptada por um Atacante\n",
485 | "def enviar_mensagem_secreta_usando_cifra_cesar_com_intercepcao(nome_emissor, nome_receptor, nome_atacante, mensagem):\n",
486 | " \n",
487 | " # Impressão do cabeçalho da demonstração do envio de uma mensagem secreta, com intercepção\n",
488 | " print(\"\\n\\n--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\\n\\n\")\n",
489 | " \n",
490 | " # Encriptação da mensagem secreta, usando a Cifra de César\n",
491 | " texto_cifra = encriptacao_cifra_cesar(mensagem, deslocacao=3)\n",
492 | " \n",
493 | " # O Emissor encripta a mensagem secreta original a enviar\n",
494 | " print(f\"O Emissor ({nome_emissor}) encripta a mensagem original a enviar (i.e., o texto em claro)...\\n\")\n",
495 | " \n",
496 | " # A transformação da mensagem secreta original no Texto de Cifra\n",
497 | " print(f\"Encriptação da mensagem original a enviar (i.e., texto em claro):\\n - \\\"{mensagem}\\\" --> \\\"{texto_cifra}\\\"\\n\")\n",
498 | " \n",
499 | " # Envio da mensagem encripta do Emissor ao Receptor\n",
500 | " print(f\"Envio da mensagem encriptada, através do canal de comunicação, do Emissor ({nome_emissor}) para o Receptor ({nome_receptor})...\\n\")\n",
501 | " \n",
502 | " # O Atacante intercepta a mensagem encriptada\n",
503 | " print(f\"O Atacante ({nome_atacante}) intercepta a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
504 | " \n",
505 | " # Desencriptação da mensagem secreta, usando a Cifra de César\n",
506 | " texto_em_claro_interceptado = desencriptacao_cifra_cesar(texto_cifra, deslocacao=3)\n",
507 | " \n",
508 | " # O Atacante altera o conteúdo do Texto em Claro interceptado\n",
509 | " # Mais especificamente, realizando as substituições necessarias para alterar a mensagem secreta\n",
510 | " # de \"Longa vida ao Imperador Cesar!!!\" para \"Longa vida ao Imperador Pompeu!!!\"\n",
511 | " \n",
512 | " # Inicialização do Texto em Claro modificado\n",
513 | " texto_em_claro_modificado = \"\"\n",
514 | " \n",
515 | " # Modificação do Texto em Claro\n",
516 | " for caracter_indice in range(len(texto_em_claro_interceptado) + 1):\n",
517 | " \n",
518 | " # Se um índice do caractér é menor que 24\n",
519 | " if caracter_indice < 24:\n",
520 | " \n",
521 | " # Concatenação do caractér atual\n",
522 | " texto_em_claro_modificado += texto_em_claro_interceptado[caracter_indice]\n",
523 | "\n",
524 | " # Se um índice do caractér é igual a 24\n",
525 | " elif caracter_indice == 24:\n",
526 | " \n",
527 | " # Alteração do caractér atual\n",
528 | " texto_em_claro_modificado += \"P\"\n",
529 | " \n",
530 | " # Se um índice do caractér é igual a 25\n",
531 | " elif caracter_indice == 25:\n",
532 | " \n",
533 | " # Alteração do caractér atual\n",
534 | " texto_em_claro_modificado += \"o\"\n",
535 | " \n",
536 | " # Se um índice do caractér é igual a 26\n",
537 | " elif caracter_indice == 26:\n",
538 | " \n",
539 | " # Alteração do caractér atual\n",
540 | " texto_em_claro_modificado += \"m\"\n",
541 | " \n",
542 | " # Se um índice do caractér é igual a 27\n",
543 | " elif caracter_indice == 27:\n",
544 | " \n",
545 | " # Alteração do caractér atual\n",
546 | " texto_em_claro_modificado += \"p\"\n",
547 | " \n",
548 | " # Se um índice do caractér é igual a 28\n",
549 | " elif caracter_indice == 28:\n",
550 | " \n",
551 | " # Alteração do caractér atual\n",
552 | " texto_em_claro_modificado += \"e\"\n",
553 | " \n",
554 | " # Se um índice do caractér é igual a 29\n",
555 | " elif caracter_indice == 29:\n",
556 | " \n",
557 | " # Alteração do caractér atual\n",
558 | " texto_em_claro_modificado += \"u\"\n",
559 | " \n",
560 | " # Se um índice do caractér está entre 30 e 31\n",
561 | " elif 30 <= caracter_indice <= 31:\n",
562 | " \n",
563 | " # Concatenação do caractér atual\n",
564 | " texto_em_claro_modificado += texto_em_claro_interceptado[caracter_indice]\n",
565 | " \n",
566 | " # Se um índice do caractér é igual a 32\n",
567 | " elif caracter_indice == 32:\n",
568 | " \n",
569 | " # Alteração do caractér atual\n",
570 | " texto_em_claro_modificado += \"!\"\n",
571 | " \n",
572 | " # Modificação da mensagem secreta interceptada\n",
573 | " print(f\"Modificação da mensagem secreta interceptada (i.e., texto em claro):\\n - \\\"{texto_em_claro_interceptado}\\\" --> \\\"{texto_em_claro_modificado}\\\"\\n\")\n",
574 | " \n",
575 | " # Encriptação da mensagem secreta interceptada e modificada, usando a Cifra de César\n",
576 | " texto_cifra = encriptacao_cifra_cesar(texto_em_claro_modificado, deslocacao=3)\n",
577 | " \n",
578 | " # O Atacante encripta a mensagem modificada a enviar\n",
579 | " print(f\"O Atacante ({nome_atacante}) encripta a mensagem modificada a enviar (i.e., o texto em claro modificado)...\\n\")\n",
580 | " \n",
581 | " # Encriptação da mensagem modificada a enviar\n",
582 | " print(f\"Encriptação da mensagem modificada a enviar (i.e., texto em claro modificado):\\n - \\\"{texto_em_claro_modificado}\\\" --> \\\"{texto_cifra}\\\"\\n\")\n",
583 | " \n",
584 | " # Envio da mensagem maliciosa encriptada\n",
585 | " print(f\"Envio da mensagem maliciosa encriptada, através do canal de comunicação, do Atacante ({nome_atacante}) para o Receptor ({nome_receptor})...\\n\")\n",
586 | " \n",
587 | " # O Receptor recebe a mensagem encriptada\n",
588 | " print(f\"O Receptor ({nome_receptor}) recebe a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
589 | " \n",
590 | " # Desencriptação da mensagem secreta, usando a Cifra de César\n",
591 | " texto_em_claro = desencriptacao_cifra_cesar(texto_cifra, deslocacao=3)\n",
592 | " \n",
593 | " # O Receptor desencripta a mensagem encriptada recebida\n",
594 | " print(f\"O Receptor ({nome_receptor}) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\\n\")\n",
595 | "\n",
596 | " # A transformação da mensagem secreta encriptada no Texto em Claro\n",
597 | " print(f\"Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\\n \\\"{texto_cifra}\\\" --> \\\"{texto_em_claro}\\\"\")\n",
598 | " \n",
599 | " # Impressão do rodapé da demonstração do envio de uma mensagem secreta, com intercepção\n",
600 | " print(\"\\n\\n--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\\n\\n\")"
601 | ]
602 | },
603 | {
604 | "cell_type": "markdown",
605 | "metadata": {},
606 | "source": [
607 | "Agora, a **_Alice_** procede ao envio da mensagem ao **_Bob_**, de forma secreta, mas em que a mensagem é interceptada e modificada pela **_Eva_**, usando a função implementada anteriormente em **_Python_**:"
608 | ]
609 | },
610 | {
611 | "cell_type": "code",
612 | "execution_count": 11,
613 | "metadata": {},
614 | "outputs": [
615 | {
616 | "name": "stdout",
617 | "output_type": "stream",
618 | "text": [
619 | "\n",
620 | "\n",
621 | "--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\n",
622 | "\n",
623 | "\n",
624 | "O Emissor (Alice) encripta a mensagem original a enviar (i.e., o texto em claro)...\n",
625 | "\n",
626 | "Encriptação da mensagem original a enviar (i.e., texto em claro):\n",
627 | " - \"Longa vida ao Imperador Cesar!!!\" --> \"Orqjd ylgd dr Lpshudgru Fhvdu!!!\"\n",
628 | "\n",
629 | "Envio da mensagem encriptada, através do canal de comunicação, do Emissor (Alice) para o Receptor (Bob)...\n",
630 | "\n",
631 | "O Atacante (Eva) intercepta a mensagem encriptada (i.e., o texto de cifra)...\n",
632 | "\n",
633 | "Modificação da mensagem secreta interceptada (i.e., texto em claro):\n",
634 | " - \"Longa vida ao Imperador Cesar!!!\" --> \"Longa vida ao Imperador Pompeu!!!\"\n",
635 | "\n",
636 | "O Atacante (Eva) encripta a mensagem modificada a enviar (i.e., o texto em claro modificado)...\n",
637 | "\n",
638 | "Encriptação da mensagem modificada a enviar (i.e., texto em claro modificado):\n",
639 | " - \"Longa vida ao Imperador Pompeu!!!\" --> \"Orqjd ylgd dr Lpshudgru Srpshx!!!\"\n",
640 | "\n",
641 | "Envio da mensagem maliciosa encriptada, através do canal de comunicação, do Atacante (Eva) para o Receptor (Bob)...\n",
642 | "\n",
643 | "O Receptor (Bob) recebe a mensagem encriptada (i.e., o texto de cifra)...\n",
644 | "\n",
645 | "O Receptor (Bob) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\n",
646 | "\n",
647 | "Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\n",
648 | " \"Orqjd ylgd dr Lpshudgru Srpshx!!!\" --> \"Longa vida ao Imperador Pompeu!!!\"\n",
649 | "\n",
650 | "\n",
651 | "--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\n",
652 | "\n",
653 | "\n"
654 | ]
655 | }
656 | ],
657 | "source": [
658 | "# Envio da mensagem secreta, usando a Cifra de César, com intercepção\n",
659 | "enviar_mensagem_secreta_usando_cifra_cesar_com_intercepcao(NOME_EMISSOR, NOME_RECEPTOR, NOME_ATACANTE, MENSAGEM)"
660 | ]
661 | },
662 | {
663 | "cell_type": "markdown",
664 | "metadata": {},
665 | "source": [
666 | "Este exemplo demonstra a extrema importância de alguns parâmetros do **_Algoritmo de Encriptação_** serem:\n",
667 | "* _Secretos_:\n",
668 | " * Como se tratasse de um _segredo_ ou _chave secreta_;\n",
669 | "* _Privados_/_Confidênciais_:\n",
670 | " * Apenas do conhecimento dos intervinientes envolvidos directamente na transmissão da mensagem secreta (ou seja, o **_Emissor_** e o **_Receptor_**);"
671 | ]
672 | },
673 | {
674 | "cell_type": "markdown",
675 | "metadata": {},
676 | "source": [
677 | "Adicionalmente, em relação aos exemplos anteriores, pode-se verificar que um terceiro interviniente conseguiria sempre interceptar e aceder ao conteúdo facilmente, sem precisar necessariamente de conhecer o _segredo_ usado."
678 | ]
679 | },
680 | {
681 | "cell_type": "markdown",
682 | "metadata": {},
683 | "source": [
684 | "Isto porque, se o **_Atacante_** tiver conhecimento que a _primitiva criptográfica_ em uso é a **_Cifra de César_**, consegue inferir que o espaço de soluções para a _deslocação alfabética_ é obrigatoriamente um _número inteiro_ de _0_ a _25_, pois é o número de _deslocações alfabéticas_ possíveis, até se percorrer todos os caractéres do alfabeto."
685 | ]
686 | },
687 | {
688 | "cell_type": "markdown",
689 | "metadata": {},
690 | "source": [
691 | "A partir deste conhecimento, é fácil para o **_Atacante_** experimentar exaustivamente, como _deslocamento alfabético_, todas possibilidades do espaço de soluções para o processo de **_Desencriptação_**, num _ataque criptográfico_ que é conhecido como **_Ataque_**/**_Procura de Força Bruta_** (ver mais detalhes em [https://pt.wikipedia.org/wiki/Busca_por_for%C3%A7a_bruta](https://pt.wikipedia.org/wiki/Busca_por_for%C3%A7a_bruta))."
692 | ]
693 | },
694 | {
695 | "cell_type": "markdown",
696 | "metadata": {},
697 | "source": [
698 | "Mesmo que o **_Atacante_** não saiba qual é a mensagem original (i.e., em _texto em claro_ inicial), o mesmo pode realizar um processo de **_Criptanálise_**, elaborando um _dicionário_ de **_Ataque de Texto de Cifra Escolhido_** e tentando inferir algo sobre a _deslocação alfabética_ usada (ver mais detalhes em [https://pt.wikipedia.org/wiki/Ataque_de_cifrotexto_escolhido](https://pt.wikipedia.org/wiki/Ataque_de_cifrotexto_escolhido))."
699 | ]
700 | },
701 | {
702 | "cell_type": "markdown",
703 | "metadata": {},
704 | "source": [
705 | "No próximo exemplo, é demonstrado um cenário, onde o **_Atacante_** tenta esta abordagem e como o mesmo pode tentar inferir algo sobre a _deslocação alfabética_ usada na **_Cifra de César_**."
706 | ]
707 | },
708 | {
709 | "cell_type": "markdown",
710 | "metadata": {},
711 | "source": [
712 | "### Exemplo #3 - Envio de mensagem secreta, interceptada e alvo de Criptanálise (Ataque/Procura de Força Bruta e Ataque de Texto de Cifra Escolhido)"
713 | ]
714 | },
715 | {
716 | "cell_type": "markdown",
717 | "metadata": {},
718 | "source": [
719 | "Imagine-se o seguinte cenário:\n",
720 | "* A **_Alice_** é o **_Emissor_**;\n",
721 | "* O **_Bob_** é o **_Receptor_**;\n",
722 | "* A **_Alice_** pretende enviar ao **_Bob_**, a seguinte mensagem secreta \"_Longa vida ao Imperador Cesar!!!_\";\n",
723 | "* A **_Alice_** e o **_Bob_** têm um _segredo partilhado_, que neste caso, é a _deslocação alfabética_, _s=15_;\n",
724 | "* A **_Eva_** é o **_Atacante_**;\n",
725 | "* A **_Eva_** não tem conhecimento do _segredo partilhado_ entre a **_Alice_** e o **_Bob_**;\n",
726 | "* A **_Eva_** vai interceptar e criar uma cópia sobre a mensagem enviada para o **_Bob_**;\n",
727 | "* A **_Eva_** vai efetuar **_Criptanálise_**, através de um **_Ataque de Texto de Cifra Escolhido_** ao conteúdo da cópia da mensagem secreta encriptada interceptada;\n",
728 | "* A **_Eva_** realiza este processo, de forma que nem a **_Alice_** nem o **_Bob_** desconfiem de nada;"
729 | ]
730 | },
731 | {
732 | "cell_type": "markdown",
733 | "metadata": {},
734 | "source": [
735 | "Mais uma vez, têm que ser definidos os ingredientes fundamentais desta demonstração:"
736 | ]
737 | },
738 | {
739 | "cell_type": "code",
740 | "execution_count": 12,
741 | "metadata": {},
742 | "outputs": [],
743 | "source": [
744 | "# Definição do nome do Emissor\n",
745 | "NOME_EMISSOR = \"Alice\"\n",
746 | "\n",
747 | "# Definição do nome do Receptor\n",
748 | "NOME_RECEPTOR = \"Bob\"\n",
749 | "\n",
750 | "# Definição do nome do Atacante\n",
751 | "NOME_ATACANTE = \"Eva\"\n",
752 | "\n",
753 | "# Definição da mensagem, que a Alice pretende enviar ao Bob, de forma secreta e que a Eva pretende interceptar\n",
754 | "MENSAGEM = \"Longa vida ao Imperador Cesar!!!\""
755 | ]
756 | },
757 | {
758 | "cell_type": "markdown",
759 | "metadata": {},
760 | "source": [
761 | "Primeiro, seria necessário implementar o procedimento para a criação do _dicionário_ de **_Ataque de Texto de Cifra Escolhido_** em **_Python_**:"
762 | ]
763 | },
764 | {
765 | "cell_type": "code",
766 | "execution_count": 13,
767 | "metadata": {},
768 | "outputs": [],
769 | "source": [
770 | "# Função para criar dicionário para um Ataque de Texto de Cifra Escolhido, efetuado sobre a Cifra César,\n",
771 | "# dado um Texto de Cifra e o espaço de soluções possíveis (i.e., 26 deslocações alfabéticas possíveis)\n",
772 | "def criar_dicionario_ataque_texto_cifra_escolhido_cifra_cesar(texto_cifra, num_espaco_solucoes=26):\n",
773 | " \n",
774 | " # Inicialização do dicionário para um Ataque de Texto de Cifra Escolhido, efetuado sobre a Cifra de César\n",
775 | " dicionario_ataque_texto_cifra_escolhido_cifra_cesar = []\n",
776 | " \n",
777 | " # Para todos os deslocamentos alfabéticos, no espaço de soluções possíveis\n",
778 | " for deslocamento_atual in range(num_espaco_solucoes):\n",
779 | " \n",
780 | " # Desencriptação do Texto de Cifra, considerando o deslocamento alfabético atual\n",
781 | " texto_em_claro = desencriptacao_cifra_cesar(texto_cifra, deslocacao=deslocamento_atual)\n",
782 | " \n",
783 | " # Guardar em memória, a desencriptação do Texto de Cifra, considerando o deslocamento alfabético atual\n",
784 | " dicionario_ataque_texto_cifra_escolhido_cifra_cesar.append(texto_em_claro)\n",
785 | " \n",
786 | " # Retorna o dicionário do Ataque de Textro de Cifra Escolhido criado anteriormente\n",
787 | " return dicionario_ataque_texto_cifra_escolhido_cifra_cesar"
788 | ]
789 | },
790 | {
791 | "cell_type": "markdown",
792 | "metadata": {},
793 | "source": [
794 | "Podemos definir a implementação de uma função em **_Python_** simples, para enviar uma _mensagem secreta_, através de um _canal de comunicação_ e que é interceptada e alvo de um **_Ataque de Texto de Cifra Escolhido_** por um **_Atacante_**, da seguinte forma:"
795 | ]
796 | },
797 | {
798 | "cell_type": "code",
799 | "execution_count": 14,
800 | "metadata": {},
801 | "outputs": [],
802 | "source": [
803 | "# Função para enviar uma mensagem secreta, de um Emissor para um Receptor, usando a Cifra de César,\n",
804 | "# para os processos de Encriptação e Desencriptação da mensagem, e interceptada por um Atacante\n",
805 | "def enviar_mensagem_secreta_usando_cifra_cesar_com_intercepcao_e_ataque_texto_cifra_escolhido(nome_emissor, nome_receptor, nome_atacante, mensagem):\n",
806 | " \n",
807 | " # Impressão do cabeçalho da demonstração do envio de uma mensagem secreta, com intercepção\n",
808 | " print(\"\\n\\n--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\\n\\n\")\n",
809 | " \n",
810 | " # O Emissor quer enviar a mensagem secreta ao Receptor\n",
811 | " print(f\"O Emissor ({nome_emissor}) quer enviar a seguinte mensagem ao Receptor ({nome_receptor}):\\n - \\\"{mensagem}\\\" ...\\n\")\n",
812 | " \n",
813 | " # Encriptação da mensagem secreta, usando a Cifra de César\n",
814 | " texto_cifra = encriptacao_cifra_cesar(mensagem, deslocacao=15)\n",
815 | " \n",
816 | " # O Emissor encripta a mensagem secreta original a enviar\n",
817 | " print(f\"O Emissor ({nome_emissor}) encripta a mensagem original a enviar (i.e., o texto em claro)...\\n\")\n",
818 | " \n",
819 | " # A transformação da mensagem secreta original no Texto de Cifra\n",
820 | " print(f\"Encriptação da mensagem original a enviar (i.e., texto em claro):\\n - \\\"{mensagem}\\\" --> \\\"{texto_cifra}\\\"\\n\")\n",
821 | " \n",
822 | " # Envio da mensagem encripta do Emissor ao Receptor\n",
823 | " print(f\"Envio da mensagem encriptada, através do canal de comunicação, do Emissor ({nome_emissor}) para o Receptor ({nome_receptor})...\\n\")\n",
824 | " \n",
825 | " # O Atacante intercepta a mensagem encriptada\n",
826 | " print(f\"O Atacante ({nome_atacante}) intercepta a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
827 | " \n",
828 | " # Intercepção e cópia do Texto Cifra\n",
829 | " copia_texto_cifra_interceptado = texto_cifra\n",
830 | " \n",
831 | " # O Atacante, de seguida, experimenta, exaustivamente, todas as deslocações alfabéticas possíveis,\n",
832 | " # através de um Ataque/Procura de Força Bruta (mais especificamente, um Ataque de Texto de Cifra Escolhido)\n",
833 | " # e cria um dicionário com todos os Textos em Claro, resultantes deste processo\n",
834 | " \n",
835 | " # O Atacante intercepta a mensagem encriptada\n",
836 | " print(f\"O Atacante ({nome_atacante}) cria um dicionário de Ataque de Texto de Cifra Escolhido, a partir da mensagem encriptada interceptada...\\n\")\n",
837 | " \n",
838 | " # Criação do dicionário de Ataque de Texto de Cifra Escolhido\n",
839 | " dicionario_ataque_texto_cifra_escolhido_cifra_cesar = criar_dicionario_ataque_texto_cifra_escolhido_cifra_cesar(texto_cifra, num_espaco_solucoes=26)\n",
840 | " \n",
841 | " # O Receptor recebe a mensagem encriptada\n",
842 | " print(f\"O Receptor ({nome_receptor}) recebe a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
843 | " \n",
844 | " # Desencriptação da mensagem secreta, usando a Cifra de César\n",
845 | " texto_em_claro = desencriptacao_cifra_cesar(texto_cifra, deslocacao=15)\n",
846 | " \n",
847 | " # O Receptor desencripta a mensagem encriptada recebida\n",
848 | " print(f\"O Receptor ({nome_receptor}) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\\n\")\n",
849 | "\n",
850 | " # A transformação da mensagem secreta encriptada no Texto em Claro\n",
851 | " print(f\"Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\\n \\\"{texto_cifra}\\\" --> \\\"{texto_em_claro}\\\"\")\n",
852 | " \n",
853 | " # Impressão do rodapé da demonstração do envio de uma mensagem secreta, com intercepção\n",
854 | " print(\"\\n\\n--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\\n\\n\")\n",
855 | " \n",
856 | " # Retorna o dicionário de Ataque de Texto de Cifra Escolhido\n",
857 | " return dicionario_ataque_texto_cifra_escolhido_cifra_cesar"
858 | ]
859 | },
860 | {
861 | "cell_type": "markdown",
862 | "metadata": {},
863 | "source": [
864 | "Agora, a **_Alice_** procede ao envio da mensagem ao **_Bob_**, de forma secreta, mas em que a mensagem é interceptada e alvo de um **_Ataque de Texto de Cifra Escolhido_** feito pela **_Eva_**, usando a função implementada anteriormente em **_Python_**:"
865 | ]
866 | },
867 | {
868 | "cell_type": "code",
869 | "execution_count": 15,
870 | "metadata": {
871 | "scrolled": false
872 | },
873 | "outputs": [
874 | {
875 | "name": "stdout",
876 | "output_type": "stream",
877 | "text": [
878 | "\n",
879 | "\n",
880 | "--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\n",
881 | "\n",
882 | "\n",
883 | "O Emissor (Alice) quer enviar a seguinte mensagem ao Receptor (Bob):\n",
884 | " - \"Longa vida ao Imperador Cesar!!!\" ...\n",
885 | "\n",
886 | "O Emissor (Alice) encripta a mensagem original a enviar (i.e., o texto em claro)...\n",
887 | "\n",
888 | "Encriptação da mensagem original a enviar (i.e., texto em claro):\n",
889 | " - \"Longa vida ao Imperador Cesar!!!\" --> \"Adcvp kxsp pd Xbetgpsdg Rthpg!!!\"\n",
890 | "\n",
891 | "Envio da mensagem encriptada, através do canal de comunicação, do Emissor (Alice) para o Receptor (Bob)...\n",
892 | "\n",
893 | "O Atacante (Eva) intercepta a mensagem encriptada (i.e., o texto de cifra)...\n",
894 | "\n",
895 | "O Atacante (Eva) cria um dicionário de Ataque de Texto de Cifra Escolhido, a partir da mensagem encriptada interceptada...\n",
896 | "\n",
897 | "O Receptor (Bob) recebe a mensagem encriptada (i.e., o texto de cifra)...\n",
898 | "\n",
899 | "O Receptor (Bob) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\n",
900 | "\n",
901 | "Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\n",
902 | " \"Adcvp kxsp pd Xbetgpsdg Rthpg!!!\" --> \"Longa vida ao Imperador Cesar!!!\"\n",
903 | "\n",
904 | "\n",
905 | "--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\n",
906 | "\n",
907 | "\n"
908 | ]
909 | }
910 | ],
911 | "source": [
912 | "# Envio da mensagem secreta, usando a Cifra de César, com intercepção e Ataque/Procura de Força Bruta (Ataque de Texto de Cifra Escolhido)\n",
913 | "dicionario_ataque_texto_cifra_escolhido_cifra_cesar = enviar_mensagem_secreta_usando_cifra_cesar_com_intercepcao_e_ataque_texto_cifra_escolhido(NOME_EMISSOR, NOME_RECEPTOR, NOME_ATACANTE, MENSAGEM)"
914 | ]
915 | },
916 | {
917 | "cell_type": "markdown",
918 | "metadata": {},
919 | "source": [
920 | "Adicionalmente, também é necessário criar uma função em **_Python_** que imprime todos os _textos em claro_ resultantes do _dicionário_ do **_Ataque de Texto de Cifra Escolhido_**, para a **_Criptanálise_** da **_Cifra de César_**:"
921 | ]
922 | },
923 | {
924 | "cell_type": "code",
925 | "execution_count": 16,
926 | "metadata": {},
927 | "outputs": [],
928 | "source": [
929 | "# Função para a Criptanálise do Ataque de Texto de Cifra Escolhido, efetudado sobre a Cifra de César,\n",
930 | "# dado um dicionário com todos os Textos em Claro resultantes deste processo\n",
931 | "def criptanalise_ataque_texto_cifra_escolhido_cifra_cesar(dicionario_ataque_texto_cifra_escolhido_cifra_cesar):\n",
932 | " \n",
933 | " # Impressão do cabeçalho da demonstração da Criptanálise do Ataque de Texto de Cifra Escolhido, efetudado sobre a Cifra de César\n",
934 | " print(\"\\n\\n--- Criptanálise do Ataque de Texto de Cifra Escolhido feito à Cifra de César ---\\n\\n\")\n",
935 | " \n",
936 | " # Impressão de um cabeçalho adicional para os resultdos do dicionário do Ataque de Texto de Cifra Escolhido\n",
937 | " print(\"Resultados da Criptanálise do dicionário do Ataque de Texto de Cifra Escolhido:\\n\")\n",
938 | " \n",
939 | " # Para o índice e o conteúdo de todos os Textos em Claro, resultantes do dicionário do Ataque de Texto de Cifra Escolhido\n",
940 | " for texto_claro_indice, texto_claro in enumerate(dicionario_ataque_texto_cifra_escolhido_cifra_cesar):\n",
941 | " \n",
942 | " # Imprime o índice e o conteúdo do Texto em Claro atual, resultantes do dicionário do Ataque de Texto de Cifra Escolhido\n",
943 | " print(f\" - Para s={texto_claro_indice}: \\\"{texto_claro}\\\"\\n\")\n",
944 | " \n",
945 | " # Impressão do rodapé da demonstração da Criptanálise do Ataque de Texto de Cifra Escolhido, efetudado sobre a Cifra de César\n",
946 | " print(\"\\n\\n--- Fim da Criptanálise do Ataque de Texto de Cifra Escolhido feito à Cifra de César ---\\n\\n\")"
947 | ]
948 | },
949 | {
950 | "cell_type": "markdown",
951 | "metadata": {},
952 | "source": [
953 | "Por fim, é feita a **_Criptanálise_** da **_Cifra de César_**, sobre os _textos em claro_ resultantes do _dicionário_ do **_Ataque de Texto de Cifra Escolhido_**:"
954 | ]
955 | },
956 | {
957 | "cell_type": "code",
958 | "execution_count": 17,
959 | "metadata": {
960 | "scrolled": false
961 | },
962 | "outputs": [
963 | {
964 | "name": "stdout",
965 | "output_type": "stream",
966 | "text": [
967 | "\n",
968 | "\n",
969 | "--- Criptanálise do Ataque de Texto de Cifra Escolhido feito à Cifra de César ---\n",
970 | "\n",
971 | "\n",
972 | "Resultados da Criptanálise do dicionário do Ataque de Texto de Cifra Escolhido:\n",
973 | "\n",
974 | " - Para s=0: \"Adcvp kxsp pd Xbetgpsdg Rthpg!!!\"\n",
975 | "\n",
976 | " - Para s=1: \"Zcbuo jwro oc Wadsforcf Qsgof!!!\"\n",
977 | "\n",
978 | " - Para s=2: \"Ybatn ivqn nb Vzcrenqbe Prfne!!!\"\n",
979 | "\n",
980 | " - Para s=3: \"Xazsm hupm ma Uybqdmpad Oqemd!!!\"\n",
981 | "\n",
982 | " - Para s=4: \"Wzyrl gtol lz Txapclozc Npdlc!!!\"\n",
983 | "\n",
984 | " - Para s=5: \"Vyxqk fsnk ky Swzobknyb Mockb!!!\"\n",
985 | "\n",
986 | " - Para s=6: \"Uxwpj ermj jx Rvynajmxa Lnbja!!!\"\n",
987 | "\n",
988 | " - Para s=7: \"Twvoi dqli iw Quxmzilwz Kmaiz!!!\"\n",
989 | "\n",
990 | " - Para s=8: \"Svunh cpkh hv Ptwlyhkvy Jlzhy!!!\"\n",
991 | "\n",
992 | " - Para s=9: \"Rutmg bojg gu Osvkxgjux Ikygx!!!\"\n",
993 | "\n",
994 | " - Para s=10: \"Qtslf anif ft Nrujwfitw Hjxfw!!!\"\n",
995 | "\n",
996 | " - Para s=11: \"Psrke zmhe es Mqtivehsv Giwev!!!\"\n",
997 | "\n",
998 | " - Para s=12: \"Orqjd ylgd dr Lpshudgru Fhvdu!!!\"\n",
999 | "\n",
1000 | " - Para s=13: \"Nqpic xkfc cq Korgtcfqt Eguct!!!\"\n",
1001 | "\n",
1002 | " - Para s=14: \"Mpohb wjeb bp Jnqfsbeps Dftbs!!!\"\n",
1003 | "\n",
1004 | " - Para s=15: \"Longa vida ao Imperador Cesar!!!\"\n",
1005 | "\n",
1006 | " - Para s=16: \"Knmfz uhcz zn Hlodqzcnq Bdrzq!!!\"\n",
1007 | "\n",
1008 | " - Para s=17: \"Jmley tgby ym Gkncpybmp Acqyp!!!\"\n",
1009 | "\n",
1010 | " - Para s=18: \"Ilkdx sfax xl Fjmboxalo Zbpxo!!!\"\n",
1011 | "\n",
1012 | " - Para s=19: \"Hkjcw rezw wk Eilanwzkn Yaown!!!\"\n",
1013 | "\n",
1014 | " - Para s=20: \"Gjibv qdyv vj Dhkzmvyjm Xznvm!!!\"\n",
1015 | "\n",
1016 | " - Para s=21: \"Fihau pcxu ui Cgjyluxil Wymul!!!\"\n",
1017 | "\n",
1018 | " - Para s=22: \"Ehgzt obwt th Bfixktwhk Vxltk!!!\"\n",
1019 | "\n",
1020 | " - Para s=23: \"Dgfys navs sg Aehwjsvgj Uwksj!!!\"\n",
1021 | "\n",
1022 | " - Para s=24: \"Cfexr mzur rf Zdgvirufi Tvjri!!!\"\n",
1023 | "\n",
1024 | " - Para s=25: \"Bedwq lytq qe Ycfuhqteh Suiqh!!!\"\n",
1025 | "\n",
1026 | "\n",
1027 | "\n",
1028 | "--- Fim da Criptanálise do Ataque de Texto de Cifra Escolhido feito à Cifra de César ---\n",
1029 | "\n",
1030 | "\n"
1031 | ]
1032 | }
1033 | ],
1034 | "source": [
1035 | "# Criptanálise do Ataque de Texto de Cifra Escolhido, efetudado sobre a Cifra de César,\n",
1036 | "# dado um dicionário com todos os Textos em Claro resultantes deste processo\n",
1037 | "criptanalise_ataque_texto_cifra_escolhido_cifra_cesar(dicionario_ataque_texto_cifra_escolhido_cifra_cesar)"
1038 | ]
1039 | },
1040 | {
1041 | "cell_type": "markdown",
1042 | "metadata": {},
1043 | "source": [
1044 | "A partir dos resultados presentes no _dicionário_ de **_Ataque de Texto de Cifra Escolhido_**, é fácil inferir que o _texto em claro_ que faz mais sentido, em termos de _linguagem_ e _contexto_, é quando se usa a _deslocação alfabética_, _s=15_, que é, de facto, o _segredo partilhado_ entre o **_Emissor_** e o **_Receptor_**, durante a transmissão da mensagem secreta, no exemplo anterior."
1045 | ]
1046 | },
1047 | {
1048 | "cell_type": "markdown",
1049 | "metadata": {},
1050 | "source": [
1051 | "A **_Eva_** poderia guardar, em memória, todas as mensagens secretas trocadas, entre a **_Alice_** e o **_Bob_**, e sabendo que em todas, foi sempre usada a **_Cifra de César_**, pode repetir este procedimento para todas essas mensagens, tendo facilmente acesso ao seu verdadeiro conteúdo (i.e., o seu _texto em claro_)."
1052 | ]
1053 | },
1054 | {
1055 | "cell_type": "markdown",
1056 | "metadata": {},
1057 | "source": [
1058 | "***"
1059 | ]
1060 | },
1061 | {
1062 | "cell_type": "markdown",
1063 | "metadata": {},
1064 | "source": [
1065 | "**Uma atualização em:** 27 de Junho, 2021\n",
1066 | "\n",
1067 | "**Autor:** _Rúben André Barreiro_\n",
1068 | "\n",
1069 | "**Adaptado da Dissertação/Tese de Mestrado:**\n",
1070 | "* \"_Acordo de Chave de Conferência Semi-Quântico (ACCSQ)_\" - 2021\n",
1071 | "\n",
1072 | "**© Direitos de autoria Qiskrypt, 2021, todos os direitos reservados.**"
1073 | ]
1074 | },
1075 | {
1076 | "cell_type": "markdown",
1077 | "metadata": {},
1078 | "source": [
1079 | "***"
1080 | ]
1081 | },
1082 | {
1083 | "cell_type": "markdown",
1084 | "metadata": {},
1085 | "source": [
1086 | "
Este trabalho está licenciado sobre uma Licensa Internacional da Creative Commons Attribution-NonCommercial-NoDerivatives 4.0."
1087 | ]
1088 | }
1089 | ],
1090 | "metadata": {
1091 | "kernelspec": {
1092 | "display_name": "Python 3",
1093 | "language": "python",
1094 | "name": "python3"
1095 | },
1096 | "language_info": {
1097 | "codemirror_mode": {
1098 | "name": "ipython",
1099 | "version": 3
1100 | },
1101 | "file_extension": ".py",
1102 | "mimetype": "text/x-python",
1103 | "name": "python",
1104 | "nbconvert_exporter": "python",
1105 | "pygments_lexer": "ipython3",
1106 | "version": "3.8.5"
1107 | }
1108 | },
1109 | "nbformat": 4,
1110 | "nbformat_minor": 4
1111 | }
1112 |
--------------------------------------------------------------------------------
/pt/1. introducao/extras/1.1.1-cifra-deslocamento-cesar.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "text/html": [
11 | ""
12 | ],
13 | "text/plain": [
14 | ""
15 | ]
16 | },
17 | "metadata": {},
18 | "output_type": "display_data"
19 | }
20 | ],
21 | "source": [
22 | "# Preenchimento da disposição do Jupyter Notebook, em Tela Cheia\n",
23 | "from IPython.core.display import display, HTML\n",
24 | "display(HTML(\"\"))"
25 | ]
26 | },
27 | {
28 | "cell_type": "markdown",
29 | "metadata": {},
30 | "source": [
31 | "# 1.1.1. Cifra de Deslocamento de César"
32 | ]
33 | },
34 | {
35 | "cell_type": "markdown",
36 | "metadata": {},
37 | "source": [
38 | "O **_Império Romano_** foi o período _pós-republicano_ da _antiga civilização romana_, caracterizado por uma forma de _governo autocrática_ liderada por um _imperador_ e por extensas _possessões territoriais_, em volta do _Mar Mediterrâneo_ na _Europa_, _África_ e _Ásia_."
39 | ]
40 | },
41 | {
42 | "cell_type": "markdown",
43 | "metadata": {},
44 | "source": [
45 | "Este _império_ foi governado, durante vários anos, por **_Júlio César_**, visto como um dos mais _severos_ e _impediosos_ _ditadores_ destes tempos."
46 | ]
47 | },
48 | {
49 | "cell_type": "markdown",
50 | "metadata": {},
51 | "source": [
52 | "Durante as suas inúmeras conquistas, o _imperador_ **_Júlio César_** usava um método para trocar mensagens, de forma _secreta_, com os seus _generais_, de forma a planearem tácticas de guerra, de forma segura e sem serem interceptadas pelos seus adversários."
53 | ]
54 | },
55 | {
56 | "cell_type": "markdown",
57 | "metadata": {},
58 | "source": [
59 | "Este método para trocar mensagens, viria a ser conhecido mais tarde como, a **_Cifra de Deslocamento de César_**, em homenagem ao próprio o _imperador_ **_Júlio César_**."
60 | ]
61 | },
62 | {
63 | "cell_type": "markdown",
64 | "metadata": {},
65 | "source": [
66 | "A **_Cifra de Deslocamento de César_** é baseada em _substituições de caractéres_, no qual cada letra da mensagem é substituída por outra, que se apresenta no mesmo _alfabeto_, deslocado um certo número de caractéres para a esquerda ou para direita."
67 | ]
68 | },
69 | {
70 | "cell_type": "markdown",
71 | "metadata": {},
72 | "source": [
73 | "Um simples exemplo de **_Encriptação_** e **_Desencriptação_** desta _cifra_, pode ser alcançado fazendo apenas _deslocações alfabéticas_ de _3_ posições, (para a esquerda ou para a direita) nos caractéres do texto dado como parâmetro de entrada:\n",
74 | "* Para o processo de **_Encriptação_**:\n",
75 | " * _Parâmetro de Entrada_: $m$ (_texto em claro_);\n",
76 | " * _Operação de Transformação:_ $c = enc(m)$ (_deslocação de s=3 caractéres para a direita no alfabeto_);\n",
77 | "* Para o processo de **_Desencriptação_**:\n",
78 | " * _Parâmetro de Entrada_: $c$ (_texto de cifra_);\n",
79 | " * _Operação de Transformação:_ $m = dec(c)$ (_deslocação de s=3 caractéres para a esquerda no alfabeto_);"
80 | ]
81 | },
82 | {
83 | "cell_type": "markdown",
84 | "metadata": {},
85 | "source": [
86 | "**_NOTA_**:\n",
87 | "* Neste exemplo, é usado uma _deslocação_ de 3 _caracteres_, mas este parâmetro não precisa de ser obrigatoriamente _3_ e pode ser variável;"
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "Especificado o exemplo, ambos os processos de **_Encriptação_** e **_Desencriptação_** podem ser facilmente definidos em **_Python_**, como demonstrado de seguida."
95 | ]
96 | },
97 | {
98 | "cell_type": "markdown",
99 | "metadata": {},
100 | "source": [
101 | "Antes de mais, é necessário fazer a codificação de caractéres para valores inteiros décimais, de forma a operar os caractéres e as suas transformações em **_Python_**, segundo o _padrão_ do **_Código de ASCII_** (ver mais detalhes em: [https://pt.wikipedia.org/wiki/ASCII](https://pt.wikipedia.org/wiki/ASCII))."
102 | ]
103 | },
104 | {
105 | "cell_type": "markdown",
106 | "metadata": {},
107 | "source": [
108 | "Para isso, e sabendo que se está a trabalhar com _deslocações alfabéticas_, é necessário definir o _deslocamento_ inicial do alfabeto (i.e., para a primeira letra do mesmo), segundo o _padrão_ do **_Código de ASCII_**, em que:\n",
109 | "* Para a letra '**_A_**' (_maiúscula_), temos o _código_ _65_, em _décimal_;\n",
110 | "* Para a letra '**_a_**' (_minúscula_), temos o _código_ _97_, em _décimal_;"
111 | ]
112 | },
113 | {
114 | "cell_type": "code",
115 | "execution_count": 2,
116 | "metadata": {},
117 | "outputs": [
118 | {
119 | "name": "stdout",
120 | "output_type": "stream",
121 | "text": [
122 | "Codigo ASCII para o caractér 'A' (maiúscula): 65\n",
123 | "Codigo ASCII para o caractér 'a' (minúscula): 97\n"
124 | ]
125 | }
126 | ],
127 | "source": [
128 | "# Definição do Código ASCII para os caractéres 'A' (maiúscula) e 'a' (minúscula) \n",
129 | "CODIGO_ASCII_A_MAISCULA = ord(\"A\")\n",
130 | "CODIGO_ASCII_A_MINUSCULA = ord(\"a\")\n",
131 | "\n",
132 | "# Impressão do Código ASCII para os caractéres 'A' (maiúscula) e 'a' (minúscula) \n",
133 | "print(\"Codigo ASCII para o caractér 'A' (maiúscula): \", CODIGO_ASCII_A_MAISCULA)\n",
134 | "print(\"Codigo ASCII para o caractér 'a' (minúscula): \", CODIGO_ASCII_A_MINUSCULA)"
135 | ]
136 | },
137 | {
138 | "cell_type": "markdown",
139 | "metadata": {},
140 | "source": [
141 | "Adicionalmente, também se sabe que o alfabeto tem exatamente 26 caractéres e que a numeração décimal tem 10 digitos diferentes e distintos:"
142 | ]
143 | },
144 | {
145 | "cell_type": "code",
146 | "execution_count": 3,
147 | "metadata": {},
148 | "outputs": [],
149 | "source": [
150 | "# Definição do número de caractéres do alfabeto (i.e., 26 letras)\n",
151 | "NUMERO_CARACTERES_ALFABETO = 26\n",
152 | "\n",
153 | "# Definição do número de digítos da numeração décimal (i.e., 10 dígitos diferentes e distintos)\n",
154 | "NUMEROS_DIGITOS_DECIMAIS = 10"
155 | ]
156 | },
157 | {
158 | "cell_type": "markdown",
159 | "metadata": {},
160 | "source": [
161 | "Para a implementação do processo de **_Encriptação_** em **_Python_**, temos:"
162 | ]
163 | },
164 | {
165 | "cell_type": "code",
166 | "execution_count": 4,
167 | "metadata": {},
168 | "outputs": [],
169 | "source": [
170 | "# Função em Python para o processo de Encriptação, usando a Cifra de César,\n",
171 | "# dado um Texto em Claro e usando uma deslocação de s=3 caractéres alfabéticos,\n",
172 | "# por defeito, para a direita, de forma a obter-se o Texto de Cifra final\n",
173 | "def encriptacao_cifra_cesar(texto_em_claro, deslocacao=3):\n",
174 | " \n",
175 | " # Inicialização do Texto de Cifra\n",
176 | " texto_de_cifra = \"\"\n",
177 | " \n",
178 | " # Percorre o Texto em Claro\n",
179 | " for caracter_indice in range(len(texto_em_claro)):\n",
180 | " \n",
181 | " # Acesso ao caractér atual do Texto em Claro dado como parâmetro\n",
182 | " caracter = texto_em_claro[caracter_indice]\n",
183 | " \n",
184 | " # Encripta o caractér atual, no caso de ser um maiúscula\n",
185 | " if (caracter.isupper()):\n",
186 | " \n",
187 | " # Realiza a deslocação de s=3 caractéres alfabéticos, por defeito, para a direita,\n",
188 | " # sobre o caracter atual do Texto em Claro\n",
189 | " texto_de_cifra += chr(((ord(caracter) + deslocacao - CODIGO_ASCII_A_MAISCULA) % NUMERO_CARACTERES_ALFABETO) + CODIGO_ASCII_A_MAISCULA)\n",
190 | " \n",
191 | " # Encripta o caractér atual, no caso de ser um minúscula\n",
192 | " elif (caracter.islower()):\n",
193 | " \n",
194 | " # Realiza a deslocação de s=3 caractéres alfabéticos, por defeito, para a direita,\n",
195 | " # sobre o caracter atual do Texto em Claro\n",
196 | " texto_de_cifra += chr(((ord(caracter) + deslocacao - CODIGO_ASCII_A_MINUSCULA) % NUMERO_CARACTERES_ALFABETO) + CODIGO_ASCII_A_MINUSCULA)\n",
197 | " \n",
198 | " elif (caracter.isdigit()):\n",
199 | " texto_de_cifra += str(int(caracter) + deslocacao % NUMEROS_DIGITOS_DECIMAIS)\n",
200 | " \n",
201 | " else:\n",
202 | " texto_de_cifra += caracter\n",
203 | "\n",
204 | " # Retorna o Texto de Cifra final, depois da Encriptação\n",
205 | " return texto_de_cifra"
206 | ]
207 | },
208 | {
209 | "cell_type": "markdown",
210 | "metadata": {},
211 | "source": [
212 | "Para a implementação do processo de **_Desencriptação_** em **_Python_**, temos:"
213 | ]
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": 5,
218 | "metadata": {},
219 | "outputs": [],
220 | "source": [
221 | "# Função em Python para o processo de Desencriptação, usando a Cifra de César,\n",
222 | "# dado um Texto de Cifra e usando uma deslocação de s=3 caractéres alfabéticos,\n",
223 | "# por defeito, para a esquerda, de forma a obter-se o Texto em Claro final\n",
224 | "def desencriptacao_cifra_cesar(texto_de_cifra, deslocacao=3):\n",
225 | " \n",
226 | " # Inicialização do Texto em Claro\n",
227 | " texto_em_claro = \"\"\n",
228 | " \n",
229 | " # Percorre o Texto de Cifra\n",
230 | " for caracter_indice in range(len(texto_de_cifra)):\n",
231 | " \n",
232 | " # Acesso ao caractér atual do Texto de Cifra dado como parâmetro\n",
233 | " caracter = texto_de_cifra[caracter_indice]\n",
234 | " \n",
235 | " # Encripta o caractér atual, no caso de ser um maiúscula\n",
236 | " if (caracter.isupper()):\n",
237 | " \n",
238 | " # Realiza a deslocação de s=3 caractéres alfabéticos, por defeito, para a esquerda,\n",
239 | " # sobre o caracter atual do Texto em Claro\n",
240 | " texto_em_claro += chr(((ord(caracter) - deslocacao - CODIGO_ASCII_A_MAISCULA) % NUMERO_CARACTERES_ALFABETO) + CODIGO_ASCII_A_MAISCULA)\n",
241 | " \n",
242 | " # Encripta o caractér atual, no caso de ser um minúscula\n",
243 | " elif (caracter.islower()):\n",
244 | " \n",
245 | " # Realiza a deslocação de s=3 caractéres alfabéticos, por defeito, para a esquerda,\n",
246 | " # sobre o caracter atual do Texto em Claro\n",
247 | " texto_em_claro += chr(((ord(caracter) - deslocacao - CODIGO_ASCII_A_MINUSCULA) % NUMERO_CARACTERES_ALFABETO) + CODIGO_ASCII_A_MINUSCULA)\n",
248 | " \n",
249 | " elif (caracter.isdigit()):\n",
250 | " texto_em_claro += str(int(caracter) - deslocacao % NUMEROS_DIGITOS_DECIMAIS)\n",
251 | " \n",
252 | " else:\n",
253 | " texto_em_claro += caracter\n",
254 | " \n",
255 | " # Retorna o Texto em Claro final, depois da Desencriptação\n",
256 | " return texto_em_claro"
257 | ]
258 | },
259 | {
260 | "cell_type": "markdown",
261 | "metadata": {},
262 | "source": [
263 | "Agora, dado que já foram definidas as implementações de ambos os processos de **_Encriptação_** e **_Desencriptação_**, ao usar um _canal de comunicação_, agora já é possível transmitir _mensagens secretas_."
264 | ]
265 | },
266 | {
267 | "cell_type": "markdown",
268 | "metadata": {},
269 | "source": [
270 | "### Exemplo #1 - Envio de mensagem secreta"
271 | ]
272 | },
273 | {
274 | "cell_type": "markdown",
275 | "metadata": {},
276 | "source": [
277 | "Imagine-se o seguinte cenário:\n",
278 | "* A **_Alice_** é o **_Emissor_**;\n",
279 | "* O **_Bob_** é o **_Receptor_**;\n",
280 | "* A **_Alice_** pretende enviar ao **_Bob_**, a seguinte mensagem secreta \"_Longa vida ao Imperador Cesar!!!_\";"
281 | ]
282 | },
283 | {
284 | "cell_type": "markdown",
285 | "metadata": {},
286 | "source": [
287 | "Primeiro, têm que ser definidos os ingredientes fundamentais desta demonstração:"
288 | ]
289 | },
290 | {
291 | "cell_type": "code",
292 | "execution_count": 6,
293 | "metadata": {},
294 | "outputs": [],
295 | "source": [
296 | "# Definição do nome do Emissor\n",
297 | "NOME_EMISSOR = \"Alice\"\n",
298 | "\n",
299 | "# Definição do nome do Receptor\n",
300 | "NOME_RECEPTOR = \"Bob\"\n",
301 | "\n",
302 | "# Definição da mensagem, que a Alice pretende enviar ao Bob, de forma secreta\n",
303 | "MENSAGEM = \"Longa vida ao Imperador Cesar!!!\""
304 | ]
305 | },
306 | {
307 | "cell_type": "markdown",
308 | "metadata": {},
309 | "source": [
310 | "Podemos definir a implementação de uma função em **_Python_** simples, para enviar uma _mensagem secreta_, através de um _canal de comunicação_, da seguinte forma:"
311 | ]
312 | },
313 | {
314 | "cell_type": "code",
315 | "execution_count": 7,
316 | "metadata": {},
317 | "outputs": [],
318 | "source": [
319 | "# Função para enviar uma mensagem secreta, de um Emissor para um Receptor, usando a Cifra de César,\n",
320 | "# para os processos de Encriptação e Desencriptação da mensagem\n",
321 | "def enviar_mensagem_secreta_usando_cifra_cesar(nome_emissor, nome_receptor, mensagem):\n",
322 | " \n",
323 | " # Impressão do cabeçalho da demonstração do envio de uma mensagem secreta\n",
324 | " print(\"\\n\\n--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César ---\\n\\n\")\n",
325 | " \n",
326 | " # O Emissor quer enviar a mensagem secreta ao Receptor\n",
327 | " print(f\"O Emissor ({nome_emissor}) quer enviar a seguinte mensagem ao Receptor ({nome_receptor}):\\n - \\\"{mensagem}\\\" ...\\n\")\n",
328 | " \n",
329 | " # Encriptação da mensagem secreta, usando a Cifra de César\n",
330 | " texto_cifra = encriptacao_cifra_cesar(mensagem)\n",
331 | " \n",
332 | " # O Emissor encripta a mensagem secreta original a enviar\n",
333 | " print(f\"O Emissor ({nome_emissor}) encripta a mensagem secreta original a enviar (i.e., o texto em claro)...\\n\")\n",
334 | " \n",
335 | " # A transformação da mensagem secreta original no Texto de Cifra\n",
336 | " print(f\"Encriptação da mensagem secreta original a enviar (i.e., texto em claro):\\n - \\\"{mensagem}\\\" --> \\\"{texto_cifra}\\\"\\n\")\n",
337 | " \n",
338 | " # Envio da mensagem encripta do Emissor ao Receptor\n",
339 | " print(f\"Envio da mensagem encriptada, através do canal de comunicação, do Emissor ({nome_emissor}) para o Receptor ({nome_receptor})...\\n\")\n",
340 | " \n",
341 | " # O Receptor recebe a mensagem encriptada\n",
342 | " print(f\"O Receptor ({nome_receptor}) recebe a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
343 | " \n",
344 | " # Desencriptação da mensagem secreta, usando a Cifra de César\n",
345 | " texto_em_claro = desencriptacao_cifra_cesar(texto_cifra)\n",
346 | " \n",
347 | " # O Emissor encripta a mensagem secreta encriptada recebida\n",
348 | " print(f\"O Receptor ({nome_receptor}) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\\n\")\n",
349 | "\n",
350 | " # A transformação da mensagem secreta encriptada no Texto em Claro\n",
351 | " print(f\"Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\\n \\\"{texto_cifra}\\\" --> \\\"{texto_em_claro}\\\"\")\n",
352 | " \n",
353 | " # Impressão do rodapé da demonstração do envio de uma mensagem secreta\n",
354 | " print(\"\\n\\n--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César ---\\n\\n\")"
355 | ]
356 | },
357 | {
358 | "cell_type": "markdown",
359 | "metadata": {},
360 | "source": [
361 | "Agora, a **_Alice_** procede ao envio da mensagem ao **_Bob_**, de forma secreta, usando a função implementada anteriormente em **_Python_**:"
362 | ]
363 | },
364 | {
365 | "cell_type": "code",
366 | "execution_count": 8,
367 | "metadata": {},
368 | "outputs": [
369 | {
370 | "name": "stdout",
371 | "output_type": "stream",
372 | "text": [
373 | "\n",
374 | "\n",
375 | "--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César ---\n",
376 | "\n",
377 | "\n",
378 | "O Emissor (Alice) quer enviar a seguinte mensagem ao Receptor (Bob):\n",
379 | " - \"Longa vida ao Imperador Cesar!!!\" ...\n",
380 | "\n",
381 | "O Emissor (Alice) encripta a mensagem secreta original a enviar (i.e., o texto em claro)...\n",
382 | "\n",
383 | "Encriptação da mensagem secreta original a enviar (i.e., texto em claro):\n",
384 | " - \"Longa vida ao Imperador Cesar!!!\" --> \"Orqjd ylgd dr Lpshudgru Fhvdu!!!\"\n",
385 | "\n",
386 | "Envio da mensagem encriptada, através do canal de comunicação, do Emissor (Alice) para o Receptor (Bob)...\n",
387 | "\n",
388 | "O Receptor (Bob) recebe a mensagem encriptada (i.e., o texto de cifra)...\n",
389 | "\n",
390 | "O Receptor (Bob) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\n",
391 | "\n",
392 | "Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\n",
393 | " \"Orqjd ylgd dr Lpshudgru Fhvdu!!!\" --> \"Longa vida ao Imperador Cesar!!!\"\n",
394 | "\n",
395 | "\n",
396 | "--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César ---\n",
397 | "\n",
398 | "\n"
399 | ]
400 | }
401 | ],
402 | "source": [
403 | "# Envio da mensagem secreta, usando a Cifra de César\n",
404 | "enviar_mensagem_secreta_usando_cifra_cesar(NOME_EMISSOR, NOME_RECEPTOR, MENSAGEM)"
405 | ]
406 | },
407 | {
408 | "cell_type": "markdown",
409 | "metadata": {},
410 | "source": [
411 | "No entanto, também é facilmente perceptível neste exemplo de cenário que, caso um terceiro interveniente tenha conhecimento do _deslocamento alfabético_ usado em ambos os processos de **_Encriptação_** e **_Desencriptação_** e, conseguir de alguma forma, interceptar a mensagem secreta, no decorrer da sua transmissão pelo _canal de comunicação_ em uso, o mesmo poderá ter acesso ao conteúdo da mensagem secreta, ou até, alterá-lo e reenviar a mensagem secreta modificada."
412 | ]
413 | },
414 | {
415 | "cell_type": "markdown",
416 | "metadata": {},
417 | "source": [
418 | "Em seguida, é demonstrado o exemplo de um cenário, onde esta situação se verifica facilmente."
419 | ]
420 | },
421 | {
422 | "cell_type": "markdown",
423 | "metadata": {},
424 | "source": [
425 | "### Exemplo #2 - Envio de mensagem secreta, interceptada e modificada por um Atacante"
426 | ]
427 | },
428 | {
429 | "cell_type": "markdown",
430 | "metadata": {},
431 | "source": [
432 | "Imagine-se o seguinte cenário:\n",
433 | "* A **_Alice_** é o **_Emissor_**;\n",
434 | "* O **_Bob_** é o **_Receptor_**;\n",
435 | "* A **_Alice_** pretende enviar ao **_Bob_**, a seguinte mensagem secreta \"_Longa vida ao Imperador Cesar!!!_\";\n",
436 | "* A **_Alice_** e o **_Bob_** têm um _segredo partilhado_, que neste caso, é a _deslocação alfabética_, _s=3_;\n",
437 | "* A **_Eva_** é o **_Atacante_**;\n",
438 | "* A **_Eva_** também tem conhecimento do _segredo partilhado_ entre a **_Alice_** e o **_Bob_**;\n",
439 | "* A **_Eva_** vai interceptar a mensagem enviada para o **_Bob_**;\n",
440 | "* A **_Eva_** vai modificar o conteúdo da mensagem secreta de \"_Longa vida ao Imperador Cesar!!!_\" para \"_Longa vida ao Imperador Pompeu!!!_\";\n",
441 | "* A **_Eva_** envia a mensagem secreta modificada para o **_Bob_** (fazendo-se passar pela **_Alice_**), de forma que nem a **_Alice_** nem o **_Bob_** desconfiem de nada;"
442 | ]
443 | },
444 | {
445 | "cell_type": "markdown",
446 | "metadata": {},
447 | "source": [
448 | "Uma vez mais, têm que ser definidos os ingredientes fundamentais desta demonstração:"
449 | ]
450 | },
451 | {
452 | "cell_type": "code",
453 | "execution_count": 9,
454 | "metadata": {},
455 | "outputs": [],
456 | "source": [
457 | "# Definição do nome do Emissor\n",
458 | "NOME_EMISSOR = \"Alice\"\n",
459 | "\n",
460 | "# Definição do nome do Receptor\n",
461 | "NOME_RECEPTOR = \"Bob\"\n",
462 | "\n",
463 | "# Definição do nome do Atacante\n",
464 | "NOME_ATACANTE = \"Eva\"\n",
465 | "\n",
466 | "# Definição da mensagem, que a Alice pretende enviar ao Bob, de forma secreta e que a Eva pretende interceptar\n",
467 | "MENSAGEM = \"Longa vida ao Imperador Cesar!!!\""
468 | ]
469 | },
470 | {
471 | "cell_type": "markdown",
472 | "metadata": {},
473 | "source": [
474 | "Podemos definir a implementação de uma função em **_Python_** simples, para enviar uma _mensagem secreta_, através de um _canal de comunicação_ e que é interceptada e modificada por um **_Atacante_**, da seguinte forma:"
475 | ]
476 | },
477 | {
478 | "cell_type": "code",
479 | "execution_count": 10,
480 | "metadata": {},
481 | "outputs": [],
482 | "source": [
483 | "# Função para enviar uma mensagem secreta, de um Emissor para um Receptor, usando a Cifra de César,\n",
484 | "# para os processos de Encriptação e Desencriptação da mensagem, e interceptada por um Atacante\n",
485 | "def enviar_mensagem_secreta_usando_cifra_cesar_com_intercepcao(nome_emissor, nome_receptor, nome_atacante, mensagem):\n",
486 | " \n",
487 | " # Impressão do cabeçalho da demonstração do envio de uma mensagem secreta, com intercepção\n",
488 | " print(\"\\n\\n--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\\n\\n\")\n",
489 | " \n",
490 | " # Encriptação da mensagem secreta, usando a Cifra de César\n",
491 | " texto_cifra = encriptacao_cifra_cesar(mensagem, deslocacao=3)\n",
492 | " \n",
493 | " # O Emissor encripta a mensagem secreta original a enviar\n",
494 | " print(f\"O Emissor ({nome_emissor}) encripta a mensagem original a enviar (i.e., o texto em claro)...\\n\")\n",
495 | " \n",
496 | " # A transformação da mensagem secreta original no Texto de Cifra\n",
497 | " print(f\"Encriptação da mensagem original a enviar (i.e., texto em claro):\\n - \\\"{mensagem}\\\" --> \\\"{texto_cifra}\\\"\\n\")\n",
498 | " \n",
499 | " # Envio da mensagem encripta do Emissor ao Receptor\n",
500 | " print(f\"Envio da mensagem encriptada, através do canal de comunicação, do Emissor ({nome_emissor}) para o Receptor ({nome_receptor})...\\n\")\n",
501 | " \n",
502 | " # O Atacante intercepta a mensagem encriptada\n",
503 | " print(f\"O Atacante ({nome_atacante}) intercepta a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
504 | " \n",
505 | " # Desencriptação da mensagem secreta, usando a Cifra de César\n",
506 | " texto_em_claro_interceptado = desencriptacao_cifra_cesar(texto_cifra, deslocacao=3)\n",
507 | " \n",
508 | " # O Atacante altera o conteúdo do Texto em Claro interceptado\n",
509 | " # Mais especificamente, realizando as substituições necessarias para alterar a mensagem secreta\n",
510 | " # de \"Longa vida ao Imperador Cesar!!!\" para \"Longa vida ao Imperador Pompeu!!!\"\n",
511 | " \n",
512 | " # Inicialização do Texto em Claro modificado\n",
513 | " texto_em_claro_modificado = \"\"\n",
514 | " \n",
515 | " # Modificação do Texto em Claro\n",
516 | " for caracter_indice in range(len(texto_em_claro_interceptado) + 1):\n",
517 | " \n",
518 | " # Se um índice do caractér é menor que 24\n",
519 | " if caracter_indice < 24:\n",
520 | " \n",
521 | " # Concatenação do caractér atual\n",
522 | " texto_em_claro_modificado += texto_em_claro_interceptado[caracter_indice]\n",
523 | "\n",
524 | " # Se um índice do caractér é igual a 24\n",
525 | " elif caracter_indice == 24:\n",
526 | " \n",
527 | " # Alteração do caractér atual\n",
528 | " texto_em_claro_modificado += \"P\"\n",
529 | " \n",
530 | " # Se um índice do caractér é igual a 25\n",
531 | " elif caracter_indice == 25:\n",
532 | " \n",
533 | " # Alteração do caractér atual\n",
534 | " texto_em_claro_modificado += \"o\"\n",
535 | " \n",
536 | " # Se um índice do caractér é igual a 26\n",
537 | " elif caracter_indice == 26:\n",
538 | " \n",
539 | " # Alteração do caractér atual\n",
540 | " texto_em_claro_modificado += \"m\"\n",
541 | " \n",
542 | " # Se um índice do caractér é igual a 27\n",
543 | " elif caracter_indice == 27:\n",
544 | " \n",
545 | " # Alteração do caractér atual\n",
546 | " texto_em_claro_modificado += \"p\"\n",
547 | " \n",
548 | " # Se um índice do caractér é igual a 28\n",
549 | " elif caracter_indice == 28:\n",
550 | " \n",
551 | " # Alteração do caractér atual\n",
552 | " texto_em_claro_modificado += \"e\"\n",
553 | " \n",
554 | " # Se um índice do caractér é igual a 29\n",
555 | " elif caracter_indice == 29:\n",
556 | " \n",
557 | " # Alteração do caractér atual\n",
558 | " texto_em_claro_modificado += \"u\"\n",
559 | " \n",
560 | " # Se um índice do caractér está entre 30 e 31\n",
561 | " elif 30 <= caracter_indice <= 31:\n",
562 | " \n",
563 | " # Concatenação do caractér atual\n",
564 | " texto_em_claro_modificado += texto_em_claro_interceptado[caracter_indice]\n",
565 | " \n",
566 | " # Se um índice do caractér é igual a 32\n",
567 | " elif caracter_indice == 32:\n",
568 | " \n",
569 | " # Alteração do caractér atual\n",
570 | " texto_em_claro_modificado += \"!\"\n",
571 | " \n",
572 | " # Modificação da mensagem secreta interceptada\n",
573 | " print(f\"Modificação da mensagem secreta interceptada (i.e., texto em claro):\\n - \\\"{texto_em_claro_interceptado}\\\" --> \\\"{texto_em_claro_modificado}\\\"\\n\")\n",
574 | " \n",
575 | " # Encriptação da mensagem secreta interceptada e modificada, usando a Cifra de César\n",
576 | " texto_cifra = encriptacao_cifra_cesar(texto_em_claro_modificado, deslocacao=3)\n",
577 | " \n",
578 | " # O Atacante encripta a mensagem modificada a enviar\n",
579 | " print(f\"O Atacante ({nome_atacante}) encripta a mensagem modificada a enviar (i.e., o texto em claro modificado)...\\n\")\n",
580 | " \n",
581 | " # Encriptação da mensagem modificada a enviar\n",
582 | " print(f\"Encriptação da mensagem modificada a enviar (i.e., texto em claro modificado):\\n - \\\"{texto_em_claro_modificado}\\\" --> \\\"{texto_cifra}\\\"\\n\")\n",
583 | " \n",
584 | " # Envio da mensagem maliciosa encriptada\n",
585 | " print(f\"Envio da mensagem maliciosa encriptada, através do canal de comunicação, do Atacante ({nome_atacante}) para o Receptor ({nome_receptor})...\\n\")\n",
586 | " \n",
587 | " # O Receptor recebe a mensagem encriptada\n",
588 | " print(f\"O Receptor ({nome_receptor}) recebe a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
589 | " \n",
590 | " # Desencriptação da mensagem secreta, usando a Cifra de César\n",
591 | " texto_em_claro = desencriptacao_cifra_cesar(texto_cifra, deslocacao=3)\n",
592 | " \n",
593 | " # O Receptor desencripta a mensagem encriptada recebida\n",
594 | " print(f\"O Receptor ({nome_receptor}) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\\n\")\n",
595 | "\n",
596 | " # A transformação da mensagem secreta encriptada no Texto em Claro\n",
597 | " print(f\"Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\\n \\\"{texto_cifra}\\\" --> \\\"{texto_em_claro}\\\"\")\n",
598 | " \n",
599 | " # Impressão do rodapé da demonstração do envio de uma mensagem secreta, com intercepção\n",
600 | " print(\"\\n\\n--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\\n\\n\")"
601 | ]
602 | },
603 | {
604 | "cell_type": "markdown",
605 | "metadata": {},
606 | "source": [
607 | "Agora, a **_Alice_** procede ao envio da mensagem ao **_Bob_**, de forma secreta, mas em que a mensagem é interceptada e modificada pela **_Eva_**, usando a função implementada anteriormente em **_Python_**:"
608 | ]
609 | },
610 | {
611 | "cell_type": "code",
612 | "execution_count": 11,
613 | "metadata": {},
614 | "outputs": [
615 | {
616 | "name": "stdout",
617 | "output_type": "stream",
618 | "text": [
619 | "\n",
620 | "\n",
621 | "--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\n",
622 | "\n",
623 | "\n",
624 | "O Emissor (Alice) encripta a mensagem original a enviar (i.e., o texto em claro)...\n",
625 | "\n",
626 | "Encriptação da mensagem original a enviar (i.e., texto em claro):\n",
627 | " - \"Longa vida ao Imperador Cesar!!!\" --> \"Orqjd ylgd dr Lpshudgru Fhvdu!!!\"\n",
628 | "\n",
629 | "Envio da mensagem encriptada, através do canal de comunicação, do Emissor (Alice) para o Receptor (Bob)...\n",
630 | "\n",
631 | "O Atacante (Eva) intercepta a mensagem encriptada (i.e., o texto de cifra)...\n",
632 | "\n",
633 | "Modificação da mensagem secreta interceptada (i.e., texto em claro):\n",
634 | " - \"Longa vida ao Imperador Cesar!!!\" --> \"Longa vida ao Imperador Pompeu!!!\"\n",
635 | "\n",
636 | "O Atacante (Eva) encripta a mensagem modificada a enviar (i.e., o texto em claro modificado)...\n",
637 | "\n",
638 | "Encriptação da mensagem modificada a enviar (i.e., texto em claro modificado):\n",
639 | " - \"Longa vida ao Imperador Pompeu!!!\" --> \"Orqjd ylgd dr Lpshudgru Srpshx!!!\"\n",
640 | "\n",
641 | "Envio da mensagem maliciosa encriptada, através do canal de comunicação, do Atacante (Eva) para o Receptor (Bob)...\n",
642 | "\n",
643 | "O Receptor (Bob) recebe a mensagem encriptada (i.e., o texto de cifra)...\n",
644 | "\n",
645 | "O Receptor (Bob) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\n",
646 | "\n",
647 | "Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\n",
648 | " \"Orqjd ylgd dr Lpshudgru Srpshx!!!\" --> \"Longa vida ao Imperador Pompeu!!!\"\n",
649 | "\n",
650 | "\n",
651 | "--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\n",
652 | "\n",
653 | "\n"
654 | ]
655 | }
656 | ],
657 | "source": [
658 | "# Envio da mensagem secreta, usando a Cifra de César, com intercepção\n",
659 | "enviar_mensagem_secreta_usando_cifra_cesar_com_intercepcao(NOME_EMISSOR, NOME_RECEPTOR, NOME_ATACANTE, MENSAGEM)"
660 | ]
661 | },
662 | {
663 | "cell_type": "markdown",
664 | "metadata": {},
665 | "source": [
666 | "Este exemplo demonstra a extrema importância de alguns parâmetros do **_Algoritmo de Encriptação_** serem:\n",
667 | "* _Secretos_:\n",
668 | " * Como se tratasse de um _segredo_ ou _chave secreta_;\n",
669 | "* _Privados_/_Confidênciais_:\n",
670 | " * Apenas do conhecimento dos intervinientes envolvidos directamente na transmissão da mensagem secreta (ou seja, o **_Emissor_** e o **_Receptor_**);"
671 | ]
672 | },
673 | {
674 | "cell_type": "markdown",
675 | "metadata": {},
676 | "source": [
677 | "Adicionalmente, em relação aos exemplos anteriores, pode-se verificar que um terceiro interviniente conseguiria sempre interceptar e aceder ao conteúdo facilmente, sem precisar necessariamente de conhecer o _segredo_ usado."
678 | ]
679 | },
680 | {
681 | "cell_type": "markdown",
682 | "metadata": {},
683 | "source": [
684 | "Isto porque, se o **_Atacante_** tiver conhecimento que a _primitiva criptográfica_ em uso é a **_Cifra de César_**, consegue inferir que o espaço de soluções para a _deslocação alfabética_ é obrigatoriamente um _número inteiro_ de _0_ a _25_, pois é o número de _deslocações alfabéticas_ possíveis, até se percorrer todos os caractéres do alfabeto."
685 | ]
686 | },
687 | {
688 | "cell_type": "markdown",
689 | "metadata": {},
690 | "source": [
691 | "A partir deste conhecimento, é fácil para o **_Atacante_** experimentar exaustivamente, como _deslocamento alfabético_, todas possibilidades do espaço de soluções para o processo de **_Desencriptação_**, num _ataque criptográfico_ que é conhecido como **_Ataque_**/**_Procura de Força Bruta_** (ver mais detalhes em [https://pt.wikipedia.org/wiki/Busca_por_for%C3%A7a_bruta](https://pt.wikipedia.org/wiki/Busca_por_for%C3%A7a_bruta))."
692 | ]
693 | },
694 | {
695 | "cell_type": "markdown",
696 | "metadata": {},
697 | "source": [
698 | "Mesmo que o **_Atacante_** não saiba qual é a mensagem original (i.e., em _texto em claro_ inicial), o mesmo pode realizar um processo de **_Criptanálise_**, elaborando um _dicionário_ de **_Ataque de Texto de Cifra Escolhido_** e tentando inferir algo sobre a _deslocação alfabética_ usada (ver mais detalhes em [https://pt.wikipedia.org/wiki/Ataque_de_cifrotexto_escolhido](https://pt.wikipedia.org/wiki/Ataque_de_cifrotexto_escolhido))."
699 | ]
700 | },
701 | {
702 | "cell_type": "markdown",
703 | "metadata": {},
704 | "source": [
705 | "No próximo exemplo, é demonstrado um cenário, onde o **_Atacante_** tenta esta abordagem e como o mesmo pode tentar inferir algo sobre a _deslocação alfabética_ usada na **_Cifra de César_**."
706 | ]
707 | },
708 | {
709 | "cell_type": "markdown",
710 | "metadata": {},
711 | "source": [
712 | "### Exemplo #3 - Envio de mensagem secreta, interceptada e alvo de Criptanálise (Ataque/Procura de Força Bruta e Ataque de Texto de Cifra Escolhido)"
713 | ]
714 | },
715 | {
716 | "cell_type": "markdown",
717 | "metadata": {},
718 | "source": [
719 | "Imagine-se o seguinte cenário:\n",
720 | "* A **_Alice_** é o **_Emissor_**;\n",
721 | "* O **_Bob_** é o **_Receptor_**;\n",
722 | "* A **_Alice_** pretende enviar ao **_Bob_**, a seguinte mensagem secreta \"_Longa vida ao Imperador Cesar!!!_\";\n",
723 | "* A **_Alice_** e o **_Bob_** têm um _segredo partilhado_, que neste caso, é a _deslocação alfabética_, _s=15_;\n",
724 | "* A **_Eva_** é o **_Atacante_**;\n",
725 | "* A **_Eva_** não tem conhecimento do _segredo partilhado_ entre a **_Alice_** e o **_Bob_**;\n",
726 | "* A **_Eva_** vai interceptar e criar uma cópia sobre a mensagem enviada para o **_Bob_**;\n",
727 | "* A **_Eva_** vai efetuar **_Criptanálise_**, através de um **_Ataque de Texto de Cifra Escolhido_** ao conteúdo da cópia da mensagem secreta encriptada interceptada;\n",
728 | "* A **_Eva_** realiza este processo, de forma que nem a **_Alice_** nem o **_Bob_** desconfiem de nada;"
729 | ]
730 | },
731 | {
732 | "cell_type": "markdown",
733 | "metadata": {},
734 | "source": [
735 | "Mais uma vez, têm que ser definidos os ingredientes fundamentais desta demonstração:"
736 | ]
737 | },
738 | {
739 | "cell_type": "code",
740 | "execution_count": 12,
741 | "metadata": {},
742 | "outputs": [],
743 | "source": [
744 | "# Definição do nome do Emissor\n",
745 | "NOME_EMISSOR = \"Alice\"\n",
746 | "\n",
747 | "# Definição do nome do Receptor\n",
748 | "NOME_RECEPTOR = \"Bob\"\n",
749 | "\n",
750 | "# Definição do nome do Atacante\n",
751 | "NOME_ATACANTE = \"Eva\"\n",
752 | "\n",
753 | "# Definição da mensagem, que a Alice pretende enviar ao Bob, de forma secreta e que a Eva pretende interceptar\n",
754 | "MENSAGEM = \"Longa vida ao Imperador Cesar!!!\""
755 | ]
756 | },
757 | {
758 | "cell_type": "markdown",
759 | "metadata": {},
760 | "source": [
761 | "Primeiro, seria necessário implementar o procedimento para a criação do _dicionário_ de **_Ataque de Texto de Cifra Escolhido_** em **_Python_**:"
762 | ]
763 | },
764 | {
765 | "cell_type": "code",
766 | "execution_count": 13,
767 | "metadata": {},
768 | "outputs": [],
769 | "source": [
770 | "# Função para criar dicionário para um Ataque de Texto de Cifra Escolhido, efetuado sobre a Cifra César,\n",
771 | "# dado um Texto de Cifra e o espaço de soluções possíveis (i.e., 26 deslocações alfabéticas possíveis)\n",
772 | "def criar_dicionario_ataque_texto_cifra_escolhido_cifra_cesar(texto_cifra, num_espaco_solucoes=26):\n",
773 | " \n",
774 | " # Inicialização do dicionário para um Ataque de Texto de Cifra Escolhido, efetuado sobre a Cifra de César\n",
775 | " dicionario_ataque_texto_cifra_escolhido_cifra_cesar = []\n",
776 | " \n",
777 | " # Para todos os deslocamentos alfabéticos, no espaço de soluções possíveis\n",
778 | " for deslocamento_atual in range(num_espaco_solucoes):\n",
779 | " \n",
780 | " # Desencriptação do Texto de Cifra, considerando o deslocamento alfabético atual\n",
781 | " texto_em_claro = desencriptacao_cifra_cesar(texto_cifra, deslocacao=deslocamento_atual)\n",
782 | " \n",
783 | " # Guardar em memória, a desencriptação do Texto de Cifra, considerando o deslocamento alfabético atual\n",
784 | " dicionario_ataque_texto_cifra_escolhido_cifra_cesar.append(texto_em_claro)\n",
785 | " \n",
786 | " # Retorna o dicionário do Ataque de Textro de Cifra Escolhido criado anteriormente\n",
787 | " return dicionario_ataque_texto_cifra_escolhido_cifra_cesar"
788 | ]
789 | },
790 | {
791 | "cell_type": "markdown",
792 | "metadata": {},
793 | "source": [
794 | "Podemos definir a implementação de uma função em **_Python_** simples, para enviar uma _mensagem secreta_, através de um _canal de comunicação_ e que é interceptada e alvo de um **_Ataque de Texto de Cifra Escolhido_** por um **_Atacante_**, da seguinte forma:"
795 | ]
796 | },
797 | {
798 | "cell_type": "code",
799 | "execution_count": 14,
800 | "metadata": {},
801 | "outputs": [],
802 | "source": [
803 | "# Função para enviar uma mensagem secreta, de um Emissor para um Receptor, usando a Cifra de César,\n",
804 | "# para os processos de Encriptação e Desencriptação da mensagem, e interceptada por um Atacante\n",
805 | "def enviar_mensagem_secreta_usando_cifra_cesar_com_intercepcao_e_ataque_texto_cifra_escolhido(nome_emissor, nome_receptor, nome_atacante, mensagem):\n",
806 | " \n",
807 | " # Impressão do cabeçalho da demonstração do envio de uma mensagem secreta, com intercepção\n",
808 | " print(\"\\n\\n--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\\n\\n\")\n",
809 | " \n",
810 | " # O Emissor quer enviar a mensagem secreta ao Receptor\n",
811 | " print(f\"O Emissor ({nome_emissor}) quer enviar a seguinte mensagem ao Receptor ({nome_receptor}):\\n - \\\"{mensagem}\\\" ...\\n\")\n",
812 | " \n",
813 | " # Encriptação da mensagem secreta, usando a Cifra de César\n",
814 | " texto_cifra = encriptacao_cifra_cesar(mensagem, deslocacao=15)\n",
815 | " \n",
816 | " # O Emissor encripta a mensagem secreta original a enviar\n",
817 | " print(f\"O Emissor ({nome_emissor}) encripta a mensagem original a enviar (i.e., o texto em claro)...\\n\")\n",
818 | " \n",
819 | " # A transformação da mensagem secreta original no Texto de Cifra\n",
820 | " print(f\"Encriptação da mensagem original a enviar (i.e., texto em claro):\\n - \\\"{mensagem}\\\" --> \\\"{texto_cifra}\\\"\\n\")\n",
821 | " \n",
822 | " # Envio da mensagem encripta do Emissor ao Receptor\n",
823 | " print(f\"Envio da mensagem encriptada, através do canal de comunicação, do Emissor ({nome_emissor}) para o Receptor ({nome_receptor})...\\n\")\n",
824 | " \n",
825 | " # O Atacante intercepta a mensagem encriptada\n",
826 | " print(f\"O Atacante ({nome_atacante}) intercepta a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
827 | " \n",
828 | " # Intercepção e cópia do Texto Cifra\n",
829 | " copia_texto_cifra_interceptado = texto_cifra\n",
830 | " \n",
831 | " # O Atacante, de seguida, experimenta, exaustivamente, todas as deslocações alfabéticas possíveis,\n",
832 | " # através de um Ataque/Procura de Força Bruta (mais especificamente, um Ataque de Texto de Cifra Escolhido)\n",
833 | " # e cria um dicionário com todos os Textos em Claro, resultantes deste processo\n",
834 | " \n",
835 | " # O Atacante intercepta a mensagem encriptada\n",
836 | " print(f\"O Atacante ({nome_atacante}) cria um dicionário de Ataque de Texto de Cifra Escolhido, a partir da mensagem encriptada interceptada...\\n\")\n",
837 | " \n",
838 | " # Criação do dicionário de Ataque de Texto de Cifra Escolhido\n",
839 | " dicionario_ataque_texto_cifra_escolhido_cifra_cesar = criar_dicionario_ataque_texto_cifra_escolhido_cifra_cesar(texto_cifra, num_espaco_solucoes=26)\n",
840 | " \n",
841 | " # O Receptor recebe a mensagem encriptada\n",
842 | " print(f\"O Receptor ({nome_receptor}) recebe a mensagem encriptada (i.e., o texto de cifra)...\\n\")\n",
843 | " \n",
844 | " # Desencriptação da mensagem secreta, usando a Cifra de César\n",
845 | " texto_em_claro = desencriptacao_cifra_cesar(texto_cifra, deslocacao=15)\n",
846 | " \n",
847 | " # O Receptor desencripta a mensagem encriptada recebida\n",
848 | " print(f\"O Receptor ({nome_receptor}) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\\n\")\n",
849 | "\n",
850 | " # A transformação da mensagem secreta encriptada no Texto em Claro\n",
851 | " print(f\"Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\\n \\\"{texto_cifra}\\\" --> \\\"{texto_em_claro}\\\"\")\n",
852 | " \n",
853 | " # Impressão do rodapé da demonstração do envio de uma mensagem secreta, com intercepção\n",
854 | " print(\"\\n\\n--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\\n\\n\")\n",
855 | " \n",
856 | " # Retorna o dicionário de Ataque de Texto de Cifra Escolhido\n",
857 | " return dicionario_ataque_texto_cifra_escolhido_cifra_cesar"
858 | ]
859 | },
860 | {
861 | "cell_type": "markdown",
862 | "metadata": {},
863 | "source": [
864 | "Agora, a **_Alice_** procede ao envio da mensagem ao **_Bob_**, de forma secreta, mas em que a mensagem é interceptada e alvo de um **_Ataque de Texto de Cifra Escolhido_** feito pela **_Eva_**, usando a função implementada anteriormente em **_Python_**:"
865 | ]
866 | },
867 | {
868 | "cell_type": "code",
869 | "execution_count": 15,
870 | "metadata": {
871 | "scrolled": false
872 | },
873 | "outputs": [
874 | {
875 | "name": "stdout",
876 | "output_type": "stream",
877 | "text": [
878 | "\n",
879 | "\n",
880 | "--- Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\n",
881 | "\n",
882 | "\n",
883 | "O Emissor (Alice) quer enviar a seguinte mensagem ao Receptor (Bob):\n",
884 | " - \"Longa vida ao Imperador Cesar!!!\" ...\n",
885 | "\n",
886 | "O Emissor (Alice) encripta a mensagem original a enviar (i.e., o texto em claro)...\n",
887 | "\n",
888 | "Encriptação da mensagem original a enviar (i.e., texto em claro):\n",
889 | " - \"Longa vida ao Imperador Cesar!!!\" --> \"Adcvp kxsp pd Xbetgpsdg Rthpg!!!\"\n",
890 | "\n",
891 | "Envio da mensagem encriptada, através do canal de comunicação, do Emissor (Alice) para o Receptor (Bob)...\n",
892 | "\n",
893 | "O Atacante (Eva) intercepta a mensagem encriptada (i.e., o texto de cifra)...\n",
894 | "\n",
895 | "O Atacante (Eva) cria um dicionário de Ataque de Texto de Cifra Escolhido, a partir da mensagem encriptada interceptada...\n",
896 | "\n",
897 | "O Receptor (Bob) recebe a mensagem encriptada (i.e., o texto de cifra)...\n",
898 | "\n",
899 | "O Receptor (Bob) desencripta a mensagem encriptada recebida (i.e., o texto de cifra)...\n",
900 | "\n",
901 | "Desencriptação da mensagem encriptada recebida (i.e., texto de cifra):\n",
902 | " \"Adcvp kxsp pd Xbetgpsdg Rthpg!!!\" --> \"Longa vida ao Imperador Cesar!!!\"\n",
903 | "\n",
904 | "\n",
905 | "--- Fim da Demonstração simples do envio de uma mensagem secreta, usando a Cifra de César, com intercepção ---\n",
906 | "\n",
907 | "\n"
908 | ]
909 | }
910 | ],
911 | "source": [
912 | "# Envio da mensagem secreta, usando a Cifra de César, com intercepção e Ataque/Procura de Força Bruta (Ataque de Texto de Cifra Escolhido)\n",
913 | "dicionario_ataque_texto_cifra_escolhido_cifra_cesar = enviar_mensagem_secreta_usando_cifra_cesar_com_intercepcao_e_ataque_texto_cifra_escolhido(NOME_EMISSOR, NOME_RECEPTOR, NOME_ATACANTE, MENSAGEM)"
914 | ]
915 | },
916 | {
917 | "cell_type": "markdown",
918 | "metadata": {},
919 | "source": [
920 | "Adicionalmente, também é necessário criar uma função em **_Python_** que imprime todos os _textos em claro_ resultantes do _dicionário_ do **_Ataque de Texto de Cifra Escolhido_**, para a **_Criptanálise_** da **_Cifra de César_**:"
921 | ]
922 | },
923 | {
924 | "cell_type": "code",
925 | "execution_count": 16,
926 | "metadata": {},
927 | "outputs": [],
928 | "source": [
929 | "# Função para a Criptanálise do Ataque de Texto de Cifra Escolhido, efetudado sobre a Cifra de César,\n",
930 | "# dado um dicionário com todos os Textos em Claro resultantes deste processo\n",
931 | "def criptanalise_ataque_texto_cifra_escolhido_cifra_cesar(dicionario_ataque_texto_cifra_escolhido_cifra_cesar):\n",
932 | " \n",
933 | " # Impressão do cabeçalho da demonstração da Criptanálise do Ataque de Texto de Cifra Escolhido, efetudado sobre a Cifra de César\n",
934 | " print(\"\\n\\n--- Criptanálise do Ataque de Texto de Cifra Escolhido feito à Cifra de César ---\\n\\n\")\n",
935 | " \n",
936 | " # Impressão de um cabeçalho adicional para os resultdos do dicionário do Ataque de Texto de Cifra Escolhido\n",
937 | " print(\"Resultados da Criptanálise do dicionário do Ataque de Texto de Cifra Escolhido:\\n\")\n",
938 | " \n",
939 | " # Para o índice e o conteúdo de todos os Textos em Claro, resultantes do dicionário do Ataque de Texto de Cifra Escolhido\n",
940 | " for texto_claro_indice, texto_claro in enumerate(dicionario_ataque_texto_cifra_escolhido_cifra_cesar):\n",
941 | " \n",
942 | " # Imprime o índice e o conteúdo do Texto em Claro atual, resultantes do dicionário do Ataque de Texto de Cifra Escolhido\n",
943 | " print(f\" - Para s={texto_claro_indice}: \\\"{texto_claro}\\\"\\n\")\n",
944 | " \n",
945 | " # Impressão do rodapé da demonstração da Criptanálise do Ataque de Texto de Cifra Escolhido, efetudado sobre a Cifra de César\n",
946 | " print(\"\\n\\n--- Fim da Criptanálise do Ataque de Texto de Cifra Escolhido feito à Cifra de César ---\\n\\n\")"
947 | ]
948 | },
949 | {
950 | "cell_type": "markdown",
951 | "metadata": {},
952 | "source": [
953 | "Por fim, é feita a **_Criptanálise_** da **_Cifra de César_**, sobre os _textos em claro_ resultantes do _dicionário_ do **_Ataque de Texto de Cifra Escolhido_**:"
954 | ]
955 | },
956 | {
957 | "cell_type": "code",
958 | "execution_count": 17,
959 | "metadata": {
960 | "scrolled": false
961 | },
962 | "outputs": [
963 | {
964 | "name": "stdout",
965 | "output_type": "stream",
966 | "text": [
967 | "\n",
968 | "\n",
969 | "--- Criptanálise do Ataque de Texto de Cifra Escolhido feito à Cifra de César ---\n",
970 | "\n",
971 | "\n",
972 | "Resultados da Criptanálise do dicionário do Ataque de Texto de Cifra Escolhido:\n",
973 | "\n",
974 | " - Para s=0: \"Adcvp kxsp pd Xbetgpsdg Rthpg!!!\"\n",
975 | "\n",
976 | " - Para s=1: \"Zcbuo jwro oc Wadsforcf Qsgof!!!\"\n",
977 | "\n",
978 | " - Para s=2: \"Ybatn ivqn nb Vzcrenqbe Prfne!!!\"\n",
979 | "\n",
980 | " - Para s=3: \"Xazsm hupm ma Uybqdmpad Oqemd!!!\"\n",
981 | "\n",
982 | " - Para s=4: \"Wzyrl gtol lz Txapclozc Npdlc!!!\"\n",
983 | "\n",
984 | " - Para s=5: \"Vyxqk fsnk ky Swzobknyb Mockb!!!\"\n",
985 | "\n",
986 | " - Para s=6: \"Uxwpj ermj jx Rvynajmxa Lnbja!!!\"\n",
987 | "\n",
988 | " - Para s=7: \"Twvoi dqli iw Quxmzilwz Kmaiz!!!\"\n",
989 | "\n",
990 | " - Para s=8: \"Svunh cpkh hv Ptwlyhkvy Jlzhy!!!\"\n",
991 | "\n",
992 | " - Para s=9: \"Rutmg bojg gu Osvkxgjux Ikygx!!!\"\n",
993 | "\n",
994 | " - Para s=10: \"Qtslf anif ft Nrujwfitw Hjxfw!!!\"\n",
995 | "\n",
996 | " - Para s=11: \"Psrke zmhe es Mqtivehsv Giwev!!!\"\n",
997 | "\n",
998 | " - Para s=12: \"Orqjd ylgd dr Lpshudgru Fhvdu!!!\"\n",
999 | "\n",
1000 | " - Para s=13: \"Nqpic xkfc cq Korgtcfqt Eguct!!!\"\n",
1001 | "\n",
1002 | " - Para s=14: \"Mpohb wjeb bp Jnqfsbeps Dftbs!!!\"\n",
1003 | "\n",
1004 | " - Para s=15: \"Longa vida ao Imperador Cesar!!!\"\n",
1005 | "\n",
1006 | " - Para s=16: \"Knmfz uhcz zn Hlodqzcnq Bdrzq!!!\"\n",
1007 | "\n",
1008 | " - Para s=17: \"Jmley tgby ym Gkncpybmp Acqyp!!!\"\n",
1009 | "\n",
1010 | " - Para s=18: \"Ilkdx sfax xl Fjmboxalo Zbpxo!!!\"\n",
1011 | "\n",
1012 | " - Para s=19: \"Hkjcw rezw wk Eilanwzkn Yaown!!!\"\n",
1013 | "\n",
1014 | " - Para s=20: \"Gjibv qdyv vj Dhkzmvyjm Xznvm!!!\"\n",
1015 | "\n",
1016 | " - Para s=21: \"Fihau pcxu ui Cgjyluxil Wymul!!!\"\n",
1017 | "\n",
1018 | " - Para s=22: \"Ehgzt obwt th Bfixktwhk Vxltk!!!\"\n",
1019 | "\n",
1020 | " - Para s=23: \"Dgfys navs sg Aehwjsvgj Uwksj!!!\"\n",
1021 | "\n",
1022 | " - Para s=24: \"Cfexr mzur rf Zdgvirufi Tvjri!!!\"\n",
1023 | "\n",
1024 | " - Para s=25: \"Bedwq lytq qe Ycfuhqteh Suiqh!!!\"\n",
1025 | "\n",
1026 | "\n",
1027 | "\n",
1028 | "--- Fim da Criptanálise do Ataque de Texto de Cifra Escolhido feito à Cifra de César ---\n",
1029 | "\n",
1030 | "\n"
1031 | ]
1032 | }
1033 | ],
1034 | "source": [
1035 | "# Criptanálise do Ataque de Texto de Cifra Escolhido, efetudado sobre a Cifra de César,\n",
1036 | "# dado um dicionário com todos os Textos em Claro resultantes deste processo\n",
1037 | "criptanalise_ataque_texto_cifra_escolhido_cifra_cesar(dicionario_ataque_texto_cifra_escolhido_cifra_cesar)"
1038 | ]
1039 | },
1040 | {
1041 | "cell_type": "markdown",
1042 | "metadata": {},
1043 | "source": [
1044 | "A partir dos resultados presentes no _dicionário_ de **_Ataque de Texto de Cifra Escolhido_**, é fácil inferir que o _texto em claro_ que faz mais sentido, em termos de _linguagem_ e _contexto_, é quando se usa a _deslocação alfabética_, _s=15_, que é, de facto, o _segredo partilhado_ entre o **_Emissor_** e o **_Receptor_**, durante a transmissão da mensagem secreta, no exemplo anterior."
1045 | ]
1046 | },
1047 | {
1048 | "cell_type": "markdown",
1049 | "metadata": {},
1050 | "source": [
1051 | "A **_Eva_** poderia guardar, em memória, todas as mensagens secretas trocadas, entre a **_Alice_** e o **_Bob_**, e sabendo que em todas, foi sempre usada a **_Cifra de César_**, pode repetir este procedimento para todas essas mensagens, tendo facilmente acesso ao seu verdadeiro conteúdo (i.e., o seu _texto em claro_)."
1052 | ]
1053 | },
1054 | {
1055 | "cell_type": "markdown",
1056 | "metadata": {},
1057 | "source": [
1058 | "***"
1059 | ]
1060 | },
1061 | {
1062 | "cell_type": "markdown",
1063 | "metadata": {},
1064 | "source": [
1065 | "**Uma atualização em:** 27 de Junho, 2021\n",
1066 | "\n",
1067 | "**Autor:** _Rúben André Barreiro_\n",
1068 | "\n",
1069 | "**Adaptado da Dissertação/Tese de Mestrado:**\n",
1070 | "* \"_Acordo de Chave de Conferência Semi-Quântico (ACCSQ)_\" - 2021\n",
1071 | "\n",
1072 | "**© Direitos de autoria Qiskrypt, 2021, todos os direitos reservados.**"
1073 | ]
1074 | },
1075 | {
1076 | "cell_type": "markdown",
1077 | "metadata": {},
1078 | "source": [
1079 | "***"
1080 | ]
1081 | },
1082 | {
1083 | "cell_type": "markdown",
1084 | "metadata": {},
1085 | "source": [
1086 | "
Este trabalho está licenciado sobre uma Licensa Internacional da Creative Commons Attribution-NonCommercial-NoDerivatives 4.0."
1087 | ]
1088 | }
1089 | ],
1090 | "metadata": {
1091 | "kernelspec": {
1092 | "display_name": "Python 3",
1093 | "language": "python",
1094 | "name": "python3"
1095 | },
1096 | "language_info": {
1097 | "codemirror_mode": {
1098 | "name": "ipython",
1099 | "version": 3
1100 | },
1101 | "file_extension": ".py",
1102 | "mimetype": "text/x-python",
1103 | "name": "python",
1104 | "nbconvert_exporter": "python",
1105 | "pygments_lexer": "ipython3",
1106 | "version": "3.8.5"
1107 | }
1108 | },
1109 | "nbformat": 4,
1110 | "nbformat_minor": 4
1111 | }
1112 |
--------------------------------------------------------------------------------