Cryptology Academy · บทเรียน

GCM และการเข้ารหัสพร้อมการพิสูจน์ตัวตน

เพิ่มแท็กพิสูจน์ตัวตนในการเข้ารหัสเพื่อป้องกันการแก้ไขข้อมูล

บทเรียน 4 จาก 413 ขั้นตอน

GCM และการเข้ารหัสพร้อมการพิสูจน์ตัวตน เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

AES-GCM เป็นมาตรฐานชั้นนำสำหรับการเข้ารหัสพร้อมยืนยันความถูกต้อง โดยให้ทั้งการรักษาความลับ AND ความถูกต้องครบถ้วนในการทำงานครั้งเดียว และป้องกันการแก้ไขข้อมูลโดยไม่ต้องใช้ขั้นตอน HMAC แยกต่างหาก

ปัญหาของการเข้ารหัสเพียงอย่างเดียว

การเข้ารหัสให้ความลับแต่ไม่ได้ให้ความถูกต้องครบถ้วน ผู้โจมตีที่ดักจับข้อความเข้ารหัส AES-CBC สามารถพลิกบิตและเปลี่ยนข้อความต้นฉบับหลังถอดรหัสได้โดยไม่จำเป็นต้องรู้คีย์

AEAD: การเข้ารหัสพร้อมยืนยันความถูกต้องและข้อมูลประกอบ

รูปแบบ AEAD จะให้ผลลัพธ์เป็น: ข้อความเข้ารหัส + แท็กยืนยันความถูกต้อง แท็กนี้ใช้ยืนยันความถูกต้องทั้งข้อความเข้ารหัส AND ข้อมูลประกอบที่ไม่ได้เข้ารหัสซึ่งเป็นข้อมูลเสริม (AAD) การแก้ไขใด ๆ จะทำให้แท็กไม่ถูกต้อง

สถาปัตยกรรม GCM

AES-GCM ใช้: 1. AES-CTR สำหรับการเข้ารหัส 2. GHASH สำหรับการยืนยันความถูกต้อง GHASH คำนวณ MAC แบบพหุนามบนข้อความเข้ารหัส + AAD โดยใช้การคูณใน GF(2^128)

ภาพรวม GHASH

GHASH(H, A, C) = แฮชของ AAD + ข้อความเข้ารหัสโดยใช้คีย์ย่อย H = AES(K, 0^128) พหุนามจะถูกประเมินที่ H บน GF(2^128) จากนั้นนำผลลัพธ์ไปทำ XOR กับตัวนับที่เข้ารหัสแล้วเพื่อสร้างแท็ก

อินพุตและเอาต์พุตของ AES-GCM

อินพุต: คีย์ขนาด 128/192/256 บิต, นอนซ์ขนาด 96 บิต, ข้อความต้นฉบับ, AAD ที่เป็นข้อมูลเสริม เอาต์พุต: ข้อความเข้ารหัส (มีความยาวเท่ากับข้อความต้นฉบับ), แท็กยืนยันความถูกต้องขนาด 128 บิต โดยทั่วไปแท็กจะมีขนาด 16 ไบต์ ไม่แนะนำให้ตัดให้สั้นกว่า 12 ไบต์

ข้อกำหนดเรื่องนอนซ์ใน GCM

GCM กำหนดให้นอนซ์ไม่ซ้ำกันในการเข้ารหัสแต่ละครั้งเมื่อใช้คีย์เดียวกัน นอนซ์สุ่มขนาด 96 บิตเป็นรูปแบบมาตรฐาน หลังจากเข้ารหัสข้อความไปแล้ว 2^32 ข้อความ ความน่าจะเป็นที่จะเกิดการชนกันจะเกิน 1% เมื่อถึงจุดนั้นให้เปลี่ยนคีย์

หายนะจากการใช้นอนซ์ของ GCM ซ้ำ

การใช้คู่ (คีย์, นอนซ์) ซ้ำใน GCM ทำให้ผู้โจมตีกู้คืนคีย์ย่อย H ของ GHASH และปลอมแปลงข้อความเข้ารหัสใด ๆ ให้มีแท็กที่ถูกต้องได้ ส่งผลให้ทั้งความลับและความถูกต้องครบถ้วนถูกทำลายโดยสิ้นเชิง

กรณีใช้งานข้อมูลประกอบ (AAD)

AAD คือข้อมูลเมตาที่คุณต้องการยืนยันความถูกต้องแต่ไม่ต้องการเข้ารหัส: - ส่วนหัว HTTP: ยืนยันความถูกต้องเพื่อป้องกันการโจมตีด้วยการเปลี่ยนเส้นทางการตอบกลับ - รหัสระเบียนฐานข้อมูล: ทำให้มั่นใจว่าข้อความเข้ารหัสจะถูกถอดรหัสในแถวที่ถูกต้อง - รุ่นของโพรโทคอล: ป้องกันการโจมตีด้วยการลดระดับความปลอดภัย

ตัวอย่าง AES-GCM ใน Python แบบสมบูรณ์

from cryptography.hazmat.primitives.ciphers.aead import AESGCM import os key = AESGCM.generate_key(256) nonce = os.urandom(12) aad = b'user_id=12345' aesgcm = AESGCM(key) ct = aesgcm.encrypt(nonce, b'secret', aad) pt = aesgcm.decrypt(nonce, ct, aad) # raises if tampered

ทางเลือกอื่น: ChaCha20-Poly1305

ChaCha20-Poly1305 เป็นรูปแบบ AEAD สำคัญอีกแบบหนึ่ง ใช้ใน TLS 1.3 สำหรับอุปกรณ์ที่ไม่มี AES-NI (ARM/อุปกรณ์เคลื่อนที่) ให้ความปลอดภัยใกล้เคียงกับ AES-GCM แต่ทำงานได้เร็วกว่าในซอฟต์แวร์ที่ไม่มีตัวเร่งฮาร์ดแวร์

ตรวจสอบความเข้าใจ

แท็กยืนยันความถูกต้องใน AES-GCM ป้องกันอะไร

ทบทวน

AES-GCM เป็นค่าเริ่มต้นที่เหมาะสมสำหรับการเข้ารหัสพร้อมยืนยันความถูกต้อง ต่อไปเราจะศึกษาเลขรหัสลับแบบกระแส ตั้งแต่ RC4 ที่ถูกทำลายไปแล้วจนถึง ChaCha20 สมัยใหม่
เริ่มต้นได้ฟรี

เรียนรู้ Cryptology Academy ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
67
บทเรียน
261

คำถามที่พบบ่อย

บทเรียน “GCM และการเข้ารหัสพร้อมการพิสูจน์ตัวตน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “GCM และการเข้ารหัสพร้อมการพิสูจน์ตัวตน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “GCM และการเข้ารหัสพร้อมการพิสูจน์ตัวตน”

เพิ่มแท็กพิสูจน์ตัวตนในการเข้ารหัสเพื่อป้องกันการแก้ไขข้อมูล คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “GCM และการเข้ารหัสพร้อมการพิสูจน์ตัวตน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐานรหัสเข้ารหัสแบบบล็อกและการเติมข้อมูล
  2. ECB กับ CBC: รูปแบบและ IV
  3. โหมด CTR และพฤติกรรมของรหัสเข้ารหัสแบบสตรีม
  4. GCM และการเข้ารหัสพร้อมการพิสูจน์ตัวตน
← กลับไปที่ Cryptology Academy