0Pricing
Cryptology Academy · บทเรียน

โครงสร้าง HMAC และการพิสูจน์ความปลอดภัย

ศึกษาทีละขั้นตอนเกี่ยวกับโครงสร้าง ipad/opad และคุณสมบัติด้านความปลอดภัย

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

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

HMAC คือโครงสร้าง MAC แบบใช้กุญแจมาตรฐาน การออกแบบแบบแฮชซ้อนกันช่วยป้องกันการโจมตีแบบขยายความยาว และมีบทพิสูจน์ความปลอดภัยอย่างเป็นทางการที่ลดการพิสูจน์ความปลอดภัยของ HMAC ให้เหลือเพียงการพิสูจน์ความปลอดภัยของฟังก์ชันแฮชพื้นฐาน

โครงสร้าง HMAC

HMAC(K, M) = H((K' ⊕ opad) || H((K' ⊕ ipad) || M)) โดย: - K' = K ที่เติมศูนย์จนมีขนาดเท่าบล็อก B (หรือ H(K) หาก |K|>B) - ipad = 0x36 ซ้ำ B ครั้ง - opad = 0x5C ซ้ำ B ครั้ง

เหตุใดจึงใช้ ipad และ opad

ipad (0x36) และ opad (0x5C) เป็นค่าคงที่ที่แตกต่างกัน จึงทำให้ K' ⊕ ipad ≠ K' ⊕ opad ทั้งสองค่าทำหน้าที่สร้างกุญแจสุ่มเทียมสองชุดที่แตกต่างกันจาก K สำหรับการแฮชชั้นในและชั้นนอก

HMAC ทีละขั้นตอน

For K=secret, M=message, H=SHA256: 1. K' = K padded to 64 bytes 2. inner_key = K' XOR ipad 3. inner_hash = SHA256(inner_key || M) 4. outer_key = K' XOR opad 5. result = SHA256(outer_key || inner_hash)

HMAC ใน Python

import hmac, hashlib key = b'my_secret_key' message = b'Hello, World!' mac = hmac.new(key, message, hashlib.sha256) print(mac.hexdigest()) # 64-char hex string (256 bits)

เหตุใดการขยายความยาวจึงใช้ไม่ได้กับ HMAC

กำหนดให้ HMAC(K,M) = SHA256(outer_key || SHA256(inner_key || M)) ผู้โจมตีทราบว่า SHA256(inner_key || M) = inner_hash แต่ไม่สามารถขยายค่าดังกล่าวได้ เพราะแฮชชั้นนอกใช้ (outer_key || inner_hash) เป็นข้อมูลนำเข้า ไม่ได้ใช้เพียง inner_hash เท่านั้น และผู้โจมตีไม่ทราบค่า outer_key

บทพิสูจน์ความปลอดภัยของ HMAC (Bellare)

Bellare พิสูจน์ในปี 1996 ว่า หากฟังก์ชันแฮช H เป็นฟังก์ชันสุ่มเทียม (PRF) แล้ว HMAC ก็เป็นฟังก์ชันสุ่มเทียมเช่นกัน ในทางปฏิบัติ HMAC-SHA256 มีความปลอดภัยเทียบเท่า SHA-256 สำหรับคุณสมบัติด้านความปลอดภัยที่ออกแบบมาให้รองรับ

ความยาวกุญแจสำหรับ HMAC

กุญแจ HMAC ต้องมีคุณสมบัติดังนี้: - อย่างน้อย L ไบต์ (ความยาวผลลัพธ์ของแฮช) - คำแนะนำ: ใช้ข้อมูลสุ่มที่มีความยาวเท่ากับ L พอดี - หาก key > block_size ระบบจะทำแฮช key ล่วงหน้าให้มีขนาดเท่ากับ block_size - ใช้ os.urandom(32) สำหรับกุญแจ HMAC-SHA256

การตัดทอน HMAC

สามารถตัดทอนผลลัพธ์ HMAC ให้เหลือครึ่งหนึ่งของความยาวผลลัพธ์ได้โดยแทบไม่สูญเสียความปลอดภัย TOTP/HOTP จะตัดทอนให้เหลือ 4 ไบต์ ส่วน MAC ของ TLS ก็มีการตัดทอนเช่นกัน ห้ามตัดทอนให้ต่ำกว่า 80 บิต (10 ไบต์)

HMAC ในบริบทต่าง ๆ

HMAC-SHA256 ใช้ในกรณีต่อไปนี้: - TOTP: รหัสยืนยันตัวตน (ตัดทอนให้เหลือ 6 หลัก) - TLS 1.2: MAC ของเซสชัน (ไม่จำเป็นใน TLS 1.3 ซึ่งใช้ AEAD) - JWT: การลงนามแบบ HS256 (ใช้กุญแจร่วมกัน) - การลงนามคำขอ API: เว็บฮุกของ GitHub และ AWS SigV4

HKDF: การอนุมานกุญแจโดยใช้ HMAC

HKDF(IKM, salt, info, L) ใช้ HMAC สองครั้ง: 1. สกัด: PRK = HMAC-SHA256(salt, IKM) 2. ขยาย: OKM = HMAC-SHA256(PRK, info || counter) ใช้ในตารางการสร้างกุญแจของ TLS 1.3, Signal และ WireGuard เพื่ออนุมานกุญแจ

ตรวจสอบความเข้าใจอย่างรวดเร็ว

opad (0x5C ที่ซ้ำกัน) มีจุดประสงค์ใดใน HMAC

สรุปทบทวน

เข้าใจโครงสร้างและบทพิสูจน์ของ HMAC แล้ว ขั้นต่อไป เราจะนำ HMAC ไปใช้ลงนามคำขอ API และดูวิธีป้องกันการโจมตีแบบเล่นซ้ำ

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

บทเรียน “โครงสร้าง HMAC และการพิสูจน์ความปลอดภัย” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “โครงสร้าง HMAC และการพิสูจน์ความปลอดภัย”

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

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

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

บทเรียน “โครงสร้าง HMAC และการพิสูจน์ความปลอดภัย” ใช้เวลานานแค่ไหน

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

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

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

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

  1. แนวคิด MAC และการโจมตีแบบขยายความยาว
  2. โครงสร้าง HMAC และการพิสูจน์ความปลอดภัย
  3. HMAC ใน API: การลงนามคำขอ
  4. CMAC และ Poly1305: MAC ด้วยรหัสเข้ารหัสแบบบล็อก
← กลับไปที่ Cryptology Academy