คอร์สออนไลน์ด้านวิทยาการเข้ารหัสของ Dan Boneh (ปี 2017)
(crypto.stanford.edu)- เป็น คอร์สออนไลน์ด้านวิทยาการเข้ารหัสฟรี โดย Dan Boneh แห่ง Stanford University ซึ่งเผยแพร่รายการบรรยายทั้งหมด ส่วนแบบฝึกหัดอย่างเป็นทางการ โปรเจกต์ และข้อสอบปลายภาคมีให้บน Coursera
- ใช้ตำราเรียนฟรี A Graduate Course in Applied Cryptography ประกอบ โดยเสริมเนื้อหาที่ลึกกว่าการบรรยาย การพิสูจน์ความปลอดภัย และแบบฝึกหัด
- หลักสูตรต่อเนื่อง 7 สัปดาห์ ตั้งแต่ stream cipher ไปจนถึงลายเซ็นดิจิทัล โดยแต่ละสัปดาห์เชื่อมโยงกับบทในตำรา วิดีโอบรรยาย และสไลด์
- ครอบคลุม องค์ประกอบของการเข้ารหัสเชิงปฏิบัติ อย่างกว้างขวาง เช่น one-time pad, PRG, DES, AES, MAC, HMAC, TLS 1.2, Diffie-Hellman, RSA, ElGamal และลายเซ็นแบบอิงแฮช
- สามารถดูวิดีโอบรรยายแต่ละตอนผ่าน Coursera ได้ และหากต้องการการประเมินผลและใบรับรอง ให้ลงทะเบียนในคอร์สบน Coursera
วิธีเรียนและตำรา
- เป็นคอร์สออนไลน์ด้านวิทยาการเข้ารหัสที่สอนโดย Dan Boneh แห่ง Stanford University
- การบรรยายทั้งหมดของคอร์สฟรีถูกรวบรวมไว้ในหน้าเดียว
- หากต้องการเรียนอย่างเป็นทางการ รวมถึงแบบฝึกหัด โปรเจกต์ และข้อสอบปลายภาค ต้องใช้ หน้าคอร์สบน Coursera
- ตำราเรียนฟรีคือ A Graduate Course in Applied Cryptography โดย D. Boneh และ V. Shoup
- ครอบคลุมเนื้อหาที่ลึกกว่าการบรรยาย และมี การพิสูจน์ความปลอดภัย กับแบบฝึกหัดจำนวนมาก
สัปดาห์ที่ 1: ภาพรวมคอร์สและ stream cipher
- สัปดาห์ที่ 1 ตรงกับบทที่ 2–3 ของตำรา ครอบคลุม ภาพรวมคอร์ส พื้นฐานความน่าจะเป็นไม่ต่อเนื่อง และ stream cipher
- สไลด์มีให้ในหัวข้อ Introduction และ Stream ciphers
- การบรรยายหลัก:
- Course overview: 10 นาที
- What is cryptography: 15 นาที
- History of cryptography: 18 นาที
- Discrete probability (crash course): 18 นาที
- Information theoretic security and the one-time pad: 18 นาที
- Stream ciphers and pseudorandom generators: 19 นาที
- Attacks on stream ciphers and the one-time pad: 23 นาที
- Real-world stream ciphers: 19 นาที
- PRG security definition: 24 นาที
- Semantic security: 15 นาที
สัปดาห์ที่ 2: block cipher
- สัปดาห์ที่ 2 ตรงกับบทที่ 4–5 ของตำรา ครอบคลุม block cipher และวิธีใช้ block cipher
- สไลด์มีให้ในหัวข้อ Block ciphers และ Using block ciphers
- การบรรยายหลัก:
- What are block ciphers: 16 นาที
- The Data Encryption Standard (DES): 21 นาที
- Exhaustive search attacks: 19 นาที
- More attacks on block ciphers: 16 นาที
- The AES block cipher: 13 นาที
- Block ciphers from PRGs: 11 นาที
- Review: PRPs and PRFs: 11 นาที
- Modes of operation: one-time key: 7 นาที
- Security for many-time key (CPA security): 22 นาที
- Modes of operation: many-time key (CBC): 16 นาที
- Modes of operation: many-time key (CTR): 9 นาที
สัปดาห์ที่ 3: ความถูกต้องสมบูรณ์ของข้อความและแฮชที่ต้านทานการชนกัน
- สัปดาห์ที่ 3 ตรงกับบทที่ 6–8 ของตำรา ครอบคลุม message authentication code (MAC), การต้านทานการชนกัน และ HMAC
- สไลด์มีให้ในหัวข้อ Message integrity และ Collision resistant hashing
- การบรรยายหลัก:
- Message authentication codes: 15 นาที
- MACs based on PRFs: 9 นาที
- CBC-MAC and NMAC: 19 นาที
- MAC padding: 8 นาที
- PMAC and Carter-Wegman MAC: 15 นาที
- Generic birthday attack: 14 นาที
- The Merkle-Damgard paradigm: 11 นาที
- Constructing compression functions: 8 นาที
- HMAC: 7 นาที
- Timing attacks on MAC verification: 8 นาที
สัปดาห์ที่ 4: authenticated encryption และกับดักในการใช้งาน
- สัปดาห์ที่ 4 ตรงกับบทที่ 9 ของตำรา ครอบคลุม authenticated encryption และกับดักในการใช้ระบบเข้ารหัส
- สไลด์มีให้ในหัวข้อ Authenticated encryption และ Odds and ends
- การบรรยายหลัก:
- Active attacks on CPA-secure encryption: 12 นาที
- Definitions: 5 นาที
- Chosen ciphertext attacks: 12 นาที
- Constructions from ciphers and MACs: 20 นาที
- Case study: TLS 1.2: 17 นาที
- CBC padding attacks: 14 นาที
- Attacking non-atomic decryption: 9 นาที
- Key derivation: 13 นาที
- Deterministic encryption: 14 นาที
- Deterministic encryption: SIV and wide PRP: 20 นาที
- Tweakable encryption: 14 นาที
- Format preserving encryption: 12 นาที
สัปดาห์ที่ 5: key exchange และพื้นฐานทฤษฎีจำนวน
- สัปดาห์ที่ 5 ตรงกับบทที่ 10 ของตำรา ครอบคลุมปัญหา key exchange และพื้นฐานทฤษฎีจำนวน
- สไลด์มีให้ในหัวข้อ Basic key exchange และ Crash course in number theory
- การบรรยายหลัก:
- Trusted 3rd parties: 11 นาที
- Merkle puzzles: 11 นาที
- The Diffie-Hellman protocol: 19 นาที
- Public-key encryption: 10 นาที
- Notation: 14 นาที
- Fermat and Euler: 18 นาที
- Modular e'th roots: 17 นาที
- Arithmetic algorithms: 12 นาที
- Intractable problems: 18 นาที
สัปดาห์ที่ 6: การเข้ารหัสแบบกุญแจสาธารณะ
- สัปดาห์ที่ 6 ตรงกับบทที่ 11–12 ของตำรา ครอบคลุม trapdoor permutation, RSA และการเข้ารหัสแบบกุญแจสาธารณะที่อิง Diffie-Hellman
- สไลด์มีให้ในหัวข้อ Trapdoor permutation และ Diffie-Hellman
- การบรรยายหลัก:
- Definitions and security: 15 นาที
- Constructions: 10 นาที
- The RSA trapdoor permutation: 17 นาที
- PKCS1: 21 นาที
- Is RSA a one-way function?: 16 นาที
- RSA in practice: 13 นาที
- The ElGamal public-key system: 19 นาที
- ElGamal security: 13 นาที
- ElGamal variants with better security: 10 นาที
- A unifying theme: 11 นาที
- Farewell for now: 5 นาที
สัปดาห์ที่ 7: ลายเซ็นดิจิทัล
- สัปดาห์ที่ 7 ตรงกับบทที่ 13–14 ของตำรา ครอบคลุม ลายเซ็นดิจิทัล และลายเซ็นแบบอิงแฮช
- สไลด์มีให้ในหัวข้อ Digital signatures และ Hash-based signatures
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ตอนเป็นนักศึกษาที่ Stanford วิชา CS255 Intro to Cryptography เป็นหนึ่งในวิชาที่ผมชอบที่สุด และ Dan ก็เป็นอาจารย์ที่สอนได้ยอดเยี่ยมจริง ๆ
ถ้าต้องการสื่อการสอนด้านความปลอดภัยของ Stanford เพิ่ม ขอแนะนำ CS253 Web Security (https://web.stanford.edu/class/cs253/) ด้วย ขอเปิดเผยว่าผมเป็นคนสร้างวิชานี้เอง และ CS356 Topics in Computer and Network Security (https://cs356.stanford.edu/) ก็ใช้ได้เหมือนกัน
วิดีโอของ CS253 อยู่ที่นี่: https://www.youtube.com/playlist?list=PL1y1iaEtjSYiiSGVlL1cH...
เขามีพรสวรรค์มากและอธิบายแนวคิดได้ดีเยี่ยม
เมื่อไม่กี่ปีก่อนผมเคยเรียน คอร์สวิทยาการเข้ารหัสลับ ออนไลน์ของอาจารย์ท่านนี้ ซึ่งดีมาก
แม้ผมจะมีพื้นฐานคณิตศาสตร์ แต่หลังเรียนคอร์สนั้นก็รู้ตัวว่าไม่ได้อยากเป็นนักเข้ารหัสลับมืออาชีพ และแค่นั้นก็ถือว่าได้อะไรกลับมาค่อนข้างคุ้มแล้ว
ล้อเล่นไว้ก่อน วิธีวิเคราะห์ระบบเข้ารหัสเป็น เกมกับปีศาจ เพื่อพยายามแยกแยะไบต์ที่ถูกเข้ารหัสออกจากบิตสุ่มนั้นสนุกมากจริง ๆ
บทสรุปคืออย่า สร้างคริปโตเอง เพราะทำให้ถูกต้องนั้นยาก พูดแบบนี้ก็ค่อนข้างประชดประชัน แต่ก็ทำให้ความสนใจที่จะขุดลึกต่อของผมหายไปพอสมควร
เป็นคอร์สที่ยอดเยี่ยม แต่เวลาเรียนที่ประเมินไว้ 23 ชั่วโมง อาจแตกต่างกันมากตามความชำนาญเดิมในหัวข้อนี้
ควรเตรียมตัวและจัดจังหวะการเรียนโดยคำนึงถึงเรื่องนี้
ดูน่าสนใจ แต่คงดีถ้ามีสื่อที่สอนจากมุมมองผู้ปฏิบัติงานเกี่ยวกับ วิธีใช้ไลบรารีเข้ารหัสลับ โดยไม่เริ่มจากคณิตศาสตร์
ไม่ใช่ว่าต้องรู้โครงสร้างภายในของ RSA แต่ต้องรู้ว่าจะนำมันไปประกอบกับ primitive อื่น ๆ อย่างปลอดภัยเพื่อสร้างระบบที่มีคุณสมบัติตามต้องการได้อย่างไร
ตอนนี้อ่านไปประมาณสามในสี่แล้วและพอใจอยู่ หนังสือแตะคณิตศาสตร์แบบเบา ๆ แต่ก็มีบ้าง และดูเหมือนเขียนมาเพื่อคนที่ถ้าไม่เข้าใจการทำงานภายในก็จะใช้งานไม่ถนัด แต่ไม่ได้จำเป็นต้องลงมือทำ implementation ภายในจริง ๆ
ผมรู้สึกว่าหนังสือเล่มนี้ทำให้ผมเรียนรู้มากพอที่จะประกอบโปรโตคอลจาก primitive ต่าง ๆ ให้ดูเหมือนทำงานตามที่ตั้งใจไว้ได้ ขณะเดียวกันก็ได้เรียนรู้ด้วยว่ามีรายละเอียดปลีกย่อยมากมายที่สามารถทำให้โปรโตคอลพังทั้งระบบได้ การประกอบ primitive เข้าด้วยกันอาจสร้างจุดอ่อนที่ไม่คาดคิด และแม้แต่คนที่รู้เรื่องคริปโตมากกว่าผมมากก็ยังสร้างโปรโตคอลที่พังจาก primitive ที่ปลอดภัยได้
อาจไม่ใช่หนังสือที่คุณกำลังหา แต่ถ้าไม่ได้ตั้งใจจะออกแบบเอง แค่อยากเข้าใจคริปโต ผมว่ามันเป็นหนังสือที่ดี
เช่น ถ้าใช้ libsodium แบบเดียวกับที่นักพัฒนาคนอื่น ๆ อีก 100 คนทำสำเร็จมาแล้ว ก็โอเค แต่แค่ผ่านขั้นตอนเล็ก ๆ และละเอียดอ่อนเพียงไม่กี่ขั้น คุณก็อาจสังเคราะห์ระบบเข้ารหัสลับใหม่ขึ้นมาโดยไม่รู้ตัว ความพยายามสร้างระบบส่งข้อความปลอดภัยด้วย primitive ของ libsodium ก็เป็นตัวอย่างหนึ่ง
ต้องเรียนทฤษฎีให้มาก เรื่องนี้สำคัญ
เช่น: https://gist.github.com/tqbf/be58d2d39690c3b366ad หรือ https://www.latacora.com/blog/2018/04/03/cryptographic-right...
เขียนโดย Bruce Schneier, Niels Ferguson และ Tadayoshi Kohno
ส่วนสำคัญของวิทยาการเข้ารหัสลับสมัยใหม่คือการค้นหาวิธีประกอบที่ปลอดภัย
ในเธรดนี้ดูเหมือนหลายคนสนใจ การเรียนคริปโตแบบลงมือทำ โดยไม่เน้นทฤษฎี ถ้าเป็นกรณีนั้น ลองดู cryptopals.com ของ tptacek ซึ่งเป็น MVP ของ HN
ถ้าอยากฝึกเนื้อหาแบบนี้ในรูปแบบ CTF ขอแนะนำ https://cryptohack.org/ เป็นเว็บที่ยอดเยี่ยม
เป็นคอร์สที่ยอดเยี่ยมและมีบทบาทสำคัญต่อการเติบโตในอาชีพของผม
น่าสังเกตด้วยว่า Dan Boneh ยังเป็นที่ปรึกษาของ ทีมวิจัย a16z crypto[1] และทำคอนเทนต์เกี่ยวกับบล็อกเชนร่วมกับพวกเขาเป็นจำนวนมาก[2]
[1]: https://a16zcrypto.com/research/
[2]: https://a16zcrypto.com/team/dan-boneh/
การใช้งานสมัยใหม่ใช้เส้นโค้งวงรี และในอดีตคงใช้ discrete log ในกลุ่มย่อยของฟิลด์เฉพาะขนาดใหญ่ นอกจากนี้ยังพูดถึงลายเซ็น BLS ด้วย ซึ่งอิงกับเส้นโค้งวงรีทั้งหมด
โดยทั่วไป อะไรก็ตามที่ความปลอดภัยพึ่งพา discrete log ก็สามารถ implement ด้วยเส้นโค้งวงรีได้ แต่ในวิชาเข้ารหัสลับเบื้องต้น สิ่งที่ต้องการส่วนใหญ่คือกลุ่มที่มีอันดับเป็นจำนวนเฉพาะ และเส้นโค้งวงรีก็มักถูกมองเหมือนกล่องดำที่เป็นกลุ่มอันดับเฉพาะได้ จึงถือเป็นรายละเอียดของ implementation
ลายเซ็น BLS เป็นข้อยกเว้น เพราะต้องใช้ bilinear pairing ซึ่งต้องการเส้นโค้งวงรีชนิดพิเศษ ไม่ใช่แค่กลุ่มอันดับเฉพาะแบบกล่องดำธรรมดา
มี ทริกเรขาคณิตเชิงพีชคณิต เจ๋ง ๆ มากมายที่ทำได้ด้วยเส้นโค้งวงรี แต่เนื้อหาแบบนั้นแทบไม่ปรากฏในวิชาเข้ารหัสลับเบื้องต้น และอาจถึงขั้นหาไม่เจอในวิชาวิทยาการคอมพิวเตอร์ใด ๆ เลยก็ได้
ยังมีใครรอคอร์ส Cryptography II บน Coursera อยู่ไหม?
หนังสือที่เขาร่วมเขียน A Graduate Course in Applied Cryptography ช่วยผมได้มาก
https://toc.cryptobook.us/