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

พื้นฐานรหัสเข้ารหัสแบบบล็อกและการเติมข้อมูล

ทำความเข้าใจขนาดบล็อก การเติมข้อมูลแบบ PKCS7 และโครงสร้างรหัสเข้ารหัส

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

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

รหัสลับแบบบล็อกเข้ารหัสข้อมูลเป็นบล็อกที่มีขนาดคงที่ เมื่อข้อความต้นฉบับมีข้อมูลไม่เต็มบล็อก เราจำเป็นต้องเติมข้อมูล บทเรียนนี้จะช่วยให้คุณเข้าใจโครงสร้างของรหัสลับแบบบล็อก รูปแบบการเติมข้อมูล และเหตุผลที่สิ่งเหล่านี้สำคัญ

ทบทวนขนาดบล็อก

AES ใช้บล็อกขนาด 128 บิต (16 ไบต์) ส่วน DES ใช้บล็อกขนาด 64 บิต (8 ไบต์) หากข้อความต้นฉบับมีขนาด 16 ไบต์พอดี จะมีหนึ่งบล็อก แต่ถ้ามี 17 ไบต์ จะต้องใช้สองบล็อก

เหตุใดจึงต้องเติมข้อมูล

หากข้อความต้นฉบับมีขนาด 20 ไบต์ บล็อกที่สองจะมีข้อมูลเพียง 4 ไบต์ แต่รหัสลับต้องการบล็อกเต็มขนาด 16 ไบต์ เราจึงเติมอีก 12 ไบต์ที่เหลือด้วยรูปแบบที่กำหนดแน่นอนและย้อนกลับได้

การเติมข้อมูลแบบ PKCS#7

PKCS#7 เติมข้อมูลจำนวน N ไบต์ โดยแต่ละไบต์มีค่า N: - ต้องการ 3 ไบต์ → เติมต่อท้าย: 03 03 03 - ต้องการ 12 ไบต์ → เติมต่อท้าย: 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C - ต้องการ 0 ไบต์ → เติมบล็อกเต็มขนาด 16: 10×16

เติมข้อมูลให้ครบหนึ่งบล็อกเสมอ

หากข้อความต้นฉบับมีขนาด 16 ไบต์พอดี PKCS#7 จะเพิ่มบล็อกพิเศษเต็มขนาด 0x10×16 วิธีนี้ทำให้ผู้รับทราบเสมอว่าการเติมข้อมูลสิ้นสุดที่ใด เพราะค่าของไบต์สุดท้ายจะบอกจำนวนไบต์ที่ต้องตัดออก

การเติมข้อมูลแบบ PKCS#7 ใน Python

def pkcs7_pad(data: bytes, block_size: int = 16) -> bytes: n = block_size - (len(data) % block_size) return data + bytes([n] * n) def pkcs7_unpad(data: bytes) -> bytes: n = data[-1] return data[:-n]

การโจมตีออราเคิลของการเติมข้อมูล

หากเซิร์ฟเวอร์เปิดเผยว่าการเติมข้อมูลถูกต้องหรือไม่หลังการถอดรหัส (ผ่านข้อความแสดงข้อผิดพลาดหรือเวลาในการตอบสนอง) ผู้โจมตีสามารถถอดรหัสข้อความเข้ารหัสได้ทีละไบต์โดยไม่ต้องรู้กุญแจ วิธีนี้ทำลายความปลอดภัยของ ASP.NET ViewState ในปี 2010

การเติมศูนย์และ ANSI X.923

การเติมศูนย์: เติมด้วยไบต์ 0x00 (กำกวม — ข้อมูลเดิมอาจลงท้ายด้วยศูนย์) ANSI X.923: เติมด้วยศูนย์ โดยไบต์สุดท้ายระบุจำนวนไบต์ ISO 7816-4: ไบต์แรกของข้อมูลที่เติมคือ 0x80 ส่วนที่เหลือคือ 0x00 PKCS#7 ไม่กำกวมและเป็นรูปแบบที่แนะนำ

การเติมระดับบิต (CTS)

การขโมยข้อความเข้ารหัส (CTS) หลีกเลี่ยงการเติมข้อมูลทั้งหมด โดยจัดเรียงสองบล็อกสุดท้ายใหม่เพื่อรองรับข้อมูลที่มีขนาดไม่เต็มบล็อก วิธีนี้ใช้ในการเข้ารหัสดิสก์ (Kerberos และการใช้งาน AES บางรูปแบบ)

ผลกระทบของขนาดบล็อกต่อความปลอดภัย

สำหรับบล็อกขนาด 64 บิต (DES, 3DES, Blowfish): การชนแบบวันเกิดจะเกิดขึ้นหลัง 2^32 บล็อก (ประมาณ 32 GB) เบราว์เซอร์ปิดการใช้งาน 3DES ใน TLS หลังการโจมตี SWEET32 แสดงให้เห็นปัญหานี้ในปี 2016 ส่วนบล็อกขนาด 128 บิตของ AES ต้องใช้ถึง 2^64 บล็อก จึงปลอดภัยในทางปฏิบัติ

โหมดที่ไม่ต้องเติมข้อมูล

AES-CTR และ AES-GCM ไม่ต้องเติมข้อมูล เพราะใช้รหัสลับแบบบล็อกเป็นตัวสร้างกระแสกุญแจและใช้ XOR กับข้อมูลนำเข้าที่มีความยาวเท่าใดก็ได้ ขอบเขตของบล็อกเป็นเพียงรายละเอียดภายในการทำงาน

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

เมื่อใช้ PKCS#7 กับบล็อกขนาด 16 ไบต์ จะเติมข้อมูลอะไรต่อท้ายข้อความขนาด 13 ไบต์

สรุปทบทวน

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

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

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

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

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

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

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

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

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

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

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

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

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

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