From 62f14a453860c8fdd641271f7ccab07f1d7edd00 Mon Sep 17 00:00:00 2001 From: thor Date: Thu, 3 Nov 2022 14:41:12 -0700 Subject: [PATCH] propose initial format for uncloak --- .gitignore | 3 + .trash/Algorithm-Rotation Cipher.md | 0 ...emma-Natural Properties of Divisibility.md | 0 ...-1976-11 New directions in cryptography.md | 12 ++ ...rce-MD5 vulnerable to collision attacks.md | 10 ++ README.md | 56 +++++++ Topic-Cryptography.md | 22 +++ .../Aphorism-Don't Roll Your Own Crypto.md | 10 ++ aphorism/Aphorism-Kerckhoffs's Principle.md | 12 ++ aphorism/Aphorism-Shannon's Maxim.md | 11 ++ aphorism/Topic-Cryptography Aphorisms.md | 14 ++ cryptanalysis/Attack Type-Brute Force.md | 11 ++ cryptanalysis/Attack Type-Collision Attack.md | 10 ++ .../Attack Type-Frequency Analysis.md | 10 ++ .../Attack Type-Length Extension Attack.md | 10 ++ cryptanalysis/Attack Type-Rainbow Table.md | 10 ++ cryptanalysis/Topic-Cryptanalysis.md | 19 +++ .../Topic-Cryptography Engineering.md | 12 ++ encryption/Topic-Encryption.md | 38 +++++ .../Topic-Asymmetric Encryption.md | 12 ++ .../Topic-Symmetric Encryption.md | 15 ++ .../block ciphers/Topic-Block Ciphers.md | 15 ++ .../Algorithm-Caesar Cipher.md | 20 +++ .../Algorithm-Substitution Cipher.md | 20 +++ .../Algorithm-Vign\303\250re cipher.md" | 19 +++ .../Topic-Historical Ciphers.md | 14 ++ .../stream ciphers/Topic-Stream Ciphers.md | 14 ++ hash functions/Algorithm-MD5 Hash.md | 25 +++ .../Security Model-Random Oracle Model.md | 10 ++ .../Term-Cryptographic Hash Function.md | 10 ++ hash functions/Term-Digest.md | 7 + hash functions/Topic-Hash Functions.md | 14 ++ meta/Explanation-Node Categorization.md | 130 ++++++++++++++++ meta/Reference-Node Categorization.md | 143 ++++++++++++++++++ meta/Topic-Meta.md | 18 +++ .../Topic-Post Quantum Cryptography.md | 12 ++ .../Topic-Cryptography Related Topics.md | 17 +++ .../coding theory/Topic-Coding Theory.md | 13 ++ .../Topic-Complexity Theory.md | 13 ++ .../elliptic curves/Topic-Elliptic Curves.md | 14 ++ .../group theory/Topic-Group Theory.md | 12 ++ .../Topic-Information Theory.md | 14 ++ related topics/lattices/Topic-Lattices.md | 12 ++ .../Algorithm-Euclidean Algorithm.md | 32 ++++ .../Algorithm-Extended Euclidean Algorithm.md | 20 +++ ...emma-Natural Properties of Divisibility.md | 13 ++ .../number theory/Property-Divisibility.md | 23 +++ .../Property-Greatest-Common-Divisor.md | 14 ++ related topics/number theory/Set-Integers.md | 18 +++ .../number theory/Topic-Number Theory.md | 17 +++ .../Topic-Probability Theory.md | 12 ++ templates/template-attack type.md | 7 + templates/template-library.md | 5 + templates/template-object.md | 7 + templates/template-source.md | 7 + templates/template-tool.md | 5 + templates/template-topic.md | 6 + zero knowledge/Topic-Zero Knowledge.md | 13 ++ 58 files changed, 1062 insertions(+) create mode 100644 .trash/Algorithm-Rotation Cipher.md create mode 100644 .trash/Lemma-Natural Properties of Divisibility.md create mode 100644 .trash/sources/Source-1976-11 New directions in cryptography.md create mode 100644 .trash/sources/Source-MD5 vulnerable to collision attacks.md create mode 100644 README.md create mode 100644 Topic-Cryptography.md create mode 100644 aphorism/Aphorism-Don't Roll Your Own Crypto.md create mode 100644 aphorism/Aphorism-Kerckhoffs's Principle.md create mode 100644 aphorism/Aphorism-Shannon's Maxim.md create mode 100644 aphorism/Topic-Cryptography Aphorisms.md create mode 100644 cryptanalysis/Attack Type-Brute Force.md create mode 100644 cryptanalysis/Attack Type-Collision Attack.md create mode 100644 cryptanalysis/Attack Type-Frequency Analysis.md create mode 100644 cryptanalysis/Attack Type-Length Extension Attack.md create mode 100644 cryptanalysis/Attack Type-Rainbow Table.md create mode 100644 cryptanalysis/Topic-Cryptanalysis.md create mode 100644 cryptography engineering/Topic-Cryptography Engineering.md create mode 100644 encryption/Topic-Encryption.md create mode 100644 encryption/asymmetric encryption/Topic-Asymmetric Encryption.md create mode 100644 encryption/symmetric encryption/Topic-Symmetric Encryption.md create mode 100644 encryption/symmetric encryption/block ciphers/Topic-Block Ciphers.md create mode 100644 encryption/symmetric encryption/historical ciphers/Algorithm-Caesar Cipher.md create mode 100644 encryption/symmetric encryption/historical ciphers/Algorithm-Substitution Cipher.md create mode 100644 "encryption/symmetric encryption/historical ciphers/Algorithm-Vign\303\250re cipher.md" create mode 100644 encryption/symmetric encryption/historical ciphers/Topic-Historical Ciphers.md create mode 100644 encryption/symmetric encryption/stream ciphers/Topic-Stream Ciphers.md create mode 100644 hash functions/Algorithm-MD5 Hash.md create mode 100644 hash functions/Security Model-Random Oracle Model.md create mode 100644 hash functions/Term-Cryptographic Hash Function.md create mode 100644 hash functions/Term-Digest.md create mode 100644 hash functions/Topic-Hash Functions.md create mode 100644 meta/Explanation-Node Categorization.md create mode 100644 meta/Reference-Node Categorization.md create mode 100644 meta/Topic-Meta.md create mode 100644 post quantum/Topic-Post Quantum Cryptography.md create mode 100644 related topics/Topic-Cryptography Related Topics.md create mode 100644 related topics/coding theory/Topic-Coding Theory.md create mode 100644 related topics/complexity theory/Topic-Complexity Theory.md create mode 100644 related topics/elliptic curves/Topic-Elliptic Curves.md create mode 100644 related topics/group theory/Topic-Group Theory.md create mode 100644 related topics/information theory/Topic-Information Theory.md create mode 100644 related topics/lattices/Topic-Lattices.md create mode 100644 related topics/number theory/Algorithm-Euclidean Algorithm.md create mode 100644 related topics/number theory/Algorithm-Extended Euclidean Algorithm.md create mode 100644 related topics/number theory/Lemma-Natural Properties of Divisibility.md create mode 100644 related topics/number theory/Property-Divisibility.md create mode 100644 related topics/number theory/Property-Greatest-Common-Divisor.md create mode 100644 related topics/number theory/Set-Integers.md create mode 100644 related topics/number theory/Topic-Number Theory.md create mode 100644 related topics/probability theory/Topic-Probability Theory.md create mode 100644 templates/template-attack type.md create mode 100644 templates/template-library.md create mode 100644 templates/template-object.md create mode 100644 templates/template-source.md create mode 100644 templates/template-tool.md create mode 100644 templates/template-topic.md create mode 100644 zero knowledge/Topic-Zero Knowledge.md diff --git a/.gitignore b/.gitignore index b6e4761..7d5b023 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# +.obsidian* + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/.trash/Algorithm-Rotation Cipher.md b/.trash/Algorithm-Rotation Cipher.md new file mode 100644 index 0000000..e69de29 diff --git a/.trash/Lemma-Natural Properties of Divisibility.md b/.trash/Lemma-Natural Properties of Divisibility.md new file mode 100644 index 0000000..e69de29 diff --git a/.trash/sources/Source-1976-11 New directions in cryptography.md b/.trash/sources/Source-1976-11 New directions in cryptography.md new file mode 100644 index 0000000..75d99a6 --- /dev/null +++ b/.trash/sources/Source-1976-11 New directions in cryptography.md @@ -0,0 +1,12 @@ +--- +publish: true +category: source +audience: research +--- +# Source: New directions in Cryptography +[Source](https://ieeexplore.ieee.org/document/1055638) +## Abstract +Two kinds of contemporary developments in cryptography are examined. Widening applications of teleprocessing have given rise to a need for new types of cryptographic systems, which minimize the need for secure key distribution channels and supply the equivalent of a written signature. This paper suggests ways to solve these currently open problems. It also discusses how the theories of communication and computation are beginning to provide the tools to solve cryptographic problems of long standing. + +## Editors' Note +This paper introduced Asymmetric Key cryptography, unlocking, as the paper's title portends, an entirely new direction for cryptography to develop as a field. \ No newline at end of file diff --git a/.trash/sources/Source-MD5 vulnerable to collision attacks.md b/.trash/sources/Source-MD5 vulnerable to collision attacks.md new file mode 100644 index 0000000..69f938d --- /dev/null +++ b/.trash/sources/Source-MD5 vulnerable to collision attacks.md @@ -0,0 +1,10 @@ +--- +publish: true +category: source +audience: research +--- +# Source: New directions in Cryptography +[Source](https://www.kb.cert.org/vuls/id/836068) +## Abstract + +Weaknesses in the MD5 algorithm allow for collisions in output. As a result, attackers can generate cryptographic tokens or other data that illegitimately appear to be authentic. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7436200 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +--- +publish: true +--- +# Uncloak: A Community Maintained Cryptography Resource +Welcome to Uncloak, a community-maintained knowledge wiki experiment, aiming to increase the accessibility of cryptography for developers, researchers, and everyone else. + +Our approach to knowledge organization attempts to incorporate basic ideas about how knowledge is constructed by representing links between concepts as connections between nodes in a graph. We believe this approach may help to clarify how to approach cryptography as a field for readers of all levels, while aiming to maintain a high standard for what information is relevant for different audiences. + +The site will initially focus on generating content directed at cryptography learners and developers in cryptography engineering and zero knowledge, as we see these fields as most lacking in resources. Where there are already decent existing resources (wikipedia pages, blog posts, etc.), the site will aim to link to them, while we expand content in target areas where the need is greater. These stubs are great candidates for first-time-contributions. + +Work on site content began in November 2022; the site graph is sparse at the moment, but growing. If you see an area you might like to improve, we appreciate contributions to the site. Currently the best way to do so is by opening an issue or pull request on our [Github](https://github.com/thor314/uncloak). If you're reading this from Github, the site is hosted at https://uncloak.org. Though the site is hosted via [Obsidian Publish](https://obsidian.md/publish), you don't need to use [Obsidian](https://obsidian.md/) to contribute to the site; all files are pure Markdown. We're currently working on resources for site contributors. + +Our [Discord](https://discord.gg/TYwr4pMS2h) is a good place to ask questions and connect with other contributors. We also have a [Twitter](https://twitter.com/uncloakcrypto) account for site-related announcements. Questions for the site maintainer should be directed at thorck a-squiggle pm dot me. + +The Obsidian-Publish mobile site is unfortunately unable to display the desktop-only interactive graph. + +[[Topic-Cryptography|Click here, or on the graph, to continue to the site root node on cryptography]]. + +## Tips for making best use of the site +If you've ever rabbit-holed on Wikipedia and thought, "oh that went pretty well, but the relationship between those concepts is still a little unclear" then you basically already know what the site is about. This site aims to address the complaint that it can be difficult to know where a particular concept or tool fits in context. Hyperlinks between typical wiki pages demonstrate connections between concepts, but without much context. The graph is an attempt at generating that context. + +To see this in action, take a look at the path from [[Topic-Number Theory]] to the [[Algorithm-Extended Euclidean Algorithm]]. If you're viewing this from the website, you can see the path traverses [[Set-Integers]] and [[Algorithm-Euclidean Algorithm]]. The path between nodes and the system of node categorization is how the site attempts to put these concepts in context. + +*Nit-pickers: yes, the extended euclidean algorithm can be applied to objects other than integers, and no, the structure of the graph is not final. Open a PR to propose updates to nodes and alternative organizing structures. Pedantry and nitpicking are welcome, we would appreciate your help.* + +Each page includes **forward-links** and **backlinks** (you can find backlinks at the bottom of the page in the section titled "Links to this page"). The prior paragraph contains 5 forward links; no other page in the wiki links to the README, so there are no backlinks for this page, but *every other node* in the wiki is linked to by at least one other node. + +**A rule of thumb:** To navigate the graph structure, traveling *forward* links, especially those at the bottom of a page, generally direct the reader *toward the edges of the graph*, where knowledge may be more specific and technical. Traveling *backlinks* returns the reader toward the *central root*, and higher-level topic discussion. + +The site graph can sometimes be a bit messy; pages are also organized by folders, representing what primary topics the page falls under. Folders can be navigated in the left sidebar. The sidebar also contains a search bar, for readers who already have some idea of what information they're trying to find. + +Similar to Wikipedia, hovering over any site-internal link will produce a modal pop-up with the contents of that resource. This works recursively; you can produce nested pop-ups by hovering over links in the pop-up. + +The *global graph* feature on the website is buggier than the desktop *global graph*, sometimes refusing to render. If you clone the [Github](https://github.com/thor314/uncloak) and open the graph as an Obsidian vault (requires downloading Obsidian, which is free), you can even see the entire graph structure by calling the function `Graph view: Open Graph View`. + +Optionally, for more on using Obsidian, consult the Uncloak Obsidian Usage guide (todo). + +## Contributor Guide +For more on contributing, see [[Topic-Meta]]. + +## How to give +The site would not be possible without the support of grants and donations. The site maintainer works full time on improving site content, alongside volunteer contributors. + +If you would like to support the continued growth of the site, consider donating. Some addresses are managed through Kraken, which may include a minimum deposit. + +We also participate in [Gitcoin Grants](https://gitcoin.co/grants/9478/uncloak-cryptography) rounds. The next round is anticipated to start in late November; we will make an announcement on the [Uncloak Twitter](https://twitter.com/uncloakcrypto) when the round is beginning. +- [Patreon](https://www.patreon.com/uncloak/membership) +- Paypal: @thorck (may be challenged for last 4 cell digits: 7582) +- Venmo: @cryptograthor +- Eth/Polygon/Optimism/Arbitrum/zkSync: 0xaE72f891Fc9914b13a90cbED799ee73359077bee +- Bitcoin: 3JyCwpwpUkXRiiQQqQ2fq3omvLZF1Jtz4N (min deposit: 0.0001 BTC) +- Cosmos: cosmos15lescyy00y6v8nz5ujxn4ry3wpltxklr30pd22 (min deposit: 1 ATOM) +- Polkadot: 13Mpe6FR2Tm968QpH62WMTaafwpqePaJXpxwvXbitBu7xwyx (min deposit: 1 DOT) +- Solana: 6SBQGqhfnazaEQQycvk2MSbNtgjwhTK8TgrujNxBgsW (min deposit: 0.01 SOL) +- Monero: 8ARaWkq7BBm3EMoRxg635qA3V1VZLzwbaWGqNvCxyDf28SFpgH3prxUduhtSaKFFsDg69HFqNMGxxJJZJ5Zk4G7NVmuvePC (min deposit: 0.1 XMR) +- Zcash: t1bMzCnGkCz5SYGmnpAnTn6SRECvuwdiv5X (min deposit: 0.00500 ZEC) \ No newline at end of file diff --git a/Topic-Cryptography.md b/Topic-Cryptography.md new file mode 100644 index 0000000..97773e5 --- /dev/null +++ b/Topic-Cryptography.md @@ -0,0 +1,22 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Cryptography +## Intro +**Cryptography** (also cryptology) is the practice and study of secure techniques for private communication, authentication, and computation in the presence of adversarial behavior. + +Cryptography comes from the Greek root words *kryptos*, meaning hidden, and *graphikos*, meaning writing. + +## Subtopics +- [[Topic-Hash Functions]] +- [[Topic-Encryption]] +- [[Topic-Cryptanalysis]] +- [[Topic-Zero Knowledge]] +- [[Topic-Cryptography Engineering]] +- [[Topic-Cryptography Aphorisms]] +- [[Topic-Cryptography Related Topics]] +- [[Topic-Post Quantum Cryptography]] +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Cryptography) \ No newline at end of file diff --git a/aphorism/Aphorism-Don't Roll Your Own Crypto.md b/aphorism/Aphorism-Don't Roll Your Own Crypto.md new file mode 100644 index 0000000..1b31c3e --- /dev/null +++ b/aphorism/Aphorism-Don't Roll Your Own Crypto.md @@ -0,0 +1,10 @@ +--- +publish: true +audience: all +--- +#aphorism +# Aphorism: Don't Roll Your Own Crypto +## Intro + + +## Related \ No newline at end of file diff --git a/aphorism/Aphorism-Kerckhoffs's Principle.md b/aphorism/Aphorism-Kerckhoffs's Principle.md new file mode 100644 index 0000000..de67577 --- /dev/null +++ b/aphorism/Aphorism-Kerckhoffs's Principle.md @@ -0,0 +1,12 @@ +--- +publish: true +audience: all +--- +#aphorism +# Aphorism: Kerckhoffs's Principle +## Intro +A cryptosystem should be secure, even if everything about the system, except the key, is public knowledge. + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Kerckhoffs%27s_principle) +- [[Aphorism-Shannon's Maxim]] \ No newline at end of file diff --git a/aphorism/Aphorism-Shannon's Maxim.md b/aphorism/Aphorism-Shannon's Maxim.md new file mode 100644 index 0000000..079bc37 --- /dev/null +++ b/aphorism/Aphorism-Shannon's Maxim.md @@ -0,0 +1,11 @@ +--- +publish: true +audience: all +--- +#aphorism +# Aphorism: Shannon's Maxim +## Intro +"The enemy know's the system", or "one ought to design systems under the assumption that the enemy will immediately gain full familiarity with them." An algorithm's level of security can only stay the same or decrease with time, as improvements to attacks are discovered. + +## Related +[[Aphorism-Kerckhoffs's Principle]] \ No newline at end of file diff --git a/aphorism/Topic-Cryptography Aphorisms.md b/aphorism/Topic-Cryptography Aphorisms.md new file mode 100644 index 0000000..3e1f8a6 --- /dev/null +++ b/aphorism/Topic-Cryptography Aphorisms.md @@ -0,0 +1,14 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Cryptography Aphorisms +## Intro + +## Objects +- [[Aphorism-Don't Roll Your Own Crypto]] +- [[Aphorism-Kerckhoffs's Principle]] +- [[Aphorism-Shannon's Maxim]] + +## Subtopics \ No newline at end of file diff --git a/cryptanalysis/Attack Type-Brute Force.md b/cryptanalysis/Attack Type-Brute Force.md new file mode 100644 index 0000000..8da3cd7 --- /dev/null +++ b/cryptanalysis/Attack Type-Brute Force.md @@ -0,0 +1,11 @@ +--- +publish: true +audience: all +--- +#object/attack-type + +# Attack Type: Brute Force + + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Brute-force_attack) \ No newline at end of file diff --git a/cryptanalysis/Attack Type-Collision Attack.md b/cryptanalysis/Attack Type-Collision Attack.md new file mode 100644 index 0000000..f0fc9be --- /dev/null +++ b/cryptanalysis/Attack Type-Collision Attack.md @@ -0,0 +1,10 @@ +--- +publish: true +audience: all +--- +#object/attack-type +# Attack Type: Collision Attack + + +## Related: +- [Wikipedia Article](https://en.wikipedia.org/wiki/Collision_attack) \ No newline at end of file diff --git a/cryptanalysis/Attack Type-Frequency Analysis.md b/cryptanalysis/Attack Type-Frequency Analysis.md new file mode 100644 index 0000000..acfbd79 --- /dev/null +++ b/cryptanalysis/Attack Type-Frequency Analysis.md @@ -0,0 +1,10 @@ +--- +publish: true +audience: all +--- +#object/attack-type +# Attack Type: Frequency Analysis + + +## Related: +- [Wikipedia Article](https://en.wikipedia.org/wiki/frequency_analysis) \ No newline at end of file diff --git a/cryptanalysis/Attack Type-Length Extension Attack.md b/cryptanalysis/Attack Type-Length Extension Attack.md new file mode 100644 index 0000000..456e516 --- /dev/null +++ b/cryptanalysis/Attack Type-Length Extension Attack.md @@ -0,0 +1,10 @@ +--- +publish: true +audience: all +--- +#object/attack-type +# Attack Type: Length Extension Attack + + +## Related +[Wikipedia Article](https://en.wikipedia.org/wiki/Length_extension_attack) \ No newline at end of file diff --git a/cryptanalysis/Attack Type-Rainbow Table.md b/cryptanalysis/Attack Type-Rainbow Table.md new file mode 100644 index 0000000..b7b18e3 --- /dev/null +++ b/cryptanalysis/Attack Type-Rainbow Table.md @@ -0,0 +1,10 @@ +--- +publish: true +audience: all +--- +#object/attack-type +# Attack Type: Rainbow Table + + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Rainbow_table) \ No newline at end of file diff --git a/cryptanalysis/Topic-Cryptanalysis.md b/cryptanalysis/Topic-Cryptanalysis.md new file mode 100644 index 0000000..ed9211c --- /dev/null +++ b/cryptanalysis/Topic-Cryptanalysis.md @@ -0,0 +1,19 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Cryptanalysis +## Intro + +## Subtopics + +## Objects +- [[Attack Type-Brute Force]] +- [[Attack Type-Rainbow Table]] +- [[Attack Type-Collision Attack]] +- [[Attack Type-Frequency Analysis]] +- [[Attack Type-Length Extension Attack]] + +## Related +- [Wikipedia article](https://en.wikipedia.org/wiki/Cryptanalysis) \ No newline at end of file diff --git a/cryptography engineering/Topic-Cryptography Engineering.md b/cryptography engineering/Topic-Cryptography Engineering.md new file mode 100644 index 0000000..b250829 --- /dev/null +++ b/cryptography engineering/Topic-Cryptography Engineering.md @@ -0,0 +1,12 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Cryptography Engineering +## Intro + +## Subtopics + +## Related +- Recommended Resource: [Cryptography Engineering: Design Principles and Practical Applications: Ferguson, Niels, Schneier, Bruce, Kohno, Tadayoshi](https://www.amazon.com/Cryptography-Engineering-Principles-Practical-Applications/dp/0470474246) \ No newline at end of file diff --git a/encryption/Topic-Encryption.md b/encryption/Topic-Encryption.md new file mode 100644 index 0000000..2ee2741 --- /dev/null +++ b/encryption/Topic-Encryption.md @@ -0,0 +1,38 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Encryption +## Intro +**Encryption** and decryption is process of algorithmically hiding and unhiding information. Cryptography terms the original message the [plaintext](https://en.wikipedia.org/wiki/Plaintext), and the encrypted message [ciphertext](https://en.wikipedia.org/wiki/Ciphertext), [cipher](https://en.wikipedia.org/wiki/Cipher) being the historical word for a [[Topic-Symmetric Encryption|symmetric encryption algorithm]]. Encryption is often described in a message passing context between two parties, but includes the hiding of static information, as in the case of [Disk Encryption](https://en.wikipedia.org/wiki/Disk_encryption) . + +Encryption can be broadly categorized into two categories: symmetric encryption and [[Topic-Asymmetric Encryption|asymmetric encryption]] (public key encryption). Symmetric encryption algorithms require both the encrypter and decrypter to have access to the same information, a shared key. In asymmetric key cryptography, the receiving decrypter holds a secret key (known only to the decrypter), while the encrypter uses the receiving party's public key (which may be published online, or distributed in any way). + +```mermaid +sequenceDiagram +participant Alice +participant Bob +Note over Alice, Bob: Symmetric Encryption +Alice ->> Bob: ciphertext=Encrypt(message,key) +Note right of Bob: m=Decrypt(c, k) + +Note over Alice, Bob: Asymmetric Encryption +Alice ->> Bob: c=E'(m, Bob public key) +Note right of Bob: message=D'(c, Bob secret key) +``` + +Symmetric key encryption is at least as old as Julius Caesar, who was said to use a rotation cipher, termed the [Caesar Cipher](https://en.wikipedia.org/wiki/Caesar_cipher), to conceal his messages from enemy soldiers circa 69 BCE[^1]. + +Asymmetric Key encryption is a significantly more recent invention: it was simultaneously conceived of by [James H. Ellis](https://en.wikipedia.org/wiki/James_H._Ellis) of the British intelligence agency GCHQ between 1970-1974, and by [Whitfield Diffie](https://en.wikipedia.org/wiki/Whitfield_Diffie) and [Martin Hellman](https://en.wikipedia.org/wiki/Martin_Hellman) in their 1976 paper [New Directions in Cryptography](https://ieeexplore.ieee.org/document/1055638). The discovery by GCHQ was not disclosed until 1997[^2]. + +## Subtopics +- [[Topic-Symmetric Encryption]] +- [[Topic-Asymmetric Encryption]] + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Encryption) + +## References +[^1]: [Suetonius, Vita Divi Julii](http://thelatinlibrary.com/suetonius/suet.caesar.html#56) +[^2]: [GCHQ: James Ellis](https://www.gchq.gov.uk/person/james-ellis) \ No newline at end of file diff --git a/encryption/asymmetric encryption/Topic-Asymmetric Encryption.md b/encryption/asymmetric encryption/Topic-Asymmetric Encryption.md new file mode 100644 index 0000000..f25f186 --- /dev/null +++ b/encryption/asymmetric encryption/Topic-Asymmetric Encryption.md @@ -0,0 +1,12 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Asymmetric Encryption +## Intro + +## Subtopics + +## Related +- [Wikpedia Article](https://en.wikipedia.org/wiki/Public-key_cryptography) \ No newline at end of file diff --git a/encryption/symmetric encryption/Topic-Symmetric Encryption.md b/encryption/symmetric encryption/Topic-Symmetric Encryption.md new file mode 100644 index 0000000..52ad251 --- /dev/null +++ b/encryption/symmetric encryption/Topic-Symmetric Encryption.md @@ -0,0 +1,15 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Symmetric Encryption +## Intro + +## Subtopics +- [[Topic-Historical Ciphers]] +- [[Topic-Block Ciphers]] +- [[Topic-Stream Ciphers]] + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Symmetric-key_algorithm) \ No newline at end of file diff --git a/encryption/symmetric encryption/block ciphers/Topic-Block Ciphers.md b/encryption/symmetric encryption/block ciphers/Topic-Block Ciphers.md new file mode 100644 index 0000000..9a64a79 --- /dev/null +++ b/encryption/symmetric encryption/block ciphers/Topic-Block Ciphers.md @@ -0,0 +1,15 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Block Ciphers +## Intro + + +## Objects +- +## Subtopics + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/https://en.wikipedia.org/wiki/Block_cipher) \ No newline at end of file diff --git a/encryption/symmetric encryption/historical ciphers/Algorithm-Caesar Cipher.md b/encryption/symmetric encryption/historical ciphers/Algorithm-Caesar Cipher.md new file mode 100644 index 0000000..dc915c6 --- /dev/null +++ b/encryption/symmetric encryption/historical ciphers/Algorithm-Caesar Cipher.md @@ -0,0 +1,20 @@ +--- +publish: true +audience: all +date-origin: ~69 BCE +date-broken: ? +--- +#object/algorithm +# Algorithm: Caesar Cipher +## Intro + +## Relation to Similar Algorithms + +## Attacks + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Caesar_cipher) +- [[Attack Type-Brute Force]] +- [[Attack Type-Frequency Analysis]] + +## References diff --git a/encryption/symmetric encryption/historical ciphers/Algorithm-Substitution Cipher.md b/encryption/symmetric encryption/historical ciphers/Algorithm-Substitution Cipher.md new file mode 100644 index 0000000..1604933 --- /dev/null +++ b/encryption/symmetric encryption/historical ciphers/Algorithm-Substitution Cipher.md @@ -0,0 +1,20 @@ +--- +publish: true +audience: all +date-origin: ? +date-broken: ? +--- +#object/algorithm +# Algorithm: Substitution Cipher +## Intro + +## Relation to Similar Algorithms + +## Attacks + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Substitution_cipher) +- [[Attack Type-Brute Force]] +- [[Attack Type-Frequency Analysis]] + +## References \ No newline at end of file diff --git "a/encryption/symmetric encryption/historical ciphers/Algorithm-Vign\303\250re cipher.md" "b/encryption/symmetric encryption/historical ciphers/Algorithm-Vign\303\250re cipher.md" new file mode 100644 index 0000000..4d85fe6 --- /dev/null +++ "b/encryption/symmetric encryption/historical ciphers/Algorithm-Vign\303\250re cipher.md" @@ -0,0 +1,19 @@ +--- +publish: true +audience: all +date-origin: 1500s +date-broken: 1863 +--- +#object/algorithm +# Algorithm: Vignère Cipher +## Intro + +## Relation to Similar Algorithms + +## Attacks + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher) +- [[Attack Type-Frequency Analysis]] + +## References \ No newline at end of file diff --git a/encryption/symmetric encryption/historical ciphers/Topic-Historical Ciphers.md b/encryption/symmetric encryption/historical ciphers/Topic-Historical Ciphers.md new file mode 100644 index 0000000..9cd4402 --- /dev/null +++ b/encryption/symmetric encryption/historical ciphers/Topic-Historical Ciphers.md @@ -0,0 +1,14 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Historical Ciphers + +## Nodes +- [[Algorithm-Caesar Cipher]] +- [[Algorithm-Substitution Cipher]] +- [[Algorithm-Vignère cipher]] + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Cipher) \ No newline at end of file diff --git a/encryption/symmetric encryption/stream ciphers/Topic-Stream Ciphers.md b/encryption/symmetric encryption/stream ciphers/Topic-Stream Ciphers.md new file mode 100644 index 0000000..e0c7ac0 --- /dev/null +++ b/encryption/symmetric encryption/stream ciphers/Topic-Stream Ciphers.md @@ -0,0 +1,14 @@ +--- +publish: true +category: topic +audience: all +--- +# Topic: Stream Ciphers +## Intro + +## Objects +- +## Subtopics + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Stream_cipher) \ No newline at end of file diff --git a/hash functions/Algorithm-MD5 Hash.md b/hash functions/Algorithm-MD5 Hash.md new file mode 100644 index 0000000..bd98afb --- /dev/null +++ b/hash functions/Algorithm-MD5 Hash.md @@ -0,0 +1,25 @@ +--- +publish: true +audience: all +date-origin: 1992-04 +date-broken: 2008-12 +--- +#object/algorithm +# Algorithm: MD5 Hash Function +## Intro +MD5 is a broken (since 2008), but widely used [[Term-Cryptographic Hash Function|cryptographic hash function]] with a 128-bit [[Term-Digest|digest]]. MD5 is vulnerable to [[Attack Type-Collision Attack|collision]] and [[Attack Type-Length Extension Attack|length extension]] attacks. + +## Relation to Similar Algorithms + +## Attacks + +## Related +- [Wikipedia article](https://en.wikipedia.org/wiki/MD5) +- succeeds: [MD4](https://en.wikipedia.org/wiki/MD4) +- succeeded by: [MD6](https://en.wikipedia.org/wiki/MD6) +- [[Attack Type-Length Extension Attack]] +- [[Attack Type-Collision Attack]] + +## References +- Source: [RFC 1321 - The MD5 Message-Digest Algorithm](https://datatracker.ietf.org/doc/html/rfc1321) +- 2008-12 Vulnerability Notice: [VU#836068 - MD5 vulnerable to collision attacks](https://www.kb.cert.org/vuls/id/836068) \ No newline at end of file diff --git a/hash functions/Security Model-Random Oracle Model.md b/hash functions/Security Model-Random Oracle Model.md new file mode 100644 index 0000000..aa1a155 --- /dev/null +++ b/hash functions/Security Model-Random Oracle Model.md @@ -0,0 +1,10 @@ +--- +publish: true +audience: all +--- +#model/security-model +# Security Model: Random Oracle Model +## Intro + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Random_oracle) \ No newline at end of file diff --git a/hash functions/Term-Cryptographic Hash Function.md b/hash functions/Term-Cryptographic Hash Function.md new file mode 100644 index 0000000..f67846d --- /dev/null +++ b/hash functions/Term-Cryptographic Hash Function.md @@ -0,0 +1,10 @@ +--- +publish: true +audience: all +--- +#term +# Term: Cryptographic Hash Function + + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Cryptographic_hash_function) \ No newline at end of file diff --git a/hash functions/Term-Digest.md b/hash functions/Term-Digest.md new file mode 100644 index 0000000..4ed54c6 --- /dev/null +++ b/hash functions/Term-Digest.md @@ -0,0 +1,7 @@ +--- +publish: true +audience: all +--- +#term +# Term: Digest +A **digest** is the output of a hash function. \ No newline at end of file diff --git a/hash functions/Topic-Hash Functions.md b/hash functions/Topic-Hash Functions.md new file mode 100644 index 0000000..7460ea4 --- /dev/null +++ b/hash functions/Topic-Hash Functions.md @@ -0,0 +1,14 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Hash Functions +## Intro + +## Nodes +- [[Term-Cryptographic Hash Function]] +- [[Algorithm-MD5 Hash]] +- [[Security Model-Random Oracle Model]] + +## Subtopics: \ No newline at end of file diff --git a/meta/Explanation-Node Categorization.md b/meta/Explanation-Node Categorization.md new file mode 100644 index 0000000..eb961f1 --- /dev/null +++ b/meta/Explanation-Node Categorization.md @@ -0,0 +1,130 @@ +--- +publish: true +audience: contributors +--- +#documentation/explanation +# Explanation: Node Categorization +*this note gives [discursive explanation](https://documentation.divio.com/explanation/) of the node categorization system. For the category [reference](https://documentation.divio.com/reference/), consult [[Reference-Node Categorization]]. Terms used here are still evolving, and may change. Last updated 2022-11-04, this note is subject to change*. + +The following node categorization attempts to simultaneously satisfy [a priori and empirical traditions](https://en.wikipedia.org/wiki/A_priori_and_a_posteriori) while serving the needs of researchers and practitioners. *Readers unfamiliar with the distinction between a priori and empirical models are encouraged to read the prior link introduction and example; the distinction is expanded on throughout the note*. + +The categorization system aims to achieve **simplicity, extensibility, flexibility, and intuitive legibility** in representing the knowledge dependency graph. + +Reading the following section should be sufficient to understand the Uncloak model for graph categorization. + +## Basic Node Categories +Each node will belong to one of the following categories. What follows is a short description of each category; a more in depth discussion and definition of each category will eventually be written in [[Reference-Node Categorization]]. + +There are presently **four** universally important node types for describing knowledge. **Statements**, **objects**, and **properties** are the atomic components for describing the knowledge-stuff, while **topics** give context for how the knowledge-stuff is generally organized and sourced. +- **Statement**: nodes that express some claim about some other node (possibly another statement). Statements are analogous to verbs. Important claims are likely to live on their own node, less important claims may live inside other nodes. Statements in the a priori tradition may be **proven or disproven**. If the a priori tradition is inapplicable, or unable to deliver a result (conjecture), we may default to the empirical tradition, where statements lie somewhere on the **spectrum from completely refuted to overwhelmingly supported** by data. **Data** is its own node type, as are **proofs**, see below. A statement may be **synthetic**, if the statement lies within both traditions. Empirical statements may be grouped together in **model** nodes. +- **Object**: nodes that describe things of interest. Objects are distinct from the statements and models that describe them, though these descriptive statements may live on an object node, and/or on adjacent statement nodes. Objects are often composed of other objects. Objects are analogous to nouns. The empirical tradition tends to work with **physical objects:** particles, phenomena, granite, radio waves, atoms, quarks, etc., while the a priori tradition tends to work with **propositional objects:** the trivial group, Euler's totient function, the Euclidean algorithm, the GKR protocol, linked lists, the set of natural numbers, the number zero. +- **Property**: nodes that describe features that a set of objects may have. Properties may be prescriptive or descriptive; they are more likely to be descriptive for **physical objects**, but prescriptive for **propositional objects** and **abstractions**. Properties are analogous to adjectives. +- **Topic**: effectively, containing categorizations for groups of nodes. Categorizations tend to be messy and may lack consensus; how to best represent this is an important question to answer, but our simple answer is to allow that **nodes may belong to more than one topic**. Topic nodes should serve as starting points for exploration of an area: they should describe important elements within the topic, and suggest paths through the topic for different audiences. The **root node** of a graph is a topic node. Every non-root node in the graph *must* include a dependency edge back to one or more (not entirely overlapping) topic nodes. The **root node** of a graph is the containing topic of all other nodes. + +Starting with these basic node types, we might begin to imagine a graph looking something like this: +```mermaid +flowchart TB +T1(Topic, eg Encryption) +T2(Another Topic, eg Hash Functions) +T1 --> a1[Object a1] +T1 --> a2[Object a2] +T2 --> a2 +a2 -.descendent.-> a3[Object a3] +a1 --> a1s1(Statement s1) +a1 --> a1s2(Statement s2) +a1 --> a1p1(Property p1) +a2 --> a1p1 +``` +With just a basic language for organizing the structure of knowledge, we can already begin to organize the relations between concepts in non-linear ways. The structure demonstrates that we may organize concepts into fields of study, which contain principal objects, about which we observe statements and properties. But we don't yet have a node type for demonstrating that a statement is true! + +There are two ways that we typically investigate whether a statement might be true: +- we may prove the statement from first principles (a priori reasoning) +- we may collect evidence about the statement, do experiments, and consider it's probability of being true (empirical reasoning) + +We can represent these two approaches to knowledge construction with a few new node types. In the a priori approach, we may add: +- **Proof**: nodes containing a proof of an a priori statement. For statements possessing only a single proof, an extending proof node is generally unnecessary, though there are statements possessing dozens or even hundreds of independent proofs. For these, the statement itself should highlight the most important proof or proofs and categorize the others while the proofs themselves are moved out to independent nodes. +- **Abstraction**: a set of objects prescriptively defined by a goal, or set of axioms. Algebraic structures like groups, rings, modules, fields, and categories are abstractions. The set of algorithms for finding primes is an abstraction over any particular algorithm. Complexity classes are abstractions. *This element could use some scrutiny*. + +Returning to our example, we might include a proof directly on the Statement s1 node, or we can show that statement s1 has multiple proofs. We might also represent an abstraction over objects a1 and a2. +```mermaid +flowchart TB +Ab(Abstraction) +Ab --> a1[Object a1] +Ab --> a2[Object a2] +a1 --> a1s1(Statement s1) +a1 --> a1p1(Property p1) +a2 --> a1p1 +a1s1 --> a1s1p1(Proof pr1) +a1s1 --> a1s1p2(Proof pr2) +``` + +The following node categories are particular to the empirical approach to knowledge generation. +- **Model**: nodes that unite a set of **empirical statements** into a single model. In the empirical tradition, a model is a collection of related statements, typically about some object. Whether a statement actually belongs within a model may be disputed; the graph representation may represent this by weighting *inclusion edges* between models and statements. +- **Data**: Empirical evidence supporting or rejecting a hypothesis are represented as data nodes. Some types of data include experimental results, natural phenomena, and events. A note on collision: natural phenomena may be considered as an object of consideration in itself, or as data toward a hypothesis. *this category distinction is currently unclear, but suggests that data may overlap objects in unpredictable ways.* + +Now we can group statements s1 and s2 together as a **model**, and gather evidence supporting or refuting the statements. +```mermaid +flowchart TB +T1(Topic, eg Encryption) +T1 --> a1[Object a1] +a1 --> a1s1 +a1 --> a1s2 +subgraph Model m1 +a1s1(Statement s1) +a1s2(Statement s2) +end +a1s1 --> d1(Data d1) +a1s1 --> d2(Data d2) +a1s2 --> d3(Data d3) +a1s2 --> d4(Data d4) +a1s2 --> d5(Data d5) +``` + +Organizing knowledge in this way gives a clear visual structure to demonstrate how we actually know that things are true. In the Uncloak graph, the structure is navigable with an interactive UI element. + +But in addition to clarifying the structure of how knowledge is *generated*, we may also use the graph approach to clarify how knowledge is *organized and used* by practitioners. To the end of making the graph useful for learners and practitioners, we introduce several further node types: +- **Tool, Library**: Nodes dedicated to particular tools, software libraries, and methods. Tool nodes aim to describe the tool, field of application, maturity, and relevant alternatives. More complete comparisons between tools may be given in **context** nodes. In addition to explanation, tool nodes may include [how-to guides](https://documentation.divio.com/how-to-guides/) on how to use the tool. Tool nodes should point at a set of object nodes, or a field node. **Tutorial** nodes are related, but focus more on the achievement of some goal than the description of some tool or method. +- **Tutorial**: Nodes dedicated to demonstrating how to achieve some goal. The inclusion of tutorials is an intentional departure from the Encyclopedia model. Sites like [Hackaday](https://hackaday.com/) and [Instructibles](https://www.instructables.com/) demonstrate the value in community sourced and maintained tutorials for technical practitioners at all levels. +- **Aphorism**: Nodes describing well-known principles, heuristics, sayings, rules of thumb, and generally, advice. The advice need [not be good or even correct](https://en.wikipedia.org/wiki/Security_through_obscurity), but should be generally recognized by the field. +- **Project**: Nodes describing institutions, labs, companies, and particular efforts. Projects can serve as examples for application areas of otherwise theoretical knowledge. *We'll eventually have to come up with rules preventing these from turning into marketing cesspits*. +- **Comparison**: Nodes aiming to make comparative analysis of a particular set of nodes, resources, or approach. Lists, flowcharts, tables, charts, etc. +- **Meta**: Nodes for self-referential pages, about the approach of this project. +- **Other**: For elements not anticipated. Some fields may require entirely other node types, though the basic coverage given here should be extensible to cover most other use-cases. + +There is explicitly **not a node type for people** (or places). References to other sites describing people will be allowed, but nodes on people [distract from the site purpose and invite vandalism](https://en.wikipedia.org/wiki/Wikipedia#Vandalism). + +Anticipating some likely questions, what constitutes something *important enough* to deserve its own node? What if a crap node that doesn't closely obey rules gets proposed and accepted? + +Inevitably, users will propose all sorts of content as potential nodes. Some crap nodes will exist, and may not closely follow the rules laid out here. This is fine. Crap nodes will inevitably have low engagement and participation, and we can weight these nodes as less important. Users may identify crap nodes as crap, and propose their deletion, or improve the node beyond the point of its being crap. Further, it is sometimes hard to differentiate between crap and a developing research direction, which suggest that the site should lean toward permissiveness of [type II errors](https://en.wikipedia.org/wiki/Type_I_and_type_II_errors). + +The above is a sufficient explanation of the different types of nodes for most readers. The remainder of the article gives further discussion on a priori versus empirical approaches to structuring knowledge. + +\ + +## On A Priori and Empirical Approaches +The author of this article immediately admits that he is neither an expert on metaphysics nor in empiricism. This discussion is intended to communicate the current perspective on the intersection of empirical and a priori approaches to knowledge. + +In the following discussion, I present a pair of object models and contrast them, to demonstrate directions for effective graph development in both knowledge traditions. + +### Similarity and Divergence +Constant in both approaches is the primary importance of **objects** and **statements**. Though the subject matter may vary, the identification, exploration, and study of objects seems appropriate as a model for all technical disciplines that I have considered. + +**Propositional objects** (algorithms, data structures, functions, sets, etc.) are defined by logical construction, while **physical objects** (particles, phenomena) are either obviously physical entities, or representative of a model for physical interaction (eg waves). The framing that these are *fundamentally similar*, in that they are expressible as objects, is a core insight. It simultaneously allows provable and unprovable (but empirically supportable) statements to be made, even *about the same objects*. This allows objects to serve as intermediary between the empirical and a priori traditions, even as they broadly diverge in other directions. Without a bridging concept for the two traditions, it would be impossible to simultaneously represent both traditions in the same graph. + +This is both an important, and somewhat obvious-in-retrospect insight, in that there are no other reasonable candidates for structured overlap between the two traditions. Methods for demonstrating the truth of statements are typically mutually exclusive between traditions. While the a priori tradition pursues ideal abstractions over propositional objects, the empirical tradition pursues increasingly accurate models for physical objects. The a priori tradition has little use for data, except where it may be put to use in proofs; the empirical tradition lives and dies by the capacity to recognize and prevent [systemic data bias](https://en.wikipedia.org/wiki/Replication_crisis). + +Keeping objects constant, approaches to constructing and validating statements across the two traditions generally diverge: for any statement, either a proof exists, or it's unclear whether one exists, and we need to collect data. A priori statements and their proofs tend to build on one another, toward a propositional cathedral of statements building on other statements, sometimes in unexpected ways from across disciplines. The a priori approach to increasingly tower abstracting objects over one another makes for tall, complex networks of objects, statements, and abstractions. + +Statements in empirical disciplines only rarely rely on other statements as evidence; more common is that several statements may rely on a particular data element as shared evidence. Unlike a priori fields, a single element of data is rarely overwhelming evidence, while a single proof is all a propositional statement requires to be regarded as *proven*. Statements in empirical fields may have several, even dozens of independent elements of data supporting, contextualizing, and refuting their validity. Statements in empirical fields are likely to have competing alternative hypotheses. Finally, empirical statements are likely to be grouped together into **models**, which may also compete with one another. + +\ + +\ + +## On the advantages of keeping a low bar for "is this statement significant enough for its own node?" +There are many, particularly for priori statements, where insignificant lemmas tend to modularly build on one another into significant theorems. A dependency graph is the best possible substrate for representing that structure. +Todo: Say more, give visual example. + +There should be a much higher friction barrier for proposing new elements and structural changes at the base of the tree, than for frontier probing researchers to proposing elements in the branches and leaves. This is an analogy to the researcher meta of trying to attain many citations: researchers who build a frontier of the tree that attracts further attention and effort have won at the researcher status game of "contributing something interesting" (and in a much more tangible way than chasing citations). +Todo: expand. + diff --git a/meta/Reference-Node Categorization.md b/meta/Reference-Node Categorization.md new file mode 100644 index 0000000..c84b116 --- /dev/null +++ b/meta/Reference-Node Categorization.md @@ -0,0 +1,143 @@ +--- +publish: true +audience: contributors +--- +#documentation/categorization +# Reference: Node Categorization +*this note gives a [reference](https://documentation.divio.com/reference/) to the node categorization system, as applied in cryptography. [[Explanation-Node Categorization|See explanation instead]]. Terms used here are still evolving, and may change. Last updated 2022-11-04, this note is rapidly changing*. + +What follows is an enumeration of the different node categories and subcategories, and expected content within. The categorization system presented is specialized for cryptography. + +## Things to address: +- How this node differs for All/Developer/Researcher Audiences +- What sections should all nodes of this category have? + +## working list of node types: +This list is subject to change. The node categorization system has grown to include examples of: +- topic +- object +- algorithm +- property +- term +- aphorism +- attack-type +- security model +- theorem +- lemma +But should incorporate + +## Object Types +Likely sections: +- Intro + - Visual object model (mermaid) + - date introduced, with source; and if applicable, date broken/deprecated with source + - Key definitions, informally stated +- Relation to similar objects +- Attacks +- Related Links + - Highlighted best pedagogical link + - Abstractions over this object + - Ancestors and successors to this object +- In depth (bifurcate out researcher and developer nodes if exceeding 500 words): + - historical information + - researcher-directed content + - formal definitions + - relevant theorems + - security model + - conjecture and discussion + - developer directed content + - common APIs + - libraries + - implementation details +- References + +### Algorithm +see above +### Data Structure +see above +## Topic +Likely sections: +- Intro + - Visual object model (mermaid) + - date introduced, with source; and if applicable, date broken/deprecated with source + - Key definitions, informally stated +- Relation to similar topics +- Attacks +- Highlighted objects +- Subtopics +- Related Links + - Highlighted best pedagogical link(s) +- In depth (bifurcate out researcher and developer nodes if exceeding 500 words): + - historical information + - researcher-directed content + - formal definitions + - relevant theorems + - security model + - conjecture and discussion + - developer directed content + - common APIs + - libraries + - implementation details +- References + +## Property +### Prescriptive Property + +### Descriptive Property + +## Abstraction +### Algebraic Structure + +### Abstract Algorithm + +## Proof +### Proof +### Disproof + +## Model +### Security Model + +## Data + +### Data + +### Attack + +### Experiment + +## Tool +### Tool + +### Library + +### Methodology + +## Tutorial +### Tutorial + +## Advice +### Heuristic + +### Axiom + +## Project +### Project + +### Company + +## Context +### List + +### Table + +### Flowchart + +### Graph + +### Cheatsheet + +## Meta +### Meta + +## Other +### Other \ No newline at end of file diff --git a/meta/Topic-Meta.md b/meta/Topic-Meta.md new file mode 100644 index 0000000..2aa518b --- /dev/null +++ b/meta/Topic-Meta.md @@ -0,0 +1,18 @@ +--- +publish: true +audience: contributors +--- +#topic +# Topic: Meta +The Meta area is for site discussion and documentation. Currently, resources here are a bit sparse, but we're very responsive in our [Discord](https://discord.gg/TYwr4pMS2h). The [[Explanation-Node Categorization]] is the best place to start. + +Documentation about the site should aim to follow the [Divio Documentation System](https://documentation.divio.com/introduction/) reference. + +todo: contributor guide + +### On site maintenance: +Note that the site is limited to 4GB of image content. Prefer using markdown tools like [mermaid](https://mermaid-js.github.io) over including images where possible. Convert all images to SVG before including them in files. Changes to this git repository do not automatically push to the site. This has to be done manually, until we get around to automating it. + +## Pages +- [[Explanation-Node Categorization]] +- [[Reference-Node Categorization]] \ No newline at end of file diff --git a/post quantum/Topic-Post Quantum Cryptography.md b/post quantum/Topic-Post Quantum Cryptography.md new file mode 100644 index 0000000..f341702 --- /dev/null +++ b/post quantum/Topic-Post Quantum Cryptography.md @@ -0,0 +1,12 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Post Quantum Cryptography +## Intro + +## Subtopics + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Post-quantum_cryptography) \ No newline at end of file diff --git a/related topics/Topic-Cryptography Related Topics.md b/related topics/Topic-Cryptography Related Topics.md new file mode 100644 index 0000000..c169be5 --- /dev/null +++ b/related topics/Topic-Cryptography Related Topics.md @@ -0,0 +1,17 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Cryptography Related Topics +## Intro + +## Subtopics +- [[Topic-Number Theory]] +- [[Topic-Coding Theory]] +- [[Topic-Group Theory]] +- [[Topic-Probability Theory]] +- [[Topic-Information Theory]] +- [[Topic-Elliptic Curves]] +- [[Topic-Complexity Theory]] +- [[Topic-Lattices]] \ No newline at end of file diff --git a/related topics/coding theory/Topic-Coding Theory.md b/related topics/coding theory/Topic-Coding Theory.md new file mode 100644 index 0000000..6ba0bb8 --- /dev/null +++ b/related topics/coding theory/Topic-Coding Theory.md @@ -0,0 +1,13 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Coding Theory +## Intro + +## Subtopics + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Coding_theory) +- Recommended resource: [Number theory explained from first principles](https://explained-from-first-principles.com/number-theory/) \ No newline at end of file diff --git a/related topics/complexity theory/Topic-Complexity Theory.md b/related topics/complexity theory/Topic-Complexity Theory.md new file mode 100644 index 0000000..c4ce4b5 --- /dev/null +++ b/related topics/complexity theory/Topic-Complexity Theory.md @@ -0,0 +1,13 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Complexity Theory +## Intro + +## Subtopics + + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Computational_complexity_theory) \ No newline at end of file diff --git a/related topics/elliptic curves/Topic-Elliptic Curves.md b/related topics/elliptic curves/Topic-Elliptic Curves.md new file mode 100644 index 0000000..7096ea1 --- /dev/null +++ b/related topics/elliptic curves/Topic-Elliptic Curves.md @@ -0,0 +1,14 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Elliptic Curves +## Intro + +## Objects + +## Subtopics + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Elliptic_curve) \ No newline at end of file diff --git a/related topics/group theory/Topic-Group Theory.md b/related topics/group theory/Topic-Group Theory.md new file mode 100644 index 0000000..97012ec --- /dev/null +++ b/related topics/group theory/Topic-Group Theory.md @@ -0,0 +1,12 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Group Theory +## Intro + +## Subtopics + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Group_theory) \ No newline at end of file diff --git a/related topics/information theory/Topic-Information Theory.md b/related topics/information theory/Topic-Information Theory.md new file mode 100644 index 0000000..c36f9c3 --- /dev/null +++ b/related topics/information theory/Topic-Information Theory.md @@ -0,0 +1,14 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Information Theory +## Intro + +## Subtopics + +## Objects + +## Related +- [Wikipedia article](https://en.wikipedia.org/wiki/Information_theory) \ No newline at end of file diff --git a/related topics/lattices/Topic-Lattices.md b/related topics/lattices/Topic-Lattices.md new file mode 100644 index 0000000..93949f9 --- /dev/null +++ b/related topics/lattices/Topic-Lattices.md @@ -0,0 +1,12 @@ +--- +publish: true +audience: all +--- +#topic +# Topic: Lattices +## Intro + +## Subtopics + +## Related +- [Wikipedia Article](https://en.wikipedia.org/wiki/Lattice_(group)) \ No newline at end of file diff --git a/related topics/number theory/Algorithm-Euclidean Algorithm.md b/related topics/number theory/Algorithm-Euclidean Algorithm.md new file mode 100644 index 0000000..3791195 --- /dev/null +++ b/related topics/number theory/Algorithm-Euclidean Algorithm.md @@ -0,0 +1,32 @@ +--- +publish: true +audience: all +date-origin: ? +--- +#object/algorithm +# Algorithm: Euclidean Algorithm +## Intro +The **Euclidean Algorithm** obtains the [[Property-Greatest-Common-Divisor|greatest common divisor]] of a pair of integers, $a,b$. + +## Definition +For $a,b\in \mathbb Z^+$, arbitrarily letting $a\ge b$, we may compute $\gcd(a,b)$: +1. Let $r_0=a, r_1=b$ . Let $i=1$. +2. Let $q_i$ be the largest integer such that: $r_{i-1}=r_i\cdot q_i+r_{i+1}\quad \text{with} \quad 0\le r_{i+1}