Giter Site home page Giter Site logo

core-program's Introduction

Core Program

A Foundation for Tomorrow's Open-Source ProgCrypto Contributors

Welcome to the Core Program curriculum repository, hosted by the Privacy and Scaling Explorations (PSE) team. This program covers the basics of programmable cryptography (ProgCrypto), including Zero-Knowledge Proofs (ZKPs), Fully Homomorphic Encryption (FHE), and Multiparty Computation (MPC). Our goal is to equip engineers and researchers to contribute to open-source cryptography projects.

Designed for programmers with limited cryptography knowledge, this self-learning curriculum helps them learn the fundamentals and prepares them to contribute to the open-source community.

Program Structure

2023 Curriculum

All materials and documents related to the 2023 curriculum are in the 2023 folder. These provide historical context and foundational content.

2024 Curriculum

The 2024 curriculum is currently being developed and can be found in the 2024 folder. We welcome contributions to this section.

Contribution

We encourage contributions to improve this content. Please follow these steps:

  1. Analyze the Content: Review the existing materials.
  2. Report Issues: Create an issue if you find errors or areas for improvement.
  3. Submit Pull Requests: Submit a pull request with your changes once you are confident they will be approved.

If an existing issue is not being worked on, feel free to address it and make a pull request.

Issue and Pull Request Templates

Templates for issues and pull requests are available under the .github directory. These templates will appear automatically when you create a new issue or pull request on GitHub.

core-program's People

Contributors

adrianmcli avatar nooma-42 avatar omahs avatar jae-cuz avatar nnsw3 avatar anthonymadia avatar emirsoyturk avatar jafcr avatar haopining avatar mojalil avatar s-ekai avatar

Stargazers

Lorenzo Giovenali avatar vito avatar cyanea avatar Rute Figueiredo avatar Michael Zaikin avatar Eugenio avatar Nilav Prajapati avatar Yuki2580 avatar Erik Rivera avatar Karthik Inbasekar avatar Luli.jsx avatar Alexis Wolfsdorf avatar jaewon avatar Strong Force avatar Roger Oporta  avatar  avatar Gelois avatar Swarnim Chandve avatar Yago Pajariño avatar Drennan avatar Alex Padilla avatar juana avatar Sebastian Giraudo avatar Jake Kim avatar Erick Vasquez avatar Daniel Arroyo (danielarroyo.eth) avatar Lorenz29 avatar jayssj11 avatar Kyaw Ye Thu avatar pinokey avatar Anoop Francis V H avatar Luz Alba Posse avatar Phakorn Kiong avatar Jimmy Chu avatar  avatar Maximiliano Santin avatar Haruki Kondo avatar Nathalia Barreiros avatar Alejandro Almaraz avatar casiojapi avatar Ricardo Bonilla Morales avatar 0xgtim avatar Arturo Beccar-Varela avatar Angela O avatar Sebastián Zeledón avatar Godspower Eze avatar Ginika Chinonso avatar Roberto Solano avatar zilong.dai avatar yawn avatar bati avatar Daniel Garbanzo avatar Takayuki Watanabe avatar Changmin Cho avatar akafuda avatar Wasabi avatar elmol avatar MARSUDTSEAL avatar  avatar c0np4nn4 avatar Bob Niu avatar Kurt Pan avatar Erhan avatar Sanghyun Kim avatar Joaquin Barrientos  avatar Steven avatar Juan Diego Carballo avatar Marco Araya Jiménez avatar  avatar Lucas Cardacci avatar avdhesh.eth avatar Be Red avatar  avatar SUBHASISH BEHERA avatar Musa AbdulKareem avatar Lucas Martin Calderon avatar ThreeHrSleep avatar Sachin D Agrawal avatar  avatar Chloe Zhu avatar Adetula Olamide avatar Khoa Nguyen avatar Jun Nakano avatar Thanee Charattrakool avatar Maxim Ryabykh avatar Phạm Gia Việt Anh avatar Steve Nguyen avatar John avatar Zk Lim avatar Egor Dergunov avatar Roy Chung-Cheng Lou avatar Tony Valentine avatar  avatar  avatar Aron yu avatar Terrance Chen avatar Harpreet Singh avatar Lane Rettig avatar Hao-Chen (Moven) Tsai avatar Chuan-Chun Wang avatar

Watchers

 avatar elmol avatar  avatar

core-program's Issues

De-emphasize Pinocchio Protocol + Emphasize PLONK

Summary

After some feedback from students and researchers, it was agreed that while the Pinocchio Protocol plays an important historical role, it's not necessary to work through its details. Instead, it is more important to place the focus on PLONK as it underscores much of the modern techniques being developed.

Location

  • Module Name: Module 4 - zkSNARKs
  • Section/Step: 3 and 4

Proposed Correction

  • Continue to mention the Pinocchio Protocol and highlight its historical importance (keep the links).
  • However, explain to the reader that it is not necessary to understand its technical details.
  • Expand the Section on PLONK.

Notes

We might want to break this up into two issues as it targets to items. However, if someone can correct both in one PR, then even better.

Organize existing module to different week folder

Summary

We need to organize existing module to different week folder, for example m2 m3 belongs to week 1

Location

  • Module Name:
  • Section/Step:

Proposed Correction

If you have a suggestion for how to fix the issue, please include it here.

Screenshots (if applicable)

Attach any screenshots that might help explain the issue.

Additional Context

Add any other information that might be helpful, such as links to related tutorials or explanations.

Add FAQs page for Core Program 2024

Summary

Include FAQs content for participants of the 2024 edition.

Location

https://github.com/privacy-scaling-explorations/core-program/tree/main/2024

Additional Context

The 2024 edition of the Core Program will be conducted in two regions: Asia and Latin America. The program follows a hybrid model in both regions, where students are expected to engage in self-preparation for four days a week. Additionally, they will attend an in-person event one day a week, dedicated to brainstorming, discussions, and analysis of presentations and assignments.

Add content from Stage 2 and Stage 3

Currently, only the Stage 1 curriculum is available.

We will need to add Stage 2 and Stage 3 as well (and explain what those are in the README).

More practical contente considering Rust as programming language

Summary

After a first look i can tell the contente is even better than expected. I personally wasn't aware of this program which i will take but since many of the projects developed by PSE use Rustas programming language for circuits (just to mention one example) would love to have it thinking that i would like in the future be part of PSE and a core contributor.

Location

  • Module Name: Modules 1 and 2
  • Section/Step:

Proposed Correction

Considering what was proposed on more practical stuff and including Rust, (just to mention a very popular library), lambdaworks is a library for kids (anyone) that wants to get their hand dirty and experiment from fields, groups, rings to more complex stuff like SNARKs and STARKs. 🦀

I want to repit that the content seems top notch and i want take this contribution program with the hope of getting an internship at PSE in the future if that's possible. ❤️

Add Section on ZKEmail

From Ayush:

For context for education, we do have a zk lecture that might be fitting! Specifically it's a one and a half hour onramp from basic set membership proofs all the way up to zkemail (zkiap.aayushg.com)

For uni students, more simple end to end crypto projects will be highest return. We have various project lists at aayushg.com/ideas > crypto (broader crypto ideas) and github.com/zkemail > ideas

Apart from zkiap.com, I've found many students internationallly don't know about basic courses, libgen, or scihub which are all critical

I.e.
6.857, applied cryptography, basic blockchains and hashing and zk: https://courses.csail.mit.edu/6.857/2022/handouts (only notes, no videos)

6.875, advanced theoretical cryptography guiding up to zk and lattices: http://mit6875.org/

Suggestions in Module 2

Summary

A few suggestions to guide crypto-newcomers easily understand materials!

Location

  • Module Name: Module 2
  • Section/Step: (mentioned with Italic)

Proposed Correction

  1. Public-Key Cryptography and Key Exchange Protocols : With RSA Public Key encryption mentioned above, it would be helpful to mention that DLP is another hard problem that constructs DH key exchange and ElGamal Encryption. Also, I suggest to change the section name to "DLP based Public Key Cryptography".

  2. Hash Functions & Merkle Trees : How about Hash Function section including Merkle Trees section? I suppose Merkle Tree is a usecase of hash function.

  3. Cryptographic Commitments : As Pederson commitment is a way more understandable than Polynomial Commitment, I suppose we should introduce the former first. Moreover, Polynomial Commitment contains concept of bilinear maps , so that it is introduced again in KZG Polynomial Commitments section in Module 3. Dropping this hard part in Module 2 would be another solution :)

  4. Digital Signatures : I mentioned in #4, suggesting to introduce DLP-Schnorr in Module 2. Also, describing the difference of commitment and signature would be helpful, too.

Sorry if you feel inconvinient reading my suggestions, but please kindly read comparing with the original article on the other side. (link)

Screenshots (if applicable)

Additional Context

Week Zero

Summary

Week Zero
Course Info
About This Course
Open-Source Culture, Git, and Github
How to ask questions, where to find help
How to submit your assignments (PR workflow)
Course FAQ
Knowledge
A Primer for ZKPs
Thought Experiments
Use-Cases and Applications
Supplemental materials on ZKPs [optional]
Number Theory

Location

  • Module Name:
  • Section/Step:

Proposed Correction

If you have a suggestion for how to fix the issue, please include it here.

Screenshots (if applicable)

Attach any screenshots that might help explain the issue.

Additional Context

Add any other information that might be helpful, such as links to related tutorials or explanations.

Mix theory and practice more

i.e. more coding in the initial modules, especially the theory heavy ones.

e.g. maybe we can start Circom a little earlier

2024 Curriculum Overhaul (WIP)

Summary

PSE EcoDev had a mini off-site session in February 2024 to work on overhauling the curriculum structure for 2024. The main changes are:

  1. Move easy sections to a "pre-requisite" module before program start.
  2. The "Practical Track" and "Study Track" will happen in parallel to encourage coding from the start.
  3. Certain concepts are "black-boxed" and links are placed in an optional section.
  4. Mini-hackathon will be placed in the middle of the program.

New Structure

0️⃣ Week 0 - Pre-requisite Module

Course Info

  • About This Course
  • Open-Source Culture, Git, and Github
  • How to ask questions, where to find help
  • How to submit your assignments (PR workflow)
  • Course FAQ

Knowledge

  • A Primer for ZKPs
  • Thought Experiments
  • Use-Cases and Applications
  • Supplemental materials on ZKPs [optional]
  • Number Theory

1️⃣ Week 1 - Cryptographic Basics

Practical

  • Getting Started with Circom (syntax + zkrepl)
  • Write a circuit to prove input to hash
  • Write a circuit to prove private key to public key
  • Write a circuit to prove inclusion in Merkle tree
  • Write a circuit to prove set membership

Study

  • Symmetric vs Asymmetric Encryption (AES, RSA)
  • Hash Functions, Merkle Trees
  • Digital Signatures (Schnorr)
  • DLP-based Public-Key Cryptography (DLP, DH, Elgamal)
  • Cryptographic Commitments
  • Intro to Elliptic Curve Cryptography
  • BLS Signatures (keep this simple and black-boxed)
  • Pairing-Based Cryptography (keep this simple and black-boxed)

2️⃣ Week 2 - More Crypto and zkSNARKs

Practical

  • Circom Crash Course (build from command line; ZKU course)
  • Write a circuit for a token mixer

Study

  • KZG Polynomial Commitments (keep this simple and black-boxed)
  • Trusted Setups (keep this simple and black-boxed; reference Inevitable Ethereum)
  • SNARKs and STARKs
  • SNARKs
    • From Computation to ZKPs (use only Vitalik's blog post; arithmetic circuits, R1CS, QAP)
    • Groth16 (keep this simple and black-boxed)
  • STARKs (follow Vitalik's blog posts)

3️⃣ Week 3 - Hackathon Week

4️⃣ Week 4 - PLONK Week

Practical

Study

  • PLONK (follow Vitalik's blogpost)
  • Publish a blogpost on PLONK and present at the end of week

5️⃣ Week 5 - The Frontier (Technologies and Applications)

Practical

  • Halo2 (do 0xParc course: Intro to Circuit Ex. Part 1, 6 hrs)
  • Halo2 Step by Step

Study

  • FHE
  • MPC
  • Semaphore, Bandada
  • TLSNotary
  • ZKEmail

Weeks 6 to 8

These remaining 3 weeks will be purely about contributing to Good First Issues.

Reference Pictures from Off-Site

Practical Track

2024-02-07 15 24 33

Study Track

2024-02-07 15 24 47

Group Tasks

There was a good amount of feedback suggesting group work in the program. I think that the group work should revolve around coding tasks and/or studying more complex material like Halo2 to foster more collaboration between students in the program.

Students can then present their coding tasks/projects or what they've learned in a group to the rest of the class.

Resources for Circom

Stage 1 was originally pure theory
Stage 2 was originally pure Circom practice

I think it makes sense to merge them into each other.

Distinguishing Schnorr signature

Summary

Schnorr signature based on traditional DLP and ECDLP are not distinguished.

Location

  • Module Name: Module 3
  • Section/Step: Schnorr Signatures

Proposed Correction

Schnorr signature was originally published based on traditional Discrete Logarithm Problem. EC(Elliptic Curve)-Schnorr was introduced later.
These two seems not to be distinguished strictly in several materials. Among 5 links of Schnorr signature in Module 3, two links describe DLP version while other links describe EC version.

Erasing DLP links would be one solution.
However I suggest the way to move DLP-Schnorr signature to Module 2, as we introduced only one digital signature scheme(DSA) in Module 2. (Historically, DSA is proposed with intent to avoid patent issue of original Schnorr signature.)

Please let me know if you have other opinion, and thanks for your hard work writing these helpful materials! 😄

Screenshots (if applicable)

image

Additional Context

schnorr vs ec-schnorr

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.