
Develop foundational understanding of group theory and elliptic curve theory, build elliptic curve cryptosystems and digital signature algorithms from finite fields to large-precision libraries, for real-world applications.
Explore how the integers under addition form an abelian group, with closure, associativity, identity, and inverses, while multiplication lacks inverses for many elements, unlike finite sets used in cryptography.
Define sets and groups, explain closure, associativity, identity, inverse, and optional commutative (abelian) property for cryptography foundations.
Explore finite groups with concrete examples: addition modulo four forms an abelian group, while multiplication modulo four fails due to missing inverses for some elements.
This theorem shows integers 1 to n-1 whose greatest common divisor with n is 1 form an abelian group under multiplication modulo n, with 1 as identity and inverses.
When N is prime, gcd(a,N) = 1 for all a less than N, producing the complete set of numbers relatively prime to N modulo N, as illustrated with seven.
Define finite groups and their order under a given operation. Illustrate modulo n addition and the group of units modulo n, and introduce the Euler phi function for counting elements.
Explore cyclic groups, their order, and generators using modulo 11 to show how a generator yields all elements and how a non-generator differs, foundational for elliptic curve cryptography.
Explore three theorems on primes and finite groups: cyclic unit groups modulo p, element orders dividing group size, and how φ counts generators.
Compute orders in the multiplicative group mod 5, show that 2 and 3 generate it, 1 and 4 do not, and that orders divide the group size.
Identify generators of a finite cyclic group by applying a subgroup theorem, use the subgroup HK to test candidates, and leverage prime factorization to speed up discrete logarithm checks.
Define the discrete logarithm problem in a group and explore its role in elliptic curve cryptography and Diffie-Hellman protocols, highlighting generators, brute-force attacks, and large groups.
Define an elliptic curve group over a finite field and explain point addition via lines and reflection, distinguishing between adding distinct points and doubling.
Visualize elliptic curve operations such as point addition and doubling on a well-known curve with an Ubuntu program. Observe line reflections, inverses, and abelian group properties like commutativity and associativity.
Define the elliptic curve discrete logarithm problem, where a generator g and a secret t yield a point D, and reversing this is computationally hard for 256-bit security.
Code elliptic curve operations in rust, including point addition, point doubling, and the path to multiplication, with finite field arithmetic, identity at infinity, and inverse via Fermat's theorem.
Build an elliptic curve cryptography library in Rust, defining a basic curve with A and B, and implement point addition, doubling, and multiplication over a finite field using big integers.
Explore finite field operations in Rust, applying test-driven development to implement and unit-test addition, multiplication, and multiplicative inverses using modular arithmetic, primes, and Fermat's little theorem.
Implement the top layer of elliptic curve cryptography in Rust, coding point addition and multiplication, with coordinates or identity and on-curve checks via y^2 = x^3 + 8x mod p.
Develop and validate elliptic curve point addition tests in Rust, verifying identity, inverses, and abelian group properties with cargo test.
Demonstrate adding opposite points on the elliptic curve yields the identity when x1 = x2 and y1 + y2 = 0, with a test using 16 and 5.
Implement elliptic curve point doubling in Rust by coding the operation, handling identity points, and refactoring into a reusable compute function, with tests validating correctness on the curve.
Demonstrates the double and add algorithm for elliptic curve point multiplication, using binary representation and conditional additions to efficiently compute multiples from a generator.
Explore the double-and-add implementation for elliptic curve scalar multiplication in Rust, using the generator, bitwise loops, and point additions to support digital signatures.
Debug and fix the elliptic curve doubling and add algorithm by reversing the bit-order, add asserts, and refactor to expose structures and functions for library use, with bitcoin curve testing.
Explore a secp256k1 curve example in Rust, detailing the constants p and n, the generator point, and the curve y squared equals x cubed plus seven, with scalar multiplication tests.
Identify and address the overlooked case where a point has an x coordinate and the other coordinate is zero, involving point doubling, the tangent line, and the identity.
Explore elliptic curve digital signature algorithm, used in Bitcoin, implemented in Rust, which signs messages with keys (r, s) to provide integrity, authentication, and non-repudiation via public and private keys.
Explore how the elliptic curve digital signature algorithm generates private and public keys, signs messages with a random k and hash, and verifies using r, s, and the public key.
We reorganize the elliptic curve cryptography library into a standalone crate named generic, exporting elliptic curve, finite field, and point structures for flexible use in digital signatures, version 0.1.9.
Implement elliptic curve digital signature in rust by generating private and public keys, using a random number generator and sha-256 hash to sign and verify message hashes.
Generate a private key as a random positive number within a bound, then derive the public key by multiplying the elliptic curve generator by the private key in Rust.
Describe the ecdsa sign method in rust, computing r from k·G and s from hash(m)+d·r, using k inverse mod q and finite field checks.
Learn to implement ecdsa verify method in rust by computing u1 and u2 from the signature and hash, forming p from the generator and public key, and verifying r value.
Explore ecdsa secp256k1 implementation in Rust, creating private and public keys, signing and verifying messages with sha-256, using a crate elliptic curve library, and testing tamper scenarios.
Review finite fields and elliptic curves in Rust, highlighting modular arithmetic, a Rust crate, and a digital signature algorithm with broader cryptographic applications.
This course teaches you how elliptic curve groups work together with finite fields and how to implement a Rust library from scratch to perform basic groups' operations. Additionally, you will learn how to use EC groups in digital signature algorithms and extend its usage to other crypto-systems. The course provides both: theoretical and practical examples on every topic that is discussed.
The course is divided into three main sections:
1. A theory section where I explain what finite cyclic groups are. In particular, we will see some theorems that will help us to understand, for example, why it is important to use a group with "prime order".
2. A practical implementation in Rust of the Elliptic Curve library using Finite Fields in the bottom layer. You can in this part additionally create your one GitHub repository and use it as a showcase to recruiters or firms.
3. A digital signature application of the elliptic curve library developed so far. This is the moment where you use everything together to build something that solves a real-world problem.
The intended audience consists of curious people who want to dive into cryptography, maybe for the first time, and those who want to increase their knowledge of them. I promise you that after finishing the course, you will not have any more fear when you see abbreviations such as "EC" and "DSA" and will be substantially more literate in cryptography and Rust.