commit fee16fc6e4760b2cb398b319291eda73fe70db62
parent 98823d0195bfdb8378598f4d5bf89e26600b18bd
Author: Andrew Laack <andrew@laack.co>
Date: Sat, 16 May 2026 00:32:25 -0500
Crypography notes, ocw lecture 1
Diffstat:
15 files changed, 134 insertions(+), 15 deletions(-)
diff --git a/docs/BlindSignature.md b/docs/BlindSignature.md
@@ -0,0 +1,27 @@
+# Blind Signature
+
+**Source:** [Blind Signatures for Untraceable Payments](https://chaum.com/publications/#z62xPL)
+
+**Definition:** A blind signature is a signature on a message that verifies something about it without leaking information about the content of the message to the signatory.
+
+## Analogy
+
+- Place a completed ballot in a carbon paper lined envelope that has the voter's credentials pre-printed on the outside of the envelope
+- A signatory verifies the credentials and signs the envelope
+ - This would generally amount to making sure the voter's credentials haven't already been used in this election
+ - Since the envelope is carbon lined, the signatory's signature is transferred to the ballot without them knowing the information on the ballot
+- This envelope is given back to the voter
+- The voter opens the envelope and places the signed ballot into an unmarked envelope
+- The voter anonymously sends the unmarked envelope to the election officiants
+- The officiants verify the signatures on each of the ballots and count and put them on display publicly
+ - Only the voter knows what is on their ballot, allowing some information to be placed on the ballot that is only identifiable by them, to verify their ballot was indeed counted, without anyone else knowing which one was theirs
+
+The value of this scheme is that 1) no one can link a vote with a voter 2) trust in signatories from voting officials ensures all votes are valid 3) since only the voter knows what is on their ballot, they can put private information on it, allowing them to validate their vote was counted once they are all displayed publicly.
+
+## Functions
+
+1) Signing function s' known to the signer with a corresponding publicly known inverse s, such that s(s'(x)) = x where s doesn't leak information about s'.
+ - There is a private way to sign a message that is publicly verifiable
+2) Commuting function c and its inverse c', known only to the provider (e.g. voter), such that c'(s'(c(x))=s'(x) and c(x) and s' give no information about x.
+ - I apply a function to my message, send it to the signatory, they sign it, I perform an inversion of the original function I performed on my message such that I am left with a signature on my original message without the signatory knowing what the message is.
+3) Redundancy checking predicate r, that checks for sufficient redundancy to make search for valid signatures impractical
diff --git a/docs/ChaumianECash.md b/docs/ChaumianECash.md
@@ -0,0 +1,27 @@
+# Chaumian eCash
+
+**Source:** [https://en.wikipedia.org/wiki/Ecash/](https://en.wikipedia.org/wiki/Ecash/)
+
+**Definition:** Chaumian eCash (or just eCash),
+
+## Details
+
+Chaumian eCash was introduced in the paper, "Blind Signatures for Untraceable Payments" by David Chaum in 1982.
+
+eCash was introduced as a payment system to provide a degree of privacy for payees while mitigating some negative externalities associated with privacy, like the lack of provable payments. The following are the main properties of this payment system:
+
+1) Inability for third parties to determine payee, time, or amount of payments made by an individual
+2) Ability to provide proof of payment, or to determine the identity of the payee under exceptional conditions
+3) Ability to stop the use of stolen payments
+
+## Limitations
+
+The depository may limit deposits and withdrawls.
+
+## Related Links
+
+- [Blind Signature](BlindSignature.md)
+
+## Relevant Sources
+
+- [Blind Signatures for Untraceable Payments](https://chaum.com/publications/#z62xPL)
diff --git a/docs/CoincidenceOfWants.md b/docs/CoincidenceOfWants.md
@@ -0,0 +1,5 @@
+# Coincidence of Wants
+
+**Source:** [https://en.wikipedia.org/wiki/Coincidence_of_wants](https://en.wikipedia.org/wiki/Coincidence_of_wants)
+
+**Definition:** The coincidence of wants is an economic phenomena describing a party's interest in the goods another party creates with the inverse being true as well.
diff --git a/docs/ComputerScience.md b/docs/ComputerScience.md
@@ -11,6 +11,8 @@ This is the index for my Computer Science related notes.
- [Probabilistic Robotics](ProbabilisticRobotics.md)
- [Information Retrieval](InformationRetrieval.md)
- [Operating Systems](OperatingSystems.md)
+- [Performance Engineering](PerformanceEngineering.md)
+- [Cryptography](Cryptography.md)
## Personal Interest
diff --git a/docs/Cryptocurrency.md b/docs/Cryptocurrency.md
@@ -0,0 +1,11 @@
+# Cryptocurrency
+
+**Source:** MIT MAS.S62 Cryptocurrency Engineering and Design L1
+
+**Definition:** Cryptocurrency is a digital asset that uses a digital ledger for tracking transactions.
+
+## Links
+
+- [Coincidence Of Wants](CoincidenceOfWants.md)
+- [Depository](Depository.md)
+- [Chaumian eCash](ChaumianECash.md)
diff --git a/docs/Cryptography.md b/docs/Cryptography.md
@@ -1,9 +1,13 @@
# Cryptography
-**Source:** Cryptography and Network Security
-
-**Chapter:** 1.6
+**Source:** Cryptography and Network Security / MIT MAS.S62 Cryptocurrency Engineering and Design
**Definition:** Cryptography is the transformation of data from one form to another.
-This can be thought of mathematically as a function.
+## Links
+
+- [Digital Signature](DigitalSignature.md)
+- [Blind Signature](BlindSignature.md)
+- [Cryptocurrency](Cryptocurrency.md)
+- [HashFunction](HashFunction.md)
+- [Lamport Signature](LamportSignature.md)
diff --git a/docs/Depository.md b/docs/Depository.md
@@ -0,0 +1,7 @@
+# Depository
+
+**Source:** [https://www.investopedia.com/terms/d/depository.asp/](https://www.investopedia.com/terms/d/depository.asp/)
+
+**Definition:** A depository is an institution that holds securities and assists in their trading.
+
+Intuitively, if I have 10 tons of wool, it is beneficial for me to trade a certificate of ownership for the wool instead of bringing the actual wool with me.
diff --git a/docs/DigitalSignature.md b/docs/DigitalSignature.md
@@ -4,6 +4,22 @@
**Chapter:** 1.6
+**Definition:** A digital signature is a value computed with an algorithm and data that outputs a deterministic signature to verify the origin and integrity of the data.
+## Functions
-**Definition:** A digital signature is a value computed with an algorithm and data that outputs a deterministic signature to verify the origin and integrity of the data.
+There are three necessary functions for digital signatures.
+
+1. publicKey, privateKey := GenerateKeys(randomSeed)
+2. signature := Sign(privateKey, message)
+3. valid := Verify(publicKey, message, signature)
+
+Anyone with the public key can verify a message and signature, only the person with the private key may sign a message.
+
+## Examples
+
+- [Lamport Signature](LamportSignature.md)
+
+## Links
+
+- [Blind Signature](BlindSignature.md)
diff --git a/docs/HashFunction.md b/docs/HashFunction.md
@@ -2,8 +2,6 @@
Ch. 5
-
-
**Definition:** A hash function is a function f(k) that takes a key value k (x.r = k where x is an object) and outputs a natural number.
f : K -> N where K is the set of all possible keys and N is the natural numbers.
@@ -38,3 +36,18 @@ A hash function is perfect if for all valid inputs, there are no collisions (one
$f:K \to N$ is a perfect hash function if
$\forall x,y\in K, f(x) \neq f(y) \text{ where } y \neq x$
+## In Cryptography
+
+The above is discussing hash functions within the context of [hashtables](HashTable.md), but expectations vary when using hash functions for cryptography.
+
+### Requirements for a good cryptographic hash function
+
+1. Deterministic
+2. Any size input results in a fixed size output
+3. Preimage resistance
+ - Given y such that hash(x) = y it shouldn't be reasonable to find x.
+4. 2nd preimage resistance
+ - Given x,y such that hash(x) = y it shouldn't be reasonable to find x' such that hash(x') = y.
+5. Collision resistance
+ - It isn't reasonable to find x != z such that hash(x) = hash(z)
+ - This was the broken expectation that led to sha-1 and md5 being considered insecure
diff --git a/docs/HashTable.md b/docs/HashTable.md
@@ -2,8 +2,6 @@
Ch 5
-
-
**Definition:** A hash table is a collection data structure that allows insertions of elements and checking for elements that uses a hashing function to place objects into an array for 'constant' time access.
Note that generally we use openaddressing (linear/quadratic probing), to ensure collisions are handled correctly. There is also the case where you might use a linked list, but in cs 303 we are not doing that, and python does not do that either.
diff --git a/docs/HashValues.md b/docs/HashValues.md
@@ -2,8 +2,6 @@
Ch 5
-
-
**Definition:** A hash value is the output of the hash function that describes which index we should try to place an element in.
Hash values can range from 0 - m-1 where m is the length of the array to store the element in.
diff --git a/docs/Hashing.md b/docs/Hashing.md
@@ -2,6 +2,4 @@
L4 - Ch5 (Rosen)
-
-
**Definition:** Hashing is a process done whereby we use some function f(x) to map one value to another where the output value is generally an index or otherwise adressable place.
diff --git a/docs/LamportSignature.md b/docs/LamportSignature.md
@@ -0,0 +1,9 @@
+# Lamport Signature
+
+**Source:** MIT MAS.S62 Cryptocurrency Engineering and Design L1
+
+**Definition:** Lamport
+
+## Specific
+
+TODO. (see mit-ocw code as reference, possibly link it too)
diff --git a/docs/PerformanceEngineering.md b/docs/PerformanceEngineering.md
@@ -0,0 +1,6 @@
+# Performance Engineering
+
+**Source:** MIT 6.172 Performance Engineering of Software Systems, Fall 2018
+
+## Links
+
diff --git a/docs/ProbingFunction.md b/docs/ProbingFunction.md
@@ -2,8 +2,6 @@
Ch 5
-
-
**Definition:** A probing function is a function that takes in an ordered pair of inputs, the first which is a hashcode and the second which is the iteration and outputs a position between 0 and m-1.
In the case of linear probing, the function takes in an input of the hashcode (address) and the iteration. It then returns the hashcode + iteration mod m-1, this ensures the next address is checked if the previous was occupied.