diff --git a/GCryptLib/visualizations/input-big-flip.bmp.png b/GCryptLib/visualizations/input-big-flip.bmp.png index 18127a3..23ec9b8 100644 Binary files a/GCryptLib/visualizations/input-big-flip.bmp.png and b/GCryptLib/visualizations/input-big-flip.bmp.png differ diff --git a/GCryptLib/visualizations/input-big.bmp.png b/GCryptLib/visualizations/input-big.bmp.png index 88608c7..dfc6e9e 100644 Binary files a/GCryptLib/visualizations/input-big.bmp.png and b/GCryptLib/visualizations/input-big.bmp.png differ diff --git a/GCryptLib/visualizations/input-extreme-flip.bmp.png b/GCryptLib/visualizations/input-extreme-flip.bmp.png new file mode 100644 index 0000000..15178e2 Binary files /dev/null and b/GCryptLib/visualizations/input-extreme-flip.bmp.png differ diff --git a/GCryptLib/visualizations/input-extreme-key.bmp.png b/GCryptLib/visualizations/input-extreme-key.bmp.png new file mode 100644 index 0000000..e08f89d Binary files /dev/null and b/GCryptLib/visualizations/input-extreme-key.bmp.png differ diff --git a/GCryptLib/visualizations/input-extreme.bmp.png b/GCryptLib/visualizations/input-extreme.bmp.png new file mode 100644 index 0000000..85d9ce5 Binary files /dev/null and b/GCryptLib/visualizations/input-extreme.bmp.png differ diff --git a/GCryptLib/visualizations/input-extreme.gif b/GCryptLib/visualizations/input-extreme.gif new file mode 100644 index 0000000..f4a987d Binary files /dev/null and b/GCryptLib/visualizations/input-extreme.gif differ diff --git a/GCryptLib/visualizations/input-flip.bmp.png b/GCryptLib/visualizations/input-flip.bmp.png index 72f56cc..f1734c4 100644 Binary files a/GCryptLib/visualizations/input-flip.bmp.png and b/GCryptLib/visualizations/input-flip.bmp.png differ diff --git a/GCryptLib/visualizations/input.bmp.png b/GCryptLib/visualizations/input.bmp.png index a6df3ca..5f84f7f 100644 Binary files a/GCryptLib/visualizations/input.bmp.png and b/GCryptLib/visualizations/input.bmp.png differ diff --git a/GCryptLib/visualizations/output-big-flip.bmp.png b/GCryptLib/visualizations/output-big-flip.bmp.png index eca1a58..ae865e8 100644 Binary files a/GCryptLib/visualizations/output-big-flip.bmp.png and b/GCryptLib/visualizations/output-big-flip.bmp.png differ diff --git a/GCryptLib/visualizations/output-big.bmp.png b/GCryptLib/visualizations/output-big.bmp.png index fdca11b..2b15790 100644 Binary files a/GCryptLib/visualizations/output-big.bmp.png and b/GCryptLib/visualizations/output-big.bmp.png differ diff --git a/GCryptLib/visualizations/output-extreme-flip.bmp.png b/GCryptLib/visualizations/output-extreme-flip.bmp.png new file mode 100644 index 0000000..f175415 Binary files /dev/null and b/GCryptLib/visualizations/output-extreme-flip.bmp.png differ diff --git a/GCryptLib/visualizations/output-extreme.bmp.png b/GCryptLib/visualizations/output-extreme.bmp.png new file mode 100644 index 0000000..a87437f Binary files /dev/null and b/GCryptLib/visualizations/output-extreme.bmp.png differ diff --git a/GCryptLib/visualizations/output-extreme.gif b/GCryptLib/visualizations/output-extreme.gif new file mode 100644 index 0000000..f2e1266 Binary files /dev/null and b/GCryptLib/visualizations/output-extreme.gif differ diff --git a/GCryptLib/visualizations/output-flip.bmp.png b/GCryptLib/visualizations/output-flip.bmp.png index bf90029..8372825 100644 Binary files a/GCryptLib/visualizations/output-flip.bmp.png and b/GCryptLib/visualizations/output-flip.bmp.png differ diff --git a/GCryptLib/visualizations/output.bmp.png b/GCryptLib/visualizations/output.bmp.png index 1e62f1a..9d47342 100644 Binary files a/GCryptLib/visualizations/output.bmp.png and b/GCryptLib/visualizations/output.bmp.png differ diff --git a/readme.md b/readme.md index ed47e68..0e36a94 100644 --- a/readme.md +++ b/readme.md @@ -128,6 +128,7 @@ The xor operation ensures that an observer will never know the internal state of future output. ### Speaking of... Visualizations! +#### Single-block diffusion `"Hello :3"` in binary, and it's ciphertext: !["Hello :3" in binary](https://gitea.leonetienne.de/leonetienne/GCrypt/raw/branch/feature/relaunch/GCryptLib/visualizations/input.bmp.png) @@ -135,7 +136,7 @@ future output. ![Ciphertext 1](https://gitea.leonetienne.de/leonetienne/GCrypt/raw/branch/feature/relaunch/GCryptLib/visualizations/output.bmp.png) -Now, let's flip a single bit in the input: +Now, let's flip than a single bit in the input: One bit flipped, and again the corresponding ciphertext: ![One bit flipped](https://gitea.leonetienne.de/leonetienne/GCrypt/raw/branch/feature/relaunch/GCryptLib/visualizations/input-flip.bmp.png) @@ -148,7 +149,7 @@ Let's gif them together, to better see the difference: ![Ciphertext](https://gitea.leonetienne.de/leonetienne/GCrypt/raw/branch/feature/relaunch/GCryptLib/visualizations/output.gif) -What about input longer a single block? +#### What about input longer a single block? Input, and ciphertext: ![Input](https://gitea.leonetienne.de/leonetienne/GCrypt/raw/branch/feature/relaunch/GCryptLib/visualizations/input-big.gif) @@ -157,6 +158,19 @@ Input, and ciphertext: Notice how the ciphertext doesn't change until the block containing the bitflip is reached. This is a limitation of cipher block chaining. +### What about extreme inputs? +How non-transparent is the cipher with extreme inputs? Even with a super problematic key?: + +Input, key, and ciphertext: +![Input](https://gitea.leonetienne.de/leonetienne/GCrypt/raw/branch/feature/relaunch/GCryptLib/visualizations/input-extreme.gif) +    +![Key](https://gitea.leonetienne.de/leonetienne/GCrypt/raw/branch/feature/relaunch/GCryptLib/visualizations/input-extreme-key.bmp.png) +    +![Ciphertext](https://gitea.leonetienne.de/leonetienne/GCrypt/raw/branch/feature/relaunch/GCryptLib/visualizations/output-extreme.gif) + +Notice how even cleartexts that are almost completely uniform, with a key that is just zeores, will produce ambiguous ciphertexts. +I darkened the input gif, as to not cause disorientation by flickering. + ## Noteworthy: * This is no fixed algorithm. Newer versions may very well be unable to decrypt ciphertexts encrypted with earlier versions.