Range: 개발자가 알아야 할 정도 부터 ~ 조금 더 파보고싶다 수준

(물론 저도 일반 개발자와 ZK 코어 개발자 사이 어딘가에 있다고 생각하는 정도의 수준 정도입니다. 단지 ZK에 관심이 있어서 취미로 팠던 기간이 있기 때문에 그 때 경험으로 작성한다는 점 양해 부탁드립니다 . . .)

  1. 기초 암호학 & 수학이 필요합니다
    1. 필요한 수학 : 현대대수 및 선형대수 정도
    2. 필요한 컴퓨터과학: Time complexity + 알고리즘 이론(P/NP/PSPACE) 등등
    3. 필요한 암호학: DLP 및 Polynomial commitment 등등
    4. 필요한 프로그래밍 언어: Rust(증명 시스템은 거의 다 Rust로 만들어지는중) + ZKDSL
    5. 위의 것들은 대충 “이런 류의 지식들이 필요하다” 감을 잡으라는 것이지 전부 다 Delving 하면 ZK 공부를 시작조차 못할 수 있습니다. 대충 아 이런것들이 쓰이네 어떻게 쓰이지? 이정도만 알아주세요

(수학/컴퓨터과학 전공이 아니신 분들은 앞으로 많은 배경지식으로 인한 난항이 있을 수 있습니다. 그때그때 구글링 해서 부족한 부분을 찾아보시는 것을 추천합니다. 다시 말하지만 처음부터 배경지식부터 다 공부하는건 좋은 방법이 아닌 것 같습니다.)

  1. 입문
    1. https://product.kyobobook.co.kr/detail/S000200629765( 개인적으로는 블록체인 한다는 분들은 이정도는 쉽게 읽을 수 있지 않을까 생각합니다. 추가적으로 이 책 저자가 MINA protocol에서 근무하시는 블록체인 개발자-암호학 리서처 이십니다.)
    2. https://o1-labs.github.io/proof-systems/ (전반적인 내용이 괜찮습니다)
    3. https://leastauthority.com/static/publications/MoonMath080822.pdf( 쌩초보는 힘들 수 있습니다. 따라서 a를 읽는 것을 추천드립니다- groth 16이 어떻게 영지식성 및 보안성을 보장하는지 원리를 알 수 있습니다 ****)
    4. https://people.cs.georgetown.edu/jthaler/ProofsArgsAndZK.html (초보는 힘들 수 있습니다. 따라서 b를 읽는 것을 추천드립니다- 이것을 읽으면 대충 뭔지는 감이 옵니다. 개발자는 여기까지만 해도 될듯 합니다)
    5. https://www.youtube.com/watch?v=uchjTIlPzFo&list=PLS01nW3Rtgor_yJmQsGBZAg5XM4TSGpPs (넘사벽 강의입니다. a,b 읽고 들으시는거를 추천합니다.)
  2. 좀 더 파보고 싶다
    1. https://crypto.stanford.edu/~dabo/cryptobook/BonehShoup_0_6.pdf (ZK를 그렇게 많이 다루지는 않습니다. 하지만 Pairing 등 수학적 테크닉도 나오고 ZK에 쓰이는 cryptography가 많이 나왔었고 그냥 블록체인에 쓰이는 암호학은 거의 다 나온다고 생각하면 됩니다. ECDSA , 슈노어 스킴, MPC)
    2. https://eprint.iacr.org/2016/260.pdf (groth 16)
    3. https://eprint.iacr.org/2019/099 (sonic)
    4. https://eprint.iacr.org/2019/953.pdf (plonk)
    5. ZK는 발전 과정이 좀 뚜렷하게 보이기 때문에 이렇게 논문을 분석을 좀 해보시면 감이 잡힐 것 같습니다.( 좀 더 파보고싶다는 분들은 Security Analysis + STARK 까지 보시면 될 것 같습니다.)
    6. 그 외 여러 화이트보드 세션 + ZKEVM 코드 까보기
    7. https://static1.squarespace.com/static/5fdbb09f31d71c1227082339/t/5ff394720493bd28278889c6/1609798774687/PairingsForBeginners.pdf (Pairing 등 관련 수학, 암호학 더 공부하기)
  3. 1,2보다 좀 더 쉬운 길로 가고싶다
    1. ZK DSL 써보기(너무 많아서 따로 특정은 안하겠지만 추상화된 DSL로 ZKDSL로 ZK circuit 좀 짜보고 감 잡기)