From 3cf45019cae219f9b7e700d5c65c9b2c5e107d20 Mon Sep 17 00:00:00 2001 From: Julian Beier Date: Thu, 19 Jul 2018 10:08:26 +0200 Subject: [PATCH 01/13] added a cryptography chapter --- chapters/general/cryptography/cryptography.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 chapters/general/cryptography/cryptography.md diff --git a/chapters/general/cryptography/cryptography.md b/chapters/general/cryptography/cryptography.md new file mode 100644 index 000000000..4b70ad748 --- /dev/null +++ b/chapters/general/cryptography/cryptography.md @@ -0,0 +1,28 @@ +# Cryptography + +For a long time humans wanted to send secret messages that only the reciever understands. The first encryption algorithms go back to the ancient greeks and romans. One of the most well known encryptions is the so called "Caeser Cipher" which was supposedly used by Julius Caeser. In general there are two different principle of encryption, symmetric and asymmetric encryption. To explain the two principles I have to introduce you to two people. Enter Alice and Bob. These two names are very common when reading about cryptography. A third and (usually) evil person is also needed and that person is called Charlie. The way these three people are set up are so that Alice and Bob want to exchange messages without Charlie knowing what they said. + +### General principles of Cryptography + +* Don't underestimate the attacker. This is important because you don't know what resources an attacker has. It is always better to assume that they have a considerable amount of knowledge and computing power of the current global computing power. +* If you devise a new algorithm let a cryptanalyst meassure a robustness of your algorithm. Do *NOT* claim it is strong (unless you have the knowledge and proofs needed) without talking to a specialist because only they, if at all, should be able to determine whether the algorithm is good or not since cryptography and security go hand in hand. +* Kerckhoffs's principle says that when determing the robustness of a cryptosystem it should be assumed that the attacker knows the encryption and decryption algorithm. This does not include any pre-shared or secret keys. +* Adding complications don't necessarily make the algorithm better or safer. +* Always account for wrong design, implementation and usage of cryptosystems. A good example for a wrong implementation is WPA2 (the algorithm which encrypts WiFi traffic). This algorithm was mathematically proven to be safe yet an error in the implementaion allowed for the "Krack" attack. + +### Symmetric Cryptography + +Symmetric cryptography is called symmetric because the way you encrypt a message is the same as the way to decrypt a message. For this to work Alice and Bob both need the same key, which they have to share before communicating. Some examples for symmetric cryptography are: +* The afore mentioned Caeser Cipher. Here Alice and Bob have to know the rotation of the alphabet which is the key in this algorithm. +* Rot13 is a special case of the Caeser Cipher. The alphabet gets rotated by 13 (that is why it's called Rot13) so it would be Caeser with the key of 13. +* Permutation Cipher. Here you choose a permutation $$\pi$$ (i.e. $$\pi=(3,1,2,4)$$) and reorder the the letters according to that $$\pi$$ which is the key. +* XOR encryption. Here you generate a bit string which is exactly as long as the message you want to encrypt and just XOR them together. +* DES or Data Encryption Standard. This is a newer encryption algorithm which was standardized in 1977. It has since been deemed unsecure and is superseded by AES. +* AES or Advanced Encryption Standard. The actual algorithm is called "Rijndael". Like with XOR or DES you generate a bit string (depending on which AES you use 128/192 or 256 bit long) which is your key. +* Blowfish. This algorithm also was a good contender for the AES but lost to Rijndael. + +### Asymmetric Cryptography + +Asymmetric Cryptography is sometimes called "Public key cryptography" because Bob and Alice both need a public and a private key of which they only share the public key. This makes these algorithms asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. This has numerous fields of application. It is not only used for encrypting messages, but also for digital signing. Digital signing is used to make sure that the recieved message actually originates from the person who claims to have written it and you can also make sure nothing got altered. So for example Alice wants to send a message to Bob and Bob wants to make sure the message is actually from Alice and arrived the way it was send out. For that Alice encrypts the message with her private key. This is *NOT* so that Charlie can't read the message, since both Bob and Charlie have Alices private key. What both of them don't have is the private key. So Charlie can't decrypt, alter and encrypt the message again without Bob noticing it, because it wouldn't decrypt anymore with Alices public key. Some examples for public key cryptography: +* RSA. This algorithm calculates a public and a private key from two very large primes. It is (hopefully) near impossible to factor the product of two such primes in a feasable amount of time. +* ECC or Elliptic-curve cryptography. Here you calulate the private and public key from two points on an elliptic curve. This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. From e0ae690c457823dbd486ea599341b35258421fde Mon Sep 17 00:00:00 2001 From: Julian Beier Date: Thu, 19 Jul 2018 10:09:01 +0200 Subject: [PATCH 02/13] added the crypto chapter to the book --- CONTRIBUTORS.md | 2 ++ SUMMARY.md | 1 + redirects.json | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 50199d0d4..1986aeb3e 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -40,3 +40,5 @@ GuyPozner
William Boyles
+Julian +
\ No newline at end of file diff --git a/SUMMARY.md b/SUMMARY.md index a498a9838..751723dc9 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -36,3 +36,4 @@ * [Data Compression](chapters/general/data_compression/data_compression.md) * [Huffman Encoding](chapters/algorithms/huffman_encoding/huffman_encoding.md) * [Quantum Information](chapters/general/quantum_information/quantum_information.md) +* [Cryptography](chapters/general/cryptography/cryptography.md) diff --git a/redirects.json b/redirects.json index 659bd705a..5f7eef49a 100644 --- a/redirects.json +++ b/redirects.json @@ -139,6 +139,10 @@ { "from": "chapters/QI/QI.html", "to": "chapters/general/quantum_information/quantum_information.html" + }, + { + "from": "chapters/cryptography/cryptography.html", + "to": "chapters/general/cryptography/cryptography.html" } ] } From 9769cfc155d05c116f195677d51d5b2c7948cf2d Mon Sep 17 00:00:00 2001 From: Julian Beier Date: Fri, 20 Jul 2018 06:57:56 +0200 Subject: [PATCH 03/13] every sentece has it's own line now --- chapters/general/cryptography/cryptography.md | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/chapters/general/cryptography/cryptography.md b/chapters/general/cryptography/cryptography.md index 4b70ad748..c3a961b35 100644 --- a/chapters/general/cryptography/cryptography.md +++ b/chapters/general/cryptography/cryptography.md @@ -1,28 +1,53 @@ # Cryptography -For a long time humans wanted to send secret messages that only the reciever understands. The first encryption algorithms go back to the ancient greeks and romans. One of the most well known encryptions is the so called "Caeser Cipher" which was supposedly used by Julius Caeser. In general there are two different principle of encryption, symmetric and asymmetric encryption. To explain the two principles I have to introduce you to two people. Enter Alice and Bob. These two names are very common when reading about cryptography. A third and (usually) evil person is also needed and that person is called Charlie. The way these three people are set up are so that Alice and Bob want to exchange messages without Charlie knowing what they said. +For a long time humans wanted to send secret messages that only the reciever understands. +The first encryption algorithms go back to the ancient greeks and romans. +One of the most well known encryptions is the so called "Caeser Cipher" which was supposedly used by Julius Caeser. +In general there are two different principle of encryption, symmetric and asymmetric encryption. +To explain the two principles I have to introduce you to two people. Enter Alice and Bob. +These two names are very common when reading about cryptography. +A third and (usually) evil person is also needed and that person is called Charlie. +The way these three people are set up are so that Alice and Bob want to exchange messages without Charlie knowing what they said. ### General principles of Cryptography -* Don't underestimate the attacker. This is important because you don't know what resources an attacker has. It is always better to assume that they have a considerable amount of knowledge and computing power of the current global computing power. -* If you devise a new algorithm let a cryptanalyst meassure a robustness of your algorithm. Do *NOT* claim it is strong (unless you have the knowledge and proofs needed) without talking to a specialist because only they, if at all, should be able to determine whether the algorithm is good or not since cryptography and security go hand in hand. -* Kerckhoffs's principle says that when determing the robustness of a cryptosystem it should be assumed that the attacker knows the encryption and decryption algorithm. This does not include any pre-shared or secret keys. +* Don't underestimate the attacker. +This is important because you don't know what resources an attacker has. +It is always better to assume that they have a considerable amount of knowledge and computing power of the current global computing power. +* If you devise a new algorithm let a cryptanalyst meassure a robustness of your algorithm. +Do *NOT* claim it is strong (unless you have the knowledge and proofs needed) without talking to a specialist because only they, if at all, should be able to determine whether the algorithm is good or not since cryptography and security go hand in hand. +* Kerckhoffs's principle says that when determing the robustness of a cryptosystem it should be assumed that the attacker knows the encryption and decryption algorithm. +This does not include any pre-shared or secret keys. * Adding complications don't necessarily make the algorithm better or safer. -* Always account for wrong design, implementation and usage of cryptosystems. A good example for a wrong implementation is WPA2 (the algorithm which encrypts WiFi traffic). This algorithm was mathematically proven to be safe yet an error in the implementaion allowed for the "Krack" attack. +* Always account for wrong design, implementation and usage of cryptosystems. +A good example for a wrong implementation is WPA2 (the algorithm which encrypts WiFi traffic). This algorithm was mathematically proven to be safe yet an error in the implementaion allowed for the "Krack" attack. ### Symmetric Cryptography -Symmetric cryptography is called symmetric because the way you encrypt a message is the same as the way to decrypt a message. For this to work Alice and Bob both need the same key, which they have to share before communicating. Some examples for symmetric cryptography are: +Symmetric cryptography is called symmetric because the way you encrypt a message is the same as the way to decrypt a message. +For this to work Alice and Bob both need the same key, which they have to share before communicating. +Some examples for symmetric cryptography are: * The afore mentioned Caeser Cipher. Here Alice and Bob have to know the rotation of the alphabet which is the key in this algorithm. * Rot13 is a special case of the Caeser Cipher. The alphabet gets rotated by 13 (that is why it's called Rot13) so it would be Caeser with the key of 13. * Permutation Cipher. Here you choose a permutation $$\pi$$ (i.e. $$\pi=(3,1,2,4)$$) and reorder the the letters according to that $$\pi$$ which is the key. * XOR encryption. Here you generate a bit string which is exactly as long as the message you want to encrypt and just XOR them together. -* DES or Data Encryption Standard. This is a newer encryption algorithm which was standardized in 1977. It has since been deemed unsecure and is superseded by AES. -* AES or Advanced Encryption Standard. The actual algorithm is called "Rijndael". Like with XOR or DES you generate a bit string (depending on which AES you use 128/192 or 256 bit long) which is your key. +* DES or Data Encryption Standard. This is a newer encryption algorithm which was standardized in 1977. +It has since been deemed unsecure and is superseded by AES. +* AES or Advanced Encryption Standard. The actual algorithm is called "Rijndael". +Like with XOR or DES you generate a bit string (depending on which AES you use 128/192 or 256 bit long) which is your key. * Blowfish. This algorithm also was a good contender for the AES but lost to Rijndael. ### Asymmetric Cryptography -Asymmetric Cryptography is sometimes called "Public key cryptography" because Bob and Alice both need a public and a private key of which they only share the public key. This makes these algorithms asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. This has numerous fields of application. It is not only used for encrypting messages, but also for digital signing. Digital signing is used to make sure that the recieved message actually originates from the person who claims to have written it and you can also make sure nothing got altered. So for example Alice wants to send a message to Bob and Bob wants to make sure the message is actually from Alice and arrived the way it was send out. For that Alice encrypts the message with her private key. This is *NOT* so that Charlie can't read the message, since both Bob and Charlie have Alices private key. What both of them don't have is the private key. So Charlie can't decrypt, alter and encrypt the message again without Bob noticing it, because it wouldn't decrypt anymore with Alices public key. Some examples for public key cryptography: +Asymmetric Cryptography is sometimes called "Public key cryptography" because Bob and Alice both need a public and a private key of which they only share the public key. +This makes these algorithms asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. +This has numerous fields of application. It is not only used for encrypting messages, but also for digital signing. +Digital signing is used to make sure that the recieved message actually originates from the person who claims to have written it and you can also make sure nothing got altered. +So for example Alice wants to send a message to Bob and Bob wants to make sure the message is actually from Alice and arrived the way it was send out. +For that Alice encrypts the message with her private key. +This is *NOT* so that Charlie can't read the message, since both Bob and Charlie have Alices private key. +What both of them don't have is the private key. +So Charlie can't decrypt, alter and encrypt the message again without Bob noticing it, because it wouldn't decrypt anymore with Alices public key. +Some examples for public key cryptography: * RSA. This algorithm calculates a public and a private key from two very large primes. It is (hopefully) near impossible to factor the product of two such primes in a feasable amount of time. * ECC or Elliptic-curve cryptography. Here you calulate the private and public key from two points on an elliptic curve. This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. From 66357a26c65bc15e9c695bcef5006d0927e5318f Mon Sep 17 00:00:00 2001 From: Julian Beier Date: Fri, 20 Jul 2018 06:58:23 +0200 Subject: [PATCH 04/13] turned the l3 header into l2 header --- chapters/general/cryptography/cryptography.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chapters/general/cryptography/cryptography.md b/chapters/general/cryptography/cryptography.md index c3a961b35..a5a511590 100644 --- a/chapters/general/cryptography/cryptography.md +++ b/chapters/general/cryptography/cryptography.md @@ -9,7 +9,7 @@ These two names are very common when reading about cryptography. A third and (usually) evil person is also needed and that person is called Charlie. The way these three people are set up are so that Alice and Bob want to exchange messages without Charlie knowing what they said. -### General principles of Cryptography +## General principles of Cryptography * Don't underestimate the attacker. This is important because you don't know what resources an attacker has. @@ -22,7 +22,7 @@ This does not include any pre-shared or secret keys. * Always account for wrong design, implementation and usage of cryptosystems. A good example for a wrong implementation is WPA2 (the algorithm which encrypts WiFi traffic). This algorithm was mathematically proven to be safe yet an error in the implementaion allowed for the "Krack" attack. -### Symmetric Cryptography +## Symmetric Cryptography Symmetric cryptography is called symmetric because the way you encrypt a message is the same as the way to decrypt a message. For this to work Alice and Bob both need the same key, which they have to share before communicating. @@ -37,7 +37,7 @@ It has since been deemed unsecure and is superseded by AES. Like with XOR or DES you generate a bit string (depending on which AES you use 128/192 or 256 bit long) which is your key. * Blowfish. This algorithm also was a good contender for the AES but lost to Rijndael. -### Asymmetric Cryptography +## Asymmetric Cryptography Asymmetric Cryptography is sometimes called "Public key cryptography" because Bob and Alice both need a public and a private key of which they only share the public key. This makes these algorithms asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. From c3d0f2e0b5bb79cad3595890bd33000c94010a72 Mon Sep 17 00:00:00 2001 From: Julian Date: Tue, 18 Sep 2018 01:47:28 +0200 Subject: [PATCH 05/13] add the proposed changes --- contents/cryptography/cryptography.md | 98 +++++++++++++++++---------- 1 file changed, 61 insertions(+), 37 deletions(-) diff --git a/contents/cryptography/cryptography.md b/contents/cryptography/cryptography.md index a5a511590..a89ac2317 100644 --- a/contents/cryptography/cryptography.md +++ b/contents/cryptography/cryptography.md @@ -1,53 +1,77 @@ # Cryptography -For a long time humans wanted to send secret messages that only the reciever understands. -The first encryption algorithms go back to the ancient greeks and romans. -One of the most well known encryptions is the so called "Caeser Cipher" which was supposedly used by Julius Caeser. -In general there are two different principle of encryption, symmetric and asymmetric encryption. -To explain the two principles I have to introduce you to two people. Enter Alice and Bob. -These two names are very common when reading about cryptography. -A third and (usually) evil person is also needed and that person is called Charlie. -The way these three people are set up are so that Alice and Bob want to exchange messages without Charlie knowing what they said. - -## General principles of Cryptography - -* Don't underestimate the attacker. -This is important because you don't know what resources an attacker has. -It is always better to assume that they have a considerable amount of knowledge and computing power of the current global computing power. -* If you devise a new algorithm let a cryptanalyst meassure a robustness of your algorithm. -Do *NOT* claim it is strong (unless you have the knowledge and proofs needed) without talking to a specialist because only they, if at all, should be able to determine whether the algorithm is good or not since cryptography and security go hand in hand. +Humans have almost always been interested in sending secret messages that only the sender and receiver understand. +The reason for this is obvious: secret messages should remain secret. +The easiest way for this to happen is to talk behind closed doors, but that simply doesn't work if the the sender and receiver are separated by a significant distance. +In this case, they need to rely on a messenger or mailman to send the message. + +For simplicity, let's assume they are sending a written letter for the purpose of negotiating war tactics in ancient Greece or Rome. +Obviously, the message can remain secret if both the sender and receiver also trust the messenger; however, what if the messenger is actually an evil spy? +What if the messenger is killed and the letter is stolen? +What if (in an elaborate ruse), some third party slips into the messenger's tent in the dead-of-night and replaces the letter with another one entirely different? + +These are all important questions cryptography addresses. + +The idea is simple: we procedurally scramble the message we are sending and only provide the unscrambling procedure to trusted parties. +In this way, the message would seem like utter gobbledygook to anyone other than the sender and receiver. +It doesn't matter if the messenger is evil. +They cannot read the message anyway. +It's also fine if the message is replaced, because then the receiver won't be able to properly decode the message and can just ask for another message to be sent (probably on another path with a different messenger). +Unsurprisingly, one of the first methods of encryption was supposedly developed by Julius Caeser and called the "Caesar Cipher." +Here, every character in the message is replaced by another character based on some pre-defined table or chart that only the sender and receiver have. +The table is created by simply rotating the alphabet by $$n$$ spaces, where $$n$$ is chosen in a discussion between the sender and receiver before-hand. +It is certainly not the most complicated scheme out there, but it is generally the first encryption scheme people come up with when trying to encode secret messages to one another. +Honestly, I remember sending messages back and forth to friends in elementary school, but we would never provide the necessary table to decode the message. +Instead, we would provide enough text that they could find the table themselves from context. +If a bunch of elementary school kids can figure out how to break this encryption scheme, it cannot be too robust. +In fact, it's interesting to see how the field of cryptography has grown since the Caesar cipher was developed. +In the cryptographic literature, there is always a sender, receiver, and eavesdropper. +For some reason beyond my own comprehension, these three people are almost always given the names Alice (sender), Bob (receiver), and Charlie (attacker or eavesdropper). +These names are consistent even with quantum cryptography, so they are here to stay. + +In general, there are two different types of encryption: symmetric and asymmetric. +Both of which are described in the following sections. + +Cryptographic systems are a cornerstone to modern information technology and lie at the heart of everything from WiFi passwords to bank passwords. +If an attacker manages to crack modern cryptographic algorithms, they could cause serious damage. +For this reason, it is important to keep a few things in mind: +* Because crypto has become such an advanced field cryptosystems should be analyzed by trained professionals. +Meaning whenever possible use a widely accepted cryptography library instead of writing your own cypher. * Kerckhoffs's principle says that when determing the robustness of a cryptosystem it should be assumed that the attacker knows the encryption and decryption algorithm. This does not include any pre-shared or secret keys. -* Adding complications don't necessarily make the algorithm better or safer. -* Always account for wrong design, implementation and usage of cryptosystems. -A good example for a wrong implementation is WPA2 (the algorithm which encrypts WiFi traffic). This algorithm was mathematically proven to be safe yet an error in the implementaion allowed for the "Krack" attack. +* With the advances in technology cryptography often hits it's limits. +Many formerly thought hashing algorithms became obsolete because the computer used to crack them got faster and better. +Another field that cryptography will have to face is Quantum Computing. +Quantum Computers will have a big impact on cryptography and especially asymmetric crypto. +This whole set of problems is summarized in the field of Post-quantum cryptography. ## Symmetric Cryptography -Symmetric cryptography is called symmetric because the way you encrypt a message is the same as the way to decrypt a message. +Symmetric cryptography is called symmetric because the key that is used is the same for encrypting and decrypting. For this to work Alice and Bob both need the same key, which they have to share before communicating. Some examples for symmetric cryptography are: -* The afore mentioned Caeser Cipher. Here Alice and Bob have to know the rotation of the alphabet which is the key in this algorithm. -* Rot13 is a special case of the Caeser Cipher. The alphabet gets rotated by 13 (that is why it's called Rot13) so it would be Caeser with the key of 13. -* Permutation Cipher. Here you choose a permutation $$\pi$$ (i.e. $$\pi=(3,1,2,4)$$) and reorder the the letters according to that $$\pi$$ which is the key. -* XOR encryption. Here you generate a bit string which is exactly as long as the message you want to encrypt and just XOR them together. -* DES or Data Encryption Standard. This is a newer encryption algorithm which was standardized in 1977. +* **Ceasar Cipher**: Alice and Bob rotate the alphabet by $$n$$ characters and use that as a table to encode and decode their message. +* **Rot13**: This is a special case of the Caeser Cipher where the alphabet is rotated by 13, hence the name "Rot13." +* **Permutation Cipher**: Here you choose a permutation $$\pi$$ (i.e. $$\pi=(3,1,2,4)$$) and reorder the the letters according to that $$\pi$$ which is the key. +* **XOR encryption**: This method works on bitstrings and combines the message with a second message of equal length with a XOR operator. +To decrypt, simply XOR again with the same second message. +* **DES or Data Encryption Standard**: This is a newer encryption algorithm which was standardized in 1977. It has since been deemed unsecure and is superseded by AES. -* AES or Advanced Encryption Standard. The actual algorithm is called "Rijndael". +* **AES or Advanced Encryption Standard**: The actual algorithm is called "Rijndael". Like with XOR or DES you generate a bit string (depending on which AES you use 128/192 or 256 bit long) which is your key. -* Blowfish. This algorithm also was a good contender for the AES but lost to Rijndael. +* **Blowfish**: This algorithm also was a good contender for the AES but lost to Rijndael. + +This section is currently a work-in-progress, and all of these methods will have corresponding chapters in the near future. ## Asymmetric Cryptography -Asymmetric Cryptography is sometimes called "Public key cryptography" because Bob and Alice both need a public and a private key of which they only share the public key. +Asymmetric cryptography is sometimes called "public key cryptography" because Bob and Alice both need a shared public key and a private key they keep to themselves. This makes these algorithms asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. -This has numerous fields of application. It is not only used for encrypting messages, but also for digital signing. -Digital signing is used to make sure that the recieved message actually originates from the person who claims to have written it and you can also make sure nothing got altered. -So for example Alice wants to send a message to Bob and Bob wants to make sure the message is actually from Alice and arrived the way it was send out. -For that Alice encrypts the message with her private key. -This is *NOT* so that Charlie can't read the message, since both Bob and Charlie have Alices private key. -What both of them don't have is the private key. -So Charlie can't decrypt, alter and encrypt the message again without Bob noticing it, because it wouldn't decrypt anymore with Alices public key. +This can be used for a number of different applications, like digital signing, encrypted communication or secretly sharing keys. +For example, if Alice wants to send a message to Bob and Bob wants to make sure the message from Alice was not altered, Alice can encrypt the message with her private key. +If the message is altered (possibly by Charlie), then the message can no longer be decrypted with Alice's public key. Some examples for public key cryptography: -* RSA. This algorithm calculates a public and a private key from two very large primes. It is (hopefully) near impossible to factor the product of two such primes in a feasable amount of time. -* ECC or Elliptic-curve cryptography. Here you calulate the private and public key from two points on an elliptic curve. This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. +* **RSA**: This algorithm calculates a public and a private key from two very large primes. It is (hopefully) near impossible to factor the product of two such primes in a feasable amount of time. +* **ECC or Elliptic-curve cryptography**: Here you calulate the private and public key from two points on an elliptic curve. This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. + +This section is currently a work-in-progress. These methods will also have corresponding chapters in the near future. \ No newline at end of file From e1545985a397e653902dcca7b4f79c4f7566ac50 Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 28 Dec 2018 22:01:30 +0100 Subject: [PATCH 06/13] update contributors --- CONTRIBUTORS.md | 103 +++++++++++++++++++----------------------------- 1 file changed, 40 insertions(+), 63 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 7201fc373..52fae32c9 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -2,66 +2,43 @@ This file lists everyone, who contributed to this repo and wanted to show up her # Contributors -James Schloss -
-Nicole Mazzuca -
-Marius Becker -
-Gathros -
-Jeremie Gillet (- Jie -) -
-Salim Khatib -
-Hitesh C -
-Shaurya -
-Maxime Dherbécourt -
-Jess 3Jane -
-Pen Pal -
-Chinmaya Mahesh -
-Unlambder -
-Kjetil Johannessen -
-CDsigma -
-Gammison -
-hsjoihs -
-DominikRafacz -
-lulucca12 -
-GuyPozner -
-William Boyles -
-Max Weinstein -
-Gibus Wearing Brony -
-Gorzoid -
-Arun Sahadeo -
-NIFR91 -
-Michal Hanajik -
-Bendik Samseth -
-mukundan314 -
-Trashtalk -
-Cyrus Burt -
-Liikt +- James Schloss +- Nicole Mazzuca +- Marius Becker +- Gathros +- Jeremie Gillet (- Jie -) +- Salim Khatib +- Hitesh C +- Shaurya +- Maxime Dherbécourt +- Jess 3Jane +- Pen Pal +- Chinmaya Mahesh +- Unlambder +- Kjetil Johannessen +- CDsigma +- Gammison +- hsjoihs +- DominikRafacz +- lulucca12 +- GuyPozner +- William Boyles +- Max Weinstein +- Gibus Wearing Brony +- Gorzoid +- Arun Sahadeo +- NIFR91 +- Michal Hanajik +- Bendik Samseth +- mukundan314 +- Trashtalk +- Cyrus Burt +- Patrik Tesarik +- Ken Power +- PaddyKe +- nic-hartley +- Thijs Raymakers +- crafter312 +- Christopher Milan +- Vexatos +- Björn Heinrichs From 347a55f25447fb3b253cfd603f2976449407c8aa Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 3 Jan 2019 01:49:21 +0100 Subject: [PATCH 07/13] add licence to the chapter --- contents/cryptography/cryptography.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/contents/cryptography/cryptography.md b/contents/cryptography/cryptography.md index a89ac2317..65b8f7bac 100644 --- a/contents/cryptography/cryptography.md +++ b/contents/cryptography/cryptography.md @@ -74,4 +74,18 @@ Some examples for public key cryptography: * **RSA**: This algorithm calculates a public and a private key from two very large primes. It is (hopefully) near impossible to factor the product of two such primes in a feasable amount of time. * **ECC or Elliptic-curve cryptography**: Here you calulate the private and public key from two points on an elliptic curve. This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. -This section is currently a work-in-progress. These methods will also have corresponding chapters in the near future. \ No newline at end of file +This section is currently a work-in-progress. These methods will also have corresponding chapters in the near future. + +## License +The text of this of this chapter is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode) with attribution to Liikt. +The code examples are licensed under the MIT license (found in LICENSE.md). + +##### Code Examples + +The code examples are licensed under the MIT license (found in [LICENSE.md](https://github.com/algorithm-archivists/algorithm-archive/blob/master/LICENSE.md)). + +##### Text + +The text of this chapter was written by Liikt and is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode). + +[

](https://creativecommons.org/licenses/by-sa/4.0/) From 43a1fc497aff538c49af3b70e1bca062040ebc6c Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 3 Jan 2019 11:50:45 +0100 Subject: [PATCH 08/13] add nic-hartley's advice --- contents/cryptography/cryptography.md | 34 ++++++++++++++------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/contents/cryptography/cryptography.md b/contents/cryptography/cryptography.md index 65b8f7bac..0b1c71e40 100644 --- a/contents/cryptography/cryptography.md +++ b/contents/cryptography/cryptography.md @@ -17,7 +17,7 @@ In this way, the message would seem like utter gobbledygook to anyone other than It doesn't matter if the messenger is evil. They cannot read the message anyway. It's also fine if the message is replaced, because then the receiver won't be able to properly decode the message and can just ask for another message to be sent (probably on another path with a different messenger). -Unsurprisingly, one of the first methods of encryption was supposedly developed by Julius Caeser and called the "Caesar Cipher." +Unsurprisingly, a very early method of encryption was supposedly developed by Julius Caeser and called the "Caesar Cipher." Here, every character in the message is replaced by another character based on some pre-defined table or chart that only the sender and receiver have. The table is created by simply rotating the alphabet by $$n$$ spaces, where $$n$$ is chosen in a discussion between the sender and receiver before-hand. It is certainly not the most complicated scheme out there, but it is generally the first encryption scheme people come up with when trying to encode secret messages to one another. @@ -32,18 +32,18 @@ These names are consistent even with quantum cryptography, so they are here to s In general, there are two different types of encryption: symmetric and asymmetric. Both of which are described in the following sections. -Cryptographic systems are a cornerstone to modern information technology and lie at the heart of everything from WiFi passwords to bank passwords. +Cryptographic systems are a cornerstone to modern information technology and lie at the heart of everything from WiFi to online banking. If an attacker manages to crack modern cryptographic algorithms, they could cause serious damage. For this reason, it is important to keep a few things in mind: -* Because crypto has become such an advanced field cryptosystems should be analyzed by trained professionals. -Meaning whenever possible use a widely accepted cryptography library instead of writing your own cypher. +* Because crypto has become such an advanced field cryptosystems should be analyzed by trained professionals and have to go under extensive testing and vetting. + Meaning whenever possible use a widely accepted cryptography library instead of writing your own cypher. * Kerckhoffs's principle says that when determing the robustness of a cryptosystem it should be assumed that the attacker knows the encryption and decryption algorithm. -This does not include any pre-shared or secret keys. -* With the advances in technology cryptography often hits it's limits. -Many formerly thought hashing algorithms became obsolete because the computer used to crack them got faster and better. -Another field that cryptography will have to face is Quantum Computing. -Quantum Computers will have a big impact on cryptography and especially asymmetric crypto. -This whole set of problems is summarized in the field of Post-quantum cryptography. + This does not include any pre-shared or secret keys. +* With the advances in technology cryptography often hits its limits. + Many formerly thought hashing algorithms became obsolete because the computer used to crack them got faster and better. + Another field that cryptography will have to face is Quantum Computing. + Quantum Computers will have a big impact on cryptography and especially asymmetric crypto. + This whole set of problems is summarized in the field of Post-quantum cryptography. ## Symmetric Cryptography @@ -53,12 +53,12 @@ Some examples for symmetric cryptography are: * **Ceasar Cipher**: Alice and Bob rotate the alphabet by $$n$$ characters and use that as a table to encode and decode their message. * **Rot13**: This is a special case of the Caeser Cipher where the alphabet is rotated by 13, hence the name "Rot13." * **Permutation Cipher**: Here you choose a permutation $$\pi$$ (i.e. $$\pi=(3,1,2,4)$$) and reorder the the letters according to that $$\pi$$ which is the key. -* **XOR encryption**: This method works on bitstrings and combines the message with a second message of equal length with a XOR operator. -To decrypt, simply XOR again with the same second message. +* **XOR encryption**: This method works on bitstrings and combines the message and a key of equal bit length with the XOR operator. + To decrypt, simply XOR again with the same key. * **DES or Data Encryption Standard**: This is a newer encryption algorithm which was standardized in 1977. -It has since been deemed unsecure and is superseded by AES. + It has since been deemed unsecure and is superseded by AES. * **AES or Advanced Encryption Standard**: The actual algorithm is called "Rijndael". -Like with XOR or DES you generate a bit string (depending on which AES you use 128/192 or 256 bit long) which is your key. + Like with XOR or DES you generate a bit string (depending on which AES you use 128/192 or 256 bit long) which is your key. * **Blowfish**: This algorithm also was a good contender for the AES but lost to Rijndael. This section is currently a work-in-progress, and all of these methods will have corresponding chapters in the near future. @@ -71,8 +71,10 @@ This can be used for a number of different applications, like digital signing, e For example, if Alice wants to send a message to Bob and Bob wants to make sure the message from Alice was not altered, Alice can encrypt the message with her private key. If the message is altered (possibly by Charlie), then the message can no longer be decrypted with Alice's public key. Some examples for public key cryptography: -* **RSA**: This algorithm calculates a public and a private key from two very large primes. It is (hopefully) near impossible to factor the product of two such primes in a feasable amount of time. -* **ECC or Elliptic-curve cryptography**: Here you calulate the private and public key from two points on an elliptic curve. This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. +* **RSA**: This algorithm calculates a public and a private key from two very large primes. + It is (hopefully) near impossible to factor the product of two such primes in a feasable amount of time. +* **ECC or Elliptic-curve cryptography**: Here you calulate the private and public key from two points on an elliptic curve. + This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. This section is currently a work-in-progress. These methods will also have corresponding chapters in the near future. From fa2258d935602b6f24d52c69d5b76f9d94ea5c00 Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 3 Jan 2019 11:51:43 +0100 Subject: [PATCH 09/13] fix spelling mistakes --- contents/cryptography/cryptography.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contents/cryptography/cryptography.md b/contents/cryptography/cryptography.md index 0b1c71e40..06a592e03 100644 --- a/contents/cryptography/cryptography.md +++ b/contents/cryptography/cryptography.md @@ -35,9 +35,9 @@ Both of which are described in the following sections. Cryptographic systems are a cornerstone to modern information technology and lie at the heart of everything from WiFi to online banking. If an attacker manages to crack modern cryptographic algorithms, they could cause serious damage. For this reason, it is important to keep a few things in mind: -* Because crypto has become such an advanced field cryptosystems should be analyzed by trained professionals and have to go under extensive testing and vetting. +* Because crypto has become such an advanced field crypto systems should be analyzed by trained professionals and have to go under extensive testing and vetting. Meaning whenever possible use a widely accepted cryptography library instead of writing your own cypher. -* Kerckhoffs's principle says that when determing the robustness of a cryptosystem it should be assumed that the attacker knows the encryption and decryption algorithm. +* Kerckhoffs's principle says that when determining the robustness of a crypto system it should be assumed that the attacker knows the encryption and decryption algorithm. This does not include any pre-shared or secret keys. * With the advances in technology cryptography often hits its limits. Many formerly thought hashing algorithms became obsolete because the computer used to crack them got faster and better. @@ -53,10 +53,10 @@ Some examples for symmetric cryptography are: * **Ceasar Cipher**: Alice and Bob rotate the alphabet by $$n$$ characters and use that as a table to encode and decode their message. * **Rot13**: This is a special case of the Caeser Cipher where the alphabet is rotated by 13, hence the name "Rot13." * **Permutation Cipher**: Here you choose a permutation $$\pi$$ (i.e. $$\pi=(3,1,2,4)$$) and reorder the the letters according to that $$\pi$$ which is the key. -* **XOR encryption**: This method works on bitstrings and combines the message and a key of equal bit length with the XOR operator. +* **XOR encryption**: This method works on bit strings and combines the message and a key of equal bit length with the XOR operator. To decrypt, simply XOR again with the same key. * **DES or Data Encryption Standard**: This is a newer encryption algorithm which was standardized in 1977. - It has since been deemed unsecure and is superseded by AES. + It has since been deemed insecure and is superseded by AES. * **AES or Advanced Encryption Standard**: The actual algorithm is called "Rijndael". Like with XOR or DES you generate a bit string (depending on which AES you use 128/192 or 256 bit long) which is your key. * **Blowfish**: This algorithm also was a good contender for the AES but lost to Rijndael. @@ -72,8 +72,8 @@ For example, if Alice wants to send a message to Bob and Bob wants to make sure If the message is altered (possibly by Charlie), then the message can no longer be decrypted with Alice's public key. Some examples for public key cryptography: * **RSA**: This algorithm calculates a public and a private key from two very large primes. - It is (hopefully) near impossible to factor the product of two such primes in a feasable amount of time. -* **ECC or Elliptic-curve cryptography**: Here you calulate the private and public key from two points on an elliptic curve. + It is (hopefully) near impossible to factor the product of two such primes in a feasible amount of time. +* **ECC or Elliptic-curve cryptography**: Here you calculate the private and public key from two points on an elliptic curve. This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. This section is currently a work-in-progress. These methods will also have corresponding chapters in the near future. From 2d7ba69fbbb5bb4a757c4d2b8d4e818644e1a183 Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 3 Jan 2019 11:57:57 +0100 Subject: [PATCH 10/13] changed awkward wording and the example --- contents/cryptography/cryptography.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/contents/cryptography/cryptography.md b/contents/cryptography/cryptography.md index 06a592e03..43b628fa1 100644 --- a/contents/cryptography/cryptography.md +++ b/contents/cryptography/cryptography.md @@ -65,11 +65,14 @@ This section is currently a work-in-progress, and all of these methods will have ## Asymmetric Cryptography -Asymmetric cryptography is sometimes called "public key cryptography" because Bob and Alice both need a shared public key and a private key they keep to themselves. -This makes these algorithms asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. +Asymmetric cryptography is sometimes called "public key cryptography" (or PK Crypto in short) because Bob and Alice both need a shared public key and a private key they keep to themselves. +These algorithms are called asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. This can be used for a number of different applications, like digital signing, encrypted communication or secretly sharing keys. -For example, if Alice wants to send a message to Bob and Bob wants to make sure the message from Alice was not altered, Alice can encrypt the message with her private key. -If the message is altered (possibly by Charlie), then the message can no longer be decrypted with Alice's public key. +For example, if Alice wants to send a message to Bob and this message has to kept private Alice will encrypt the message with Bob's private key. +Now only Bob can decrypt the message again and read it. +If Charlie were to alter Alice's message, Bob couldn't decrypt it anymore. +If Bob wants to make sure the message is actually from Alice, Alice can encrypt the already encrypted message with her private key again. +This is to keep Charlie from sending forged or altered messages since Bob couldn't decrypt that layer with Alice's public key. Some examples for public key cryptography: * **RSA**: This algorithm calculates a public and a private key from two very large primes. It is (hopefully) near impossible to factor the product of two such primes in a feasible amount of time. From 063285b6b2904036792e8fcfc6683ac541093f61 Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 4 Jan 2019 07:36:13 +0100 Subject: [PATCH 11/13] add a small explenation to stop confusion --- contents/cryptography/cryptography.md | 1 + 1 file changed, 1 insertion(+) diff --git a/contents/cryptography/cryptography.md b/contents/cryptography/cryptography.md index 43b628fa1..2c4d1dc52 100644 --- a/contents/cryptography/cryptography.md +++ b/contents/cryptography/cryptography.md @@ -41,6 +41,7 @@ For this reason, it is important to keep a few things in mind: This does not include any pre-shared or secret keys. * With the advances in technology cryptography often hits its limits. Many formerly thought hashing algorithms became obsolete because the computer used to crack them got faster and better. + The keys for RSA have to be longer or different and stronger algorithms have to be used. Another field that cryptography will have to face is Quantum Computing. Quantum Computers will have a big impact on cryptography and especially asymmetric crypto. This whole set of problems is summarized in the field of Post-quantum cryptography. From efd013d232f3143addf432f48c7af624167c7776 Mon Sep 17 00:00:00 2001 From: Julian Date: Tue, 28 Dec 2021 02:29:05 +0100 Subject: [PATCH 12/13] table; crypto -> cryptography; license --- contents/cryptography/cryptography.md | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/contents/cryptography/cryptography.md b/contents/cryptography/cryptography.md index 2c4d1dc52..09cdfa2e9 100644 --- a/contents/cryptography/cryptography.md +++ b/contents/cryptography/cryptography.md @@ -20,13 +20,22 @@ It's also fine if the message is replaced, because then the receiver won't be ab Unsurprisingly, a very early method of encryption was supposedly developed by Julius Caeser and called the "Caesar Cipher." Here, every character in the message is replaced by another character based on some pre-defined table or chart that only the sender and receiver have. The table is created by simply rotating the alphabet by $$n$$ spaces, where $$n$$ is chosen in a discussion between the sender and receiver before-hand. +| $$n$$ | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | +|--------|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| 0 | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | +| 2 | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | a | b | +| 14 | o | p | q | r | s | t | u | v | w | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | +| 18 | s | t | u | v | w | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | +| 21 | v | w | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | +| 24 | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | + It is certainly not the most complicated scheme out there, but it is generally the first encryption scheme people come up with when trying to encode secret messages to one another. Honestly, I remember sending messages back and forth to friends in elementary school, but we would never provide the necessary table to decode the message. Instead, we would provide enough text that they could find the table themselves from context. If a bunch of elementary school kids can figure out how to break this encryption scheme, it cannot be too robust. In fact, it's interesting to see how the field of cryptography has grown since the Caesar cipher was developed. In the cryptographic literature, there is always a sender, receiver, and eavesdropper. -For some reason beyond my own comprehension, these three people are almost always given the names Alice (sender), Bob (receiver), and Charlie (attacker or eavesdropper). +For some reason beyond my own comprehension, these three people are almost always given the names Alice (sender), Bob (receiver), and Eve (attacker or eavesdropper). These names are consistent even with quantum cryptography, so they are here to stay. In general, there are two different types of encryption: symmetric and asymmetric. @@ -35,16 +44,16 @@ Both of which are described in the following sections. Cryptographic systems are a cornerstone to modern information technology and lie at the heart of everything from WiFi to online banking. If an attacker manages to crack modern cryptographic algorithms, they could cause serious damage. For this reason, it is important to keep a few things in mind: -* Because crypto has become such an advanced field crypto systems should be analyzed by trained professionals and have to go under extensive testing and vetting. +* Because cryptography has become such an advanced field cryptography systems should be analyzed by trained professionals and have to go under extensive testing and vetting. Meaning whenever possible use a widely accepted cryptography library instead of writing your own cypher. -* Kerckhoffs's principle says that when determining the robustness of a crypto system it should be assumed that the attacker knows the encryption and decryption algorithm. +* Kerckhoffs's principle says that when determining the robustness of a cryptography system it should be assumed that the attacker knows the encryption and decryption algorithm. This does not include any pre-shared or secret keys. * With the advances in technology cryptography often hits its limits. - Many formerly thought hashing algorithms became obsolete because the computer used to crack them got faster and better. + Many formerly state-of-the-art hashing algorithms have become obsolete because the computers used to crack them have gotten faster and better. The keys for RSA have to be longer or different and stronger algorithms have to be used. Another field that cryptography will have to face is Quantum Computing. - Quantum Computers will have a big impact on cryptography and especially asymmetric crypto. - This whole set of problems is summarized in the field of Post-quantum cryptography. + Quantum computers will have a big impact on cryptography and especially asymmetric cryptography. + This whole set of problems is summarized in the field of post-quantum cryptography. ## Symmetric Cryptography @@ -66,7 +75,7 @@ This section is currently a work-in-progress, and all of these methods will have ## Asymmetric Cryptography -Asymmetric cryptography is sometimes called "public key cryptography" (or PK Crypto in short) because Bob and Alice both need a shared public key and a private key they keep to themselves. +Asymmetric cryptography is sometimes called "public key cryptography" (or PK cryptography in short) because Bob and Alice both need a shared public key and a private key they keep to themselves. These algorithms are called asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. This can be used for a number of different applications, like digital signing, encrypted communication or secretly sharing keys. For example, if Alice wants to send a message to Bob and this message has to kept private Alice will encrypt the message with Bob's private key. @@ -83,7 +92,7 @@ Some examples for public key cryptography: This section is currently a work-in-progress. These methods will also have corresponding chapters in the near future. ## License -The text of this of this chapter is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode) with attribution to Liikt. +The text of this chapter was written by [Liikt](https://github.com/Liikt) and is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode). The code examples are licensed under the MIT license (found in LICENSE.md). ##### Code Examples From b0b10e8a238d7b3c5b0e02c4fec8ad812af7414d Mon Sep 17 00:00:00 2001 From: James Schloss Date: Sat, 15 Jan 2022 14:35:20 +0100 Subject: [PATCH 13/13] Apply suggestions from code review --- contents/cryptography/cryptography.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/contents/cryptography/cryptography.md b/contents/cryptography/cryptography.md index 09cdfa2e9..80daba747 100644 --- a/contents/cryptography/cryptography.md +++ b/contents/cryptography/cryptography.md @@ -78,7 +78,7 @@ This section is currently a work-in-progress, and all of these methods will have Asymmetric cryptography is sometimes called "public key cryptography" (or PK cryptography in short) because Bob and Alice both need a shared public key and a private key they keep to themselves. These algorithms are called asymmetric because what is encrypted with the public key can only be decrypted with the private key and vice versa. This can be used for a number of different applications, like digital signing, encrypted communication or secretly sharing keys. -For example, if Alice wants to send a message to Bob and this message has to kept private Alice will encrypt the message with Bob's private key. +For example, if Alice wants to send a message to Bob and this message has to be kept private, Alice will encrypt the message with Bob's public key. Now only Bob can decrypt the message again and read it. If Charlie were to alter Alice's message, Bob couldn't decrypt it anymore. If Bob wants to make sure the message is actually from Alice, Alice can encrypt the already encrypted message with her private key again. @@ -90,6 +90,9 @@ Some examples for public key cryptography: This has the positive side effect that you need smaller numbers than non-ECC algorithms like RSA to achieve the same level of security. This section is currently a work-in-progress. These methods will also have corresponding chapters in the near future. + ## License The text of this chapter was written by [Liikt](https://github.com/Liikt) and is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode). @@ -101,6 +104,6 @@ The code examples are licensed under the MIT license (found in [LICENSE.md](http ##### Text -The text of this chapter was written by Liikt and is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode). +The text of this chapter was written by [Liikt](https://github.com/Liikt) and is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode). [

](https://creativecommons.org/licenses/by-sa/4.0/)