มาตรฐานการเข้ารหัสขั้นสูง
มาตรฐานการเข้ารหัสขั้นสูง ( AES ) หรือที่รู้จักกันในชื่อเดิมว่าRijndael ( การออกเสียงภาษาดัตช์: [ ˈrɛindaːl ] , RAIN -dahl ) [ 5 ]เป็นข้อกำหนดสำหรับการเข้ารหัสข้อมูลอิเล็กทรอนิกส์ที่กำหนดโดยสถาบันมาตรฐานและเทคโนโลยีแห่งชาติ ของสหรัฐอเมริกา (NIST) ในปี 2544 [ 6 ]
AES เป็นรูปแบบหนึ่งของการเข้ารหัสแบบบล็อก Rijndael [ 5 ]ซึ่งพัฒนาโดยนักเข้ารหัสชาวเบลเยียม สองคน คือ Joan DaemenและVincent Rijmenซึ่งได้ยื่นข้อเสนอ[ 7 ]ให้กับ NIST ในระหว่างกระบวนการคัดเลือก AES [ 8 ] Rijndaelเป็นตระกูลของการเข้ารหัสที่มี ขนาด คีย์และบล็อก ที่แตกต่างกัน สำหรับ AES นั้น NIST ได้เลือกสมาชิกสามตัวของตระกูล Rijndael โดยแต่ละตัวมีขนาดบล็อก 128 บิต แต่มีความยาวคีย์ที่แตกต่างกันสามแบบ คือ 128, 192 และ 256 บิต
AES ได้รับการนำมาใช้โดยรัฐบาลสหรัฐฯโดยแทนที่มาตรฐานการเข้ารหัสข้อมูล (DES) [ 9 ]ซึ่งเผยแพร่ในปี 1977 อัลกอริทึมที่อธิบายโดย AES เป็นอัลกอริทึมแบบกุญแจสมมาตรหมายความว่าใช้กุญแจเดียวกันทั้งในการเข้ารหัสและถอดรหัสข้อมูล
ในสหรัฐอเมริกา AES ได้รับการประกาศโดย NIST ให้เป็นมาตรฐาน US FIPS PUB 197 (FIPS 197) เมื่อวันที่ 26 พฤศจิกายน พ.ศ. 2544 [ 6 ]การประกาศนี้เกิดขึ้นหลังจากกระบวนการกำหนดมาตรฐานเป็นเวลาห้าปี ซึ่งมีการนำเสนอและประเมินการออกแบบที่แข่งขันกันสิบห้าแบบ ก่อนที่จะเลือกการเข้ารหัส Rijndael เป็นแบบที่เหมาะสมที่สุด
AES รวมอยู่ใน มาตรฐาน ISO / IEC 18033-3 AES มีผลบังคับใช้เป็นมาตรฐานของรัฐบาลกลางสหรัฐฯ เมื่อวันที่ 26 พฤษภาคม 2545 หลังจากได้รับการอนุมัติจากรัฐมนตรีว่าการกระทรวงพาณิชย์สหรัฐฯโดนัลด์ อีแวนส์ AES มีให้เลือกใช้ในแพ็กเกจการเข้ารหัสหลายแบบ และเป็นรหัสลับ ที่เข้าถึงได้โดยสาธารณะตัวแรก (และตัวเดียว) ที่ได้รับการอนุมัติจากสำนักงานความมั่นคงแห่งชาติ สหรัฐฯ (NSA) สำหรับ ข้อมูล ลับสุดยอดเมื่อใช้ในโมดูลการเข้ารหัสที่ได้รับการอนุมัติจาก NSA [หมายเหตุ 3 ]
มาตรฐานที่แน่นอน
มาตรฐานการเข้ารหัสขั้นสูง (AES) ได้รับการกำหนดไว้ในมาตรฐานเหล่านี้:
คำอธิบายของรหัสลับ
AES ใช้หลักการออกแบบที่เรียกว่าเครือข่ายการแทนที่และการเรียงสับเปลี่ยนและมีประสิทธิภาพทั้งในซอฟต์แวร์และฮาร์ดแวร์[ 11 ]แตกต่างจาก DES ซึ่งเป็นรุ่นก่อนหน้า AES ไม่ได้ใช้เครือข่าย Feistel AES เป็นรูปแบบหนึ่งของ Rijndael โดยมีขนาดบล็อก คง ที่ 128 บิตและขนาดคีย์ 128, 192 หรือ 256 บิต ในทางตรงกันข้าม Rijndael เองนั้นระบุขนาดบล็อกและคีย์ที่อาจเป็นพหุคูณของ 32 บิต โดยมีค่าต่ำสุด 128 และค่าสูงสุด 256 บิต การคำนวณส่วนใหญ่ของ AES จะทำในฟิลด์จำกัดเฉพาะ
AES ทำงานบน อาร์เรย์ แบบเรียงตามคอลัมน์ขนาด 4 × 4 จำนวน 16 ไบต์b , b , ..., b ซึ่งเรียกว่าสถานะ : [หมายเหตุ 4 ]
ขนาดของคีย์ที่ใช้สำหรับการเข้ารหัส AES ระบุจำนวนรอบการแปลงที่เปลี่ยนอินพุต ซึ่งเรียกว่าข้อความธรรมดาให้เป็นเอาต์พุตสุดท้าย ซึ่งเรียกว่าข้อความเข้ารหัสจำนวนรอบมีดังนี้:
- 10 รอบสำหรับคีย์ 128 บิต;
- 12 รอบสำหรับคีย์ 192 บิต;
- 14 รอบสำหรับคีย์ 256 บิต
แต่ละรอบประกอบด้วยขั้นตอนการประมวลผลหลายขั้นตอน รวมถึงขั้นตอนหนึ่งที่ขึ้นอยู่กับกุญแจเข้ารหัสเอง มีการใช้รอบย้อนกลับหลายรอบเพื่อแปลงข้อความที่เข้ารหัสแล้วกลับไปเป็นข้อความต้นฉบับโดยใช้กุญแจเข้ารหัสเดียวกัน
คำอธิบายระดับสูงของอัลกอริทึม
- การขยายคีย์–คีย์รอบจะถูกสร้างขึ้นจากคีย์เข้ารหัสโดยใช้ตารางคีย์ AES AES ต้องการบล็อกคีย์รอบขนาด 128 บิตแยกต่างหากสำหรับแต่ละรอบ บวกเพิ่มอีกหนึ่งบล็อก
- การเพิ่มคีย์รอบแรก:
- AddRoundKey –แต่ละไบต์ของสถานะจะถูกรวมเข้ากับไบต์ของคีย์รอบโดยใช้การดำเนินการเอกซ์คลูซีฟแบบบิตwiseหรือ
- 9, 11 หรือ 13 รอบ:
- SubBytes –ขั้น ตอนการแทนที่แบบ ไม่เชิงเส้นโดยแต่ละไบต์จะถูกแทนที่ด้วยไบต์อื่นตามตารางค้นหา
- ShiftRows –ขั้นตอนการสลับตำแหน่ง โดยจะเลื่อนแถวสามแถวสุดท้ายของสถานะแบบวนซ้ำเป็นจำนวนขั้นตอนที่กำหนด
- MixColumns –การดำเนินการผสมเชิงเส้นซึ่งทำงานกับคอลัมน์ของสถานะ โดยรวมไบต์ทั้งสี่ในแต่ละคอลัมน์เข้าด้วยกัน
- เพิ่มคีย์กลม
- รอบสุดท้าย (รวมทั้งหมด 10, 12 หรือ 14 รอบ):
- ซับไบต์
- เลื่อนแถว
- เพิ่มคีย์กลม
ขั้นตอนซับไบต์

ใน ขั้นตอน SubBytesแต่ละไบต์a ใน อาร์เรย์ สถานะจะถูกแทนที่ด้วยSubByte S ( a ) โดยใช้ กล่องการแทนที่ 8 บิตก่อนรอบที่ 0 อาร์เรย์ สถานะจะเป็นเพียงข้อความธรรมดา/อินพุต การดำเนินการนี้ทำให้เกิดความไม่เป็นเชิงเส้นในการเข้ารหัสกล่อง S ที่ใช้ได้มาจากตัวผกผันการคูณเหนือGF (2 8 )ซึ่งเป็นที่ทราบกันดีว่ามีคุณสมบัติไม่เป็นเชิงเส้นที่ดี เพื่อหลีกเลี่ยงการโจมตีที่อาศัยคุณสมบัติทางพีชคณิตแบบง่าย กล่อง S จึงถูกสร้างขึ้นโดยการรวมฟังก์ชันผกผันเข้ากับการแปลงเชิงเส้น ผกผันได้ กล่อง S ยังถูกเลือกเพื่อหลีกเลี่ยงจุดคงที่ใดๆ (และดังนั้นจึงเป็นการเรียงสับเปลี่ยน ) กล่าวคือS ( a ) ≠ a และจุดคงที่ตรงข้ามใดๆ กล่าวคือS ( a i ) ⊕ a ≠ FF ในระหว่างการถอดรหัส จะมีการใช้ขั้นตอน InvSubBytes (ซึ่งเป็นขั้นตอนผกผันของSubBytes ) โดยจะต้องทำการหาตัวผกผันของการแปลงเชิงเส้นก่อน แล้วจึงหาตัวผกผันการคูณ
ขั้นตอนShiftRows

ขั้นตอน ShiftRows ทำงานกับแถวของสถานะ โดยจะเลื่อนไบต์ในแต่ละแถวไปตามค่าออฟเซ็ต ที่กำหนด สำหรับ AES แถวแรกจะไม่มีการเปลี่ยนแปลง ไบต์แต่ละตัวในแถว ที่สองจะถูกเลื่อนไปทางซ้ายหนึ่งตำแหน่ง ในทำนองเดียวกัน แถวที่สามและสี่จะถูกเลื่อนไปตามค่าออฟเซ็ตสองและสามตำแหน่งตามลำดับ[หมายเหตุ 5 ]ด้วยวิธีนี้ แต่ละคอลัมน์ของสถานะเอาต์พุตของ ขั้นตอน ShiftRowsจะประกอบด้วยไบต์จากแต่ละคอลัมน์ของสถานะอินพุต ความสำคัญของขั้นตอนนี้คือการหลีกเลี่ยงการเข้ารหัสคอลัมน์อย่างอิสระ ซึ่งในกรณีนั้น AES จะเสื่อมสภาพกลายเป็นอัลกอริทึมการเข้ารหัสแบบบล็อกอิสระสี่ตัว
ขั้นตอนMixColumns

ใน ขั้นตอน MixColumnsไบต์ทั้งสี่ของแต่ละคอลัมน์ของสถานะจะถูกรวมเข้าด้วยกันโดยใช้การแปลงเชิงเส้น แบบผกผันได้ ฟังก์ชันMixColumnsรับไบต์ทั้งสี่เป็นอินพุตและส่งออกไบต์ทั้งสี่ โดยที่ไบต์อินพุตแต่ละตัวจะมีผลต่อไบต์เอาต์พุตทั้งสี่ตัว เมื่อใช้ร่วมกับShiftRowsแล้วMixColumnsจะช่วยเพิ่มการกระจายตัวในรหัสลับ
ในระหว่างการดำเนินการนี้ แต่ละคอลัมน์จะถูกแปลงโดยใช้เมทริกซ์คงที่ (เมทริกซ์คูณทางซ้ายด้วยคอลัมน์จะให้ค่าใหม่ของคอลัมน์ในสถานะ):
การคูณเมทริกซ์ประกอบด้วยการคูณและการบวกของสมาชิก สมาชิกคือไบต์ที่ถือว่าเป็นสัมประสิทธิ์ของพหุนามอันดับx⁷ การบวกทำได้ง่ายๆ ด้วย การดำเนินการ XOR การคูณทำแบบโมดูลัสพหุนามที่ไม่สามารถแยกตัวประกอบได้ x⁸ + x⁴ + x³ + x + 1 หากประมวลผลทีละบิตหลังจากเลื่อนบิตแล้ว ควรดำเนินการ XOR แบบมีเงื่อนไข กับหากค่าที่เลื่อนแล้วมีค่ามากกว่า FF¹⁶ ต้องแก้ไขค่าเกินโดยการลบพหุนามที่สร้างค่าขึ้นมา) กรณีเหล่านี้เป็นกรณีพิเศษของการคูณตามปกติในGF ( 2⁸ )
โดยทั่วไปแล้ว แต่ละคอลัมน์จะถูกมองว่าเป็นพหุนามเหนือGF(2 8 )จากนั้นจึงคูณด้วยโมดูลัสโดยใช้พหุนามคงที่สัมประสิทธิ์จะแสดงในรูป แบบ เลขฐานสิบหกที่เทียบเท่ากับการแสดงเลขฐานสองของพหุนามบิตจากGF (2 8 )[ x ] ขั้นตอน MixColumns สามารถมองได้ว่าเป็นการคูณด้วยเมทริกซ์ MDS เฉพาะที่แสดง ในฟิลด์จำกัดGF(2 8 )กระบวนการนี้อธิบายเพิ่มเติมในบทความRijndael MixColumns
ขั้นตอน AddRoundKey

ใน ขั้นตอน AddRoundKeyคีย์ย่อยจะถูกรวมเข้ากับสถานะ สำหรับแต่ละรอบ คีย์ย่อยจะถูกสร้างขึ้นจากคีย์ หลัก โดยใช้ตารางคีย์ของ Rijndaelโดยแต่ละคีย์ย่อยจะมีขนาดเท่ากับสถานะ คีย์ย่อยจะถูกบวกเข้าด้วยกันโดยการรวมสถานะกับไบต์ที่สอดคล้องกันของคีย์ย่อยโดยใช้การดำเนินการXOR ระดับ บิต
การปรับปรุงประสิทธิภาพของรหัสลับ
ในระบบที่มีคำขนาด 32 บิตขึ้นไป สามารถเร่งความเร็วในการดำเนินการเข้ารหัสนี้ได้โดยการรวม ขั้นตอน SubBytesและShiftRowsเข้ากับ ขั้นตอน MixColumnsโดยการแปลงให้เป็นลำดับของการค้นหาในตาราง ซึ่งต้องใช้ตารางขนาด 32 บิต จำนวน 4 ตารางที่มี 256 รายการ (รวมกันใช้พื้นที่ 4096 ไบต์) จากนั้นสามารถดำเนินการรอบหนึ่งได้ด้วยการค้นหาในตาราง 16 ครั้ง และการดำเนินการ exclusive-or ขนาด 32 บิต 12 ครั้ง ตามด้วยการดำเนินการ exclusive-or ขนาด 32 บิต 4 ครั้งในขั้นตอนAddRoundKey [ 12 ] หรืออีกทางเลือกหนึ่ง การค้นหาในตารางสามารถทำได้ด้วยตารางขนาด 32 บิต จำนวน 256 รายการเพียงตารางเดียว (ใช้พื้นที่ 1024 ไบต์) ตามด้วยการดำเนินการหมุนวน
การใช้แนวทางที่เน้นไบต์ทำให้สามารถรวม ขั้นตอน SubBytes , ShiftRowsและMixColumnsเข้าไว้ในการดำเนินการรอบเดียวได้[ 13 ]
ความปลอดภัย
สำนักงานความมั่นคงแห่งชาติ (NSA) ได้ตรวจสอบระบบเข้ารหัส AES ที่ผ่านเข้ารอบสุดท้ายทั้งหมด รวมถึง Rijndael และระบุว่าระบบทั้งหมดมีความปลอดภัยเพียงพอสำหรับข้อมูลที่ไม่เป็นความลับของรัฐบาลสหรัฐฯ ในเดือนมิถุนายน ปี 2003 รัฐบาลสหรัฐฯ ได้ประกาศว่าสามารถใช้ AES เพื่อปกป้องข้อมูลลับได้
การออกแบบและความแข็งแกร่งของความยาวคีย์ทั้งหมดของอัลกอริธึม AES (เช่น 128, 192 และ 256) เพียงพอที่จะปกป้องข้อมูลลับได้ถึงระดับ SECRET ข้อมูล TOP SECRET จะต้องใช้ความยาวคีย์ 192 หรือ 256 การนำ AES ไปใช้ในผลิตภัณฑ์ที่มุ่งปกป้องระบบและ/หรือข้อมูลความมั่นคงแห่งชาติจะต้องได้รับการตรวจสอบและรับรองโดย NSA ก่อนการจัดซื้อและการใช้งาน[ 14 ]
AES มี 10 รอบสำหรับคีย์ 128 บิต, 12 รอบสำหรับคีย์ 192 บิต และ 14 รอบสำหรับคีย์ 256 บิต
อย่างไรก็ตาม คำแนะนำล่าสุดจากNSAอนุญาตให้เข้ารหัสข้อมูลลับได้เฉพาะเมื่อใช้คีย์ความยาว 256 บิตเท่านั้น คีย์ 128 บิตและ 192 บิตไม่เพียงพอสำหรับการเข้ารหัสข้อมูลลับอีกต่อไป[ 15 ]
การโจมตีที่ทราบ
สำหรับนักเข้ารหัสลับ การ "เจาะระบบ" ทางการเข้ารหัสลับหมายถึงสิ่งใดก็ตามที่เร็วกว่าการโจมตีแบบเดาสุ่ม กล่าวคือการดำเนินการถอดรหัสทดลองหนึ่งครั้งสำหรับแต่ละคีย์ที่เป็นไปได้ตามลำดับการเจาะระบบจึงอาจรวมถึงผลลัพธ์ที่ไม่สามารถทำได้ด้วยเทคโนโลยีปัจจุบัน แม้ว่าจะไม่สามารถนำไปใช้ได้จริง แต่การเจาะระบบในเชิงทฤษฎีบางครั้งก็สามารถให้ข้อมูลเชิงลึกเกี่ยวกับรูปแบบช่องโหว่ได้ การโจมตีแบบเดาสุ่มที่ประสบความสำเร็จครั้งใหญ่ที่สุดที่รู้จักกันในวงกว้างต่ออัลกอริทึมการเข้ารหัสแบบบล็อกไซเฟอร์ที่ใช้งานกันอย่างแพร่หลายคือการโจมตี คีย์ RC5 64 บิต โดยdistributed.netในปี 2549 [ 16 ]
พื้นที่ของกุญแจจะเพิ่มขึ้นเป็นสองเท่าสำหรับทุกๆ บิตที่เพิ่มขึ้นของความยาวกุญแจ และหากค่าที่เป็นไปได้ทั้งหมดของกุญแจมีความน่าจะเป็นเท่ากัน นั่นหมายความว่าเวลาเฉลี่ยในการค้นหากุญแจแบบเดาสุ่มจะเพิ่มขึ้นเป็นสองเท่าสำหรับทุกๆ บิตที่เพิ่มขึ้นของความยาวกุญแจ ซึ่งหมายความว่าความพยายามในการค้นหาแบบเดาสุ่มจะเพิ่มขึ้นแบบทวีคูณตามความยาวของกุญแจ ความยาวของกุญแจเพียงอย่างเดียวไม่ได้หมายความถึงความปลอดภัยจากการโจมตีเสมอไป เนื่องจากมีรหัสลับที่มีกุญแจยาวมากที่พบว่ามีความเสี่ยงต่อการถูกโจมตีได้
AES มีโครงสร้างพีชคณิตที่ค่อนข้างเรียบง่าย[ 17 ] ในปี 2545 มีการประกาศการโจมตีเชิงทฤษฎีที่เรียกว่า " การโจมตี XSL " โดย Nicolas CourtoisและJosef Pieprzykซึ่งอ้างว่าแสดงให้เห็นถึงจุดอ่อนในอัลกอริทึม AES ส่วนหนึ่งเนื่องมาจากความซับซ้อนต่ำของส่วนประกอบที่ไม่เป็นเชิงเส้น[ 18 ]ตั้งแต่นั้นมา เอกสารอื่นๆ ได้แสดงให้เห็นว่าการโจมตีตามที่นำเสนอในตอนแรกนั้นใช้การไม่ได้ ดูการโจมตี XSL บนการเข้ารหัสแบบบล็อก
ในระหว่างกระบวนการคัดเลือก AES นักพัฒนาอัลกอริทึมคู่แข่งได้เขียนเกี่ยวกับอัลกอริทึมของ Rijndael ว่า "เรากังวลเกี่ยวกับการใช้งาน ... ในแอปพลิเคชันที่สำคัญด้านความปลอดภัย" [ 19 ]อย่างไรก็ตาม ในเดือนตุลาคม พ.ศ. 2543 เมื่อสิ้นสุดกระบวนการคัดเลือก AES บรูซ ชไนเออร์นักพัฒนาอัลกอริทึมคู่แข่งTwofishได้เขียนว่า แม้เขาคิดว่าการโจมตีทางวิชาการที่ประสบความสำเร็จต่อ Rijndael จะถูกพัฒนาขึ้นในสักวันหนึ่ง แต่เขา "ไม่เชื่อว่าใครจะค้นพบการโจมตีที่จะทำให้ใครบางคนสามารถอ่านทราฟฟิกของ Rijndael ได้" [ 20 ]
ภายในปี 2549 การโจมตีที่รู้จักกันดีที่สุดคือการโจมตี 7 รอบสำหรับคีย์ 128 บิต การโจมตี 8 รอบสำหรับคีย์ 192 บิต และการโจมตี 9 รอบสำหรับคีย์ 256 บิต[ 21 ]
จนถึงเดือนพฤษภาคม พ.ศ. 2552 การโจมตีที่ประสบความสำเร็จที่เผยแพร่ต่อ AES เต็มรูปแบบมีเพียงการโจมตีแบบ side-channelบนการใช้งานเฉพาะบางอย่างเท่านั้น ในปี พ.ศ. 2552 มีการค้นพบ การโจมตีแบบคีย์ที่เกี่ยวข้องกัน แบบใหม่ ที่ใช้ประโยชน์จากความเรียบง่ายของตารางคีย์ของ AES และมีความซับซ้อน2¹¹⁹ในเดือนธันวาคม พ.ศ. 2552 ได้รับการปรับปรุงเป็น2⁹⁹⁵ [ 2 ] นี่เป็นการติดตามการโจมตีที่ค้นพบก่อนหน้านี้ในปี พ.ศ. 2552 โดยAlex Biryukov , Dmitry Khovratovichและ Ivica Nikolić ซึ่งมีความซับซ้อน 2⁹⁶ สำหรับ คีย์ หนึ่งในทุกๆ 2³⁵ คีย์ [ 22 ] อย่างไรก็ตามการโจมตีแบบคีย์ที่เกี่ยวข้องกันไม่ใช่เรื่องที่น่ากังวลในโปรโตคอลการเข้ารหัสที่ออกแบบมาอย่างเหมาะสม เนื่องจากโปรโตคอลที่ออกแบบมาอย่างเหมาะสม (เช่น ซอฟต์แวร์การใช้งาน) จะดูแลไม่ให้มีคีย์ที่เกี่ยวข้องกัน โดยพื้นฐานแล้วโดยการจำกัดวิธีการของผู้โจมตีในการเลือกคีย์ที่เกี่ยวข้องกัน
การโจมตีอีกครั้งหนึ่งถูกบันทึกในบล็อกโดย Bruce Schneier [ 3 ] เมื่อวันที่ 30 กรกฎาคม 2552 และเผยแพร่เป็นเอกสารก่อนตีพิมพ์[ 23 ] เมื่อวันที่ 3 สิงหาคม 2552 การโจมตีครั้งใหม่นี้โดย Alex Biryukov, Orr Dunkelman , Nathan Keller , Dmitry Khovratovich และAdi Shamirมุ่งเป้าไปที่ AES-256 ซึ่งใช้เพียงสองคีย์ที่เกี่ยวข้องและใช้เวลา 2 39ครั้งในการกู้คืนคีย์ 256 บิตทั้งหมดของเวอร์ชัน 9 รอบ หรือ 2 45ครั้งสำหรับเวอร์ชัน 10 รอบด้วยการโจมตีคีย์ย่อยที่เกี่ยวข้องที่แข็งแกร่งกว่า หรือ 2 70ครั้งสำหรับเวอร์ชัน 11 รอบ AES 256 บิตใช้ 14 รอบ ดังนั้นการโจมตีเหล่านี้จึงไม่มีประสิทธิภาพกับ AES แบบเต็ม
ความเป็นไปได้ในทางปฏิบัติของการโจมตีเหล่านี้ด้วยคีย์ที่เกี่ยวข้องที่แข็งแกร่งกว่าได้รับการวิพากษ์วิจารณ์[ 24 ]ตัวอย่างเช่น โดยบทความเกี่ยวกับการโจมตีความสัมพันธ์คีย์ที่เลือกไว้ตรงกลางบน AES-128 ที่เขียนโดย Vincent Rijmen ในปี 2010 [ 25 ]
ในเดือนพฤศจิกายน พ.ศ. 2552 การโจมตีที่แยกแยะคีย์ที่รู้จัก ครั้งแรก ต่อ AES-128 เวอร์ชัน 8 รอบที่ลดลงได้รับการเผยแพร่เป็นเอกสารก่อนตีพิมพ์[ 26 ] การโจมตีที่แยกแยะคีย์ที่รู้จักนี้เป็นการปรับปรุงการโจมตีแบบรีบาวด์ หรือการโจมตีแบบเริ่มต้นจากตรงกลาง ต่อการเรียงสับเปลี่ยนแบบ AES ซึ่งมองว่าการเรียงสับเปลี่ยนสองรอบติดต่อกันเป็นการประยุกต์ใช้สิ่งที่เรียกว่า Super-S-box การโจมตีนี้ใช้ได้กับ AES-128 เวอร์ชัน 8 รอบ โดยมีความซับซ้อนของเวลา 2 48และความซับซ้อนของหน่วยความจำ 2 32 AES 128 บิตใช้ 10 รอบ ดังนั้นการโจมตีนี้จึงไม่มีประสิทธิภาพกับ AES-128 แบบเต็ม
การโจมตีเพื่อกู้คืนคีย์ครั้งแรกบน AES เต็มรูปแบบนั้นดำเนินการโดย Andrey Bogdanov, Dmitry Khovratovich และ Christian Rechberger และเผยแพร่ในปี 2011 [ 27 ]การโจมตีนี้เป็นการโจมตีแบบ bicliqueและเร็วกว่าการโจมตีแบบ brute force ประมาณสี่เท่า ต้องใช้ การดำเนินการ 2,126.2 ครั้ง เพื่อกู้คืนคีย์ AES-128 สำหรับ AES-192 และ AES-256 ต้องใช้การดำเนินการ2,190.2และ2,254.6 ครั้งตามลำดับ ผลลัพธ์นี้ได้รับการปรับปรุงเพิ่มเติมเป็น 2,126.0สำหรับ AES-128, 2,189.9สำหรับ AES-192 และ2,254.3สำหรับ AES-256 โดย Biaoshuai Tao และ Hongjun Wu ในเอกสารปี 2015 [ 28 ]ซึ่งเป็นผลลัพธ์ที่ดีที่สุดในปัจจุบันในการโจมตีเพื่อกู้คืนคีย์ต่อ AES
นี่เป็นผลกำไรเพียงเล็กน้อย เนื่องจากคีย์ 126 บิต (แทนที่จะเป็น 128 บิต) จะยังคงต้องใช้เวลาหลายพันล้านปีในการโจมตีแบบ Brute Force บนฮาร์ดแวร์ปัจจุบันและที่คาดการณ์ได้ นอกจากนี้ ผู้เขียนยังคำนวณการโจมตีที่ดีที่สุดโดยใช้เทคนิคของพวกเขาบน AES ด้วยคีย์ 128 บิต ซึ่งต้องจัดเก็บ ข้อมูล 2⁸⁸บิต ซึ่งคิดเป็นข้อมูลประมาณ 38 ล้านล้านเทราไบต์ ซึ่งมากกว่าข้อมูลทั้งหมดที่จัดเก็บไว้ในคอมพิวเตอร์ทุกเครื่องบนโลกในปี 2016 [ 29 ]ต่อมาเอกสารในปี 2015 ได้ปรับปรุงความซับซ้อนของพื้นที่เป็น 2⁵⁶ บิต [ 28 ] ซึ่งเท่ากับ 9007 เทราไบต์ (ในขณะที่ยังคงรักษาความซับซ้อนของเวลาไว้ที่ประมาณ2¹²⁶ )
ตามเอกสารของสโนว์เดน NSA กำลังทำการวิจัยว่าการโจมตีการเข้ารหัสโดยใช้สถิติเทาอาจช่วยทำลาย AES ได้หรือไม่[ 30 ]
ในปัจจุบัน ยังไม่มีการโจมตีในทางปฏิบัติใดๆ ที่เป็นที่รู้จัก ซึ่งจะทำให้บุคคลที่ไม่ทราบรหัสลับสามารถอ่านข้อมูลที่เข้ารหัสด้วย AES ได้ หากมีการใช้งานอย่างถูกต้อง
การโจมตีช่องทางด้านข้าง
การโจมตีแบบช่องทางด้านข้าง (Side-channel attacks)ไม่ได้โจมตีตัวเข้ารหัสในฐานะกล่องดำดังนั้นจึงไม่เกี่ยวข้องกับความปลอดภัยของตัวเข้ารหัสตามความหมายดั้งเดิม แต่มีความสำคัญในทางปฏิบัติ การโจมตีเหล่านี้มุ่งเป้าไปที่การใช้งานตัวเข้ารหัสบนระบบฮาร์ดแวร์หรือซอฟต์แวร์ที่อาจทำให้ข้อมูลรั่วไหลโดยไม่ตั้งใจ มีการโจมตีลักษณะนี้หลายรูปแบบที่รู้จักกันดีในการใช้งาน AES ในรูปแบบต่างๆ
ในเดือนเมษายน พ.ศ. 2548 D. J. Bernsteinได้ประกาศการโจมตีแบบแคชไทม์มิ่งที่เขาใช้เพื่อเจาะเซิร์ฟเวอร์แบบกำหนดเองที่ใช้การเข้ารหัส AES ของOpenSSL [ 31 ]การโจมตีนี้ต้องใช้ข้อความธรรมดาที่เลือกไว้มากกว่า 200 ล้านข้อความ[ 32 ]เซิร์ฟเวอร์แบบกำหนดเองนี้ได้รับการออกแบบมาเพื่อให้ข้อมูลเวลามากที่สุดเท่าที่จะเป็นไปได้ (เซิร์ฟเวอร์จะรายงานจำนวนรอบการทำงานของเครื่องที่ใช้ในการดำเนินการเข้ารหัส) อย่างไรก็ตาม ดังที่ Bernstein ชี้ให้เห็นว่า "การลดความแม่นยำของไทม์สแตมป์ของเซิร์ฟเวอร์ หรือการกำจัดไทม์สแตมป์ออกจากคำตอบของเซิร์ฟเวอร์ ไม่ได้หยุดการโจมตี: ไคลเอนต์เพียงแค่ใช้เวลาการเดินทางไปกลับตามนาฬิกาภายในเครื่อง และชดเชยสัญญาณรบกวนที่เพิ่มขึ้นโดยการหาค่าเฉลี่ยจากตัวอย่างจำนวนมากขึ้น" [ 31 ]
ในเดือนตุลาคม พ.ศ. 2548 Dag Arne Osvik, Adi ShamirและEran Tromerได้นำเสนอเอกสารที่แสดงให้เห็นถึงการโจมตีแบบแคชไทม์หลายรูปแบบต่อการใช้งาน AES ที่พบใน OpenSSL และdm-cryptฟังก์ชันการเข้ารหัสพาร์ติชัน ของ Linux [ 33 ]การโจมตีหนึ่งสามารถรับคีย์ AES ทั้งหมดได้หลังจากดำเนินการเข้ารหัสเพียง 800 ครั้ง รวมเป็นเวลา 65 มิลลิวินาที การโจมตีนี้ต้องการให้ผู้โจมตีสามารถเรียกใช้โปรแกรมบนระบบหรือแพลตฟอร์มเดียวกันกับที่กำลังดำเนินการ AES อยู่
ในเดือนธันวาคม พ.ศ. 2552 มีการเผยแพร่การโจมตีการใช้งานฮาร์ดแวร์บางอย่างที่ใช้การวิเคราะห์ความผิดพลาดแบบดิฟเฟอเรนเชียลและอนุญาตให้กู้คืนคีย์ที่มีความซับซ้อน2 32 [ 34 ]
ในเดือนพฤศจิกายน พ.ศ. 2553 Endre Bangerter, David Gullasch และ Stephan Krenn ได้ตีพิมพ์เอกสารที่อธิบายถึงแนวทางปฏิบัติในการกู้คืนคีย์ลับจาก AES-128 แบบ "เกือบเรียลไทม์" โดยไม่จำเป็นต้องใช้ข้อความเข้ารหัสหรือข้อความธรรมดา แนวทางนี้ยังใช้ได้กับการใช้งาน AES-128 ที่ใช้ตารางการบีบอัด เช่น OpenSSL [ 35 ]เช่นเดียวกับการโจมตีครั้งก่อนๆ การโจมตีนี้ต้องอาศัยความสามารถในการเรียกใช้โค้ดที่ไม่ได้รับสิทธิ์บนระบบที่ทำการเข้ารหัส AES ซึ่งอาจทำได้ง่ายกว่ามากโดยการติดมัลแวร์มากกว่าการยึดบัญชี root [ 36 ]
ในเดือนมีนาคม พ.ศ. 2559 C. Ashokkumar, Ravi Prakash Giri และ Bernard Menezes ได้นำเสนอการโจมตีช่องทางด้านข้างในการใช้งาน AES ที่สามารถกู้คืนคีย์ AES 128 บิตทั้งหมดได้ในเพียง 6–7 บล็อกของข้อความธรรมดา/ข้อความเข้ารหัส ซึ่งเป็นการปรับปรุงที่สำคัญเมื่อเทียบกับงานก่อนหน้านี้ที่ต้องใช้การเข้ารหัสระหว่าง 100 ถึง 1 ล้านครั้ง[ 37 ]การโจมตีที่เสนอต้องใช้สิทธิ์ผู้ใช้มาตรฐานและอัลกอริธึมการดึงคีย์ที่ทำงานภายใต้หนึ่งนาที
CPU สมัยใหม่หลายตัวมีคำสั่งฮาร์ดแวร์ในตัวสำหรับ AESซึ่งป้องกันการโจมตีช่องทางด้านข้างที่เกี่ยวข้องกับเวลา[ 38 ] [ 39 ]
การโจมตีควอนตัม
AES-256 ถือว่ามีความต้านทานต่อควอนตัมเนื่องจากมีความต้านทานต่อควอนตัมที่คล้ายคลึงกับความต้านทานของ AES-128 ต่อการโจมตีแบบดั้งเดิมที่ไม่ใช่ควอนตัมที่ระดับความปลอดภัย 128 บิต AES-192 และ AES-128 ไม่ถือว่ามีความต้านทานต่อควอนตัมเนื่องจากขนาดคีย์ที่เล็กกว่า AES-192 มีความแข็งแกร่ง 96 บิตต่อการโจมตีควอนตัม และ AES-128 มีความแข็งแกร่ง 64 บิตต่อการโจมตีควอนตัม ทำให้ทั้งสองไม่ปลอดภัย[ 40 ] [ 41 ]
การตรวจสอบโดย NIST/CSEC
โครงการตรวจสอบความถูกต้องของโมดูลการเข้ารหัส (CMVP) ดำเนินการร่วมกันโดย สถาบันมาตรฐานและเทคโนโลยีแห่งชาติ (NIST) ฝ่ายความปลอดภัยคอมพิวเตอร์ของรัฐบาลสหรัฐอเมริกา และ หน่วยงานความปลอดภัยด้านการสื่อสาร (CSE) ของรัฐบาลแคนาดา รัฐบาลสหรัฐอเมริกากำหนดให้ใช้โมดูลการเข้ารหัสที่ได้รับการตรวจสอบความถูกต้องตามมาตรฐาน NIST FIPS 140-2 สำหรับการเข้ารหัสข้อมูลทั้งหมดที่มีการจำแนกประเภทเป็น Sensitive but Unclassified (SBU) หรือสูงกว่า จาก NSTISSP #11 นโยบายแห่งชาติว่าด้วยการได้มาซึ่งการประกันความปลอดภัยของข้อมูล: "ผลิตภัณฑ์การเข้ารหัสเพื่อปกป้องข้อมูลลับจะได้รับการรับรองโดย NSA และผลิตภัณฑ์การเข้ารหัสที่มุ่งหมายเพื่อปกป้องข้อมูลที่ละเอียดอ่อนจะได้รับการรับรองตามมาตรฐาน NIST FIPS 140-2" [ 42 ]
รัฐบาลแคนาดายังแนะนำให้ใช้ โมดูลการเข้ารหัสที่ผ่านการตรวจสอบตามมาตรฐาน FIPS 140ในแอปพลิเคชันที่ไม่เป็นความลับของหน่วยงานต่างๆ ในรัฐ อีกด้วย
แม้ว่าเอกสาร NIST ฉบับที่ 197 (“FIPS 197”) จะเป็นเอกสารฉบับเดียวที่ครอบคลุมอัลกอริทึม AES แต่โดยทั่วไปแล้วผู้จำหน่ายจะติดต่อ CMVP ภายใต้มาตรฐาน FIPS 140 และขอให้ตรวจสอบความถูกต้องของอัลกอริทึมหลายตัว (เช่นTriple DESหรือSHA1 ) ในเวลาเดียวกัน ดังนั้นจึงหาโมดูลการเข้ารหัสที่ได้รับการตรวจสอบความถูกต้องตามมาตรฐาน FIPS 197 เพียงอย่างเดียวได้ยาก และ NIST เองก็มักจะไม่แสดงรายการโมดูลที่ได้รับการตรวจสอบความถูกต้องตามมาตรฐาน FIPS 197 แยกต่างหากบนเว็บไซต์สาธารณะของตน แต่การตรวจสอบความถูกต้องตามมาตรฐาน FIPS 197 มักจะแสดงเป็นข้อความ “FIPS approved: AES” (พร้อมหมายเลขใบรับรอง FIPS 197 เฉพาะ) ในรายการโมดูลการเข้ารหัสที่ได้รับการตรวจสอบความถูกต้องตามมาตรฐาน FIPS 140 ในปัจจุบัน
โปรแกรมตรวจสอบความถูกต้องของอัลกอริธึมการเข้ารหัส (CAVP) [ 43 ]อนุญาตให้มีการตรวจสอบความถูกต้องของการใช้งานอัลกอริธึม AES อย่างอิสระ การตรวจสอบความถูกต้องที่ประสบความสำเร็จจะทำให้ได้รับการระบุไว้ในหน้าการตรวจสอบความถูกต้องของ NIST [ 44 ]การทดสอบนี้เป็นข้อกำหนดเบื้องต้นสำหรับการตรวจสอบความถูกต้องของโมดูล FIPS 140-2 อย่างไรก็ตาม การตรวจสอบความถูกต้องของ CAVP ที่ประสบความสำเร็จไม่ได้หมายความว่าโมดูลการเข้ารหัสที่ใช้อัลกอริธึมนั้นปลอดภัย โมดูลการเข้ารหัสที่ขาดการตรวจสอบความถูกต้อง FIPS 140-2 หรือการอนุมัติเฉพาะจาก NSA จะไม่ถือว่าปลอดภัยโดยรัฐบาลสหรัฐฯ และไม่สามารถใช้เพื่อปกป้องข้อมูลของรัฐบาลได้[ 42 ]
การตรวจสอบความถูกต้องตามมาตรฐาน FIPS 140-2 นั้นมีความท้าทายทั้งในด้านเทคนิคและด้านการเงิน[ 45 ]มีชุดการทดสอบมาตรฐานรวมถึงการตรวจสอบรหัสต้นฉบับที่ต้องผ่านในช่วงเวลาหลายสัปดาห์ ค่าใช้จ่ายในการทำการทดสอบเหล่านี้ผ่านห้องปฏิบัติการที่ได้รับการอนุมัติอาจมีจำนวนมาก (เช่น มากกว่า30,000 ดอลลาร์สหรัฐ ) [ 45 ]และยังไม่รวมเวลาที่ใช้ในการเขียน ทดสอบ จัดทำเอกสาร และเตรียมโมดูลสำหรับการตรวจสอบความถูกต้อง หลังจากตรวจสอบความถูกต้องแล้ว โมดูลจะต้องถูกส่งใหม่และประเมินใหม่หากมีการเปลี่ยนแปลงใดๆ ซึ่งอาจแตกต่างกันไปตั้งแต่การอัปเดตเอกสารอย่างง่ายหากฟังก์ชันการรักษาความปลอดภัยไม่ได้เปลี่ยนแปลง ไปจนถึงชุดการทดสอบใหม่ที่ครอบคลุมมากขึ้นหากฟังก์ชันการรักษาความปลอดภัยได้รับผลกระทบจากการเปลี่ยนแปลง
เวกเตอร์ทดสอบ
เวกเตอร์ทดสอบคือชุดของรหัสลับที่ทราบแล้วสำหรับอินพุตและคีย์ที่กำหนด NIST เผยแพร่ข้อมูลอ้างอิงของเวกเตอร์ทดสอบ AES ในชื่อเวกเตอร์ทดสอบคำตอบที่ทราบแล้วของ AES (AES Known Answer Test (KAT) Vectors) [หมายเหตุ 6 ]
ผลงาน
ความเร็วสูงและความต้องการ RAM ต่ำเป็นหนึ่งในเกณฑ์ที่ใช้ในกระบวนการคัดเลือก AES เมื่อเลือกใช้เป็นอัลกอริทึม AES ก็ทำงานได้ดีบนฮาร์ดแวร์หลากหลายประเภท ตั้งแต่สมาร์ทการ์ด 8 บิต ไปจนถึงคอมพิวเตอร์ประสิทธิภาพสูง
บนPentium Proการเข้ารหัส AES ต้องใช้รอบสัญญาณนาฬิกา 18 รอบต่อไบต์ (cpb) [ 46 ]ซึ่งเทียบเท่ากับอัตราการส่งข้อมูลประมาณ11 MiB/sสำหรับ โปรเซสเซอร์200 เมกะเฮิร์ตซ์
บนซีพียูIntel CoreและAMD Ryzen ที่รองรับส่วนขยาย ชุดคำสั่ง AES-NIอัตราการประมวลผลอาจสูงถึงหลาย GiB/s [ 47 ]บนซีพียู Intel Westmereการเข้ารหัส AES โดยใช้ AES-NI ใช้เวลาประมาณ1.3 cpbสำหรับ AES-128 และ1.8 cpbสำหรับ AES-256 [ 48 ]
การนำไปใช้
ดูเพิ่มเติม
- โหมดการทำงานของ AES
- การเข้ารหัสดิสก์
- Whirlpool – ฟังก์ชันแฮชที่สร้างโดย Vincent Rijmen และ Paulo SLM Barreto
- รายชื่อแพ็กเกจซอฟต์แวร์ฟรีและโอเพนซอร์ส
หมายเหตุ
- ↑อัลกอริทึม Rijndael รองรับขนาดคีย์ 128, 160, 192, 224 และ 256 บิต แต่มาตรฐาน AES กำหนดขนาดคีย์ไว้เพียง 128, 192 และ 256 บิตเท่านั้น
- ↑อัลกอริทึม Rijndael รองรับขนาดบล็อก 128, 160, 192, 224 และ 256 บิตสำหรับแต่ละขนาดคีย์ แต่มาตรฐาน AES ระบุเฉพาะขนาดบล็อก 128 บิตเท่านั้น
- ↑ดูหัวข้อ § ความปลอดภัยด้านล่าง
- ↑รูปแบบ Rijndael แบบบล็อกขนาดใหญ่ใช้อาร์เรย์ที่มีคอลัมน์เพิ่มเติม แต่จะมีสี่แถวเสมอ
- ↑รูปแบบการเข้ารหัส Rijndael ที่มีขนาดบล็อกใหญ่กว่าจะมีค่าออฟเซ็ตที่แตกต่างกันเล็กน้อย สำหรับบล็อกขนาด 128 บิตและ 192 บิต รูปแบบการเลื่อนจะเหมือนกัน แถวที่ nจะถูกเลื่อนไปทางซ้ายแบบวงกลม เป็นระยะ n −1ไบต์ สำหรับบล็อกขนาด 256 บิต แถวแรกจะไม่มีการเปลี่ยนแปลง และการเลื่อนสำหรับแถวที่สอง สาม และสี่ จะเป็น 1 ไบต์ 3 ไบต์ และ 4 ไบต์ ตามลำดับ—การเปลี่ยนแปลงนี้ใช้ได้เฉพาะกับการเข้ารหัส Rijndael เมื่อใช้กับบล็อกขนาด 256 บิตเท่านั้น เนื่องจาก AES ไม่ได้ใช้บล็อกขนาด 256 บิต
- ↑เวกเตอร์ทดสอบคำตอบที่ทราบ (KAT) ของ AES มีให้ดาวน์โหลดในรูปแบบ Zip ภายในเว็บไซต์ NISTที่นี่(เก็บถาวรเมื่อ 2009-10-23 ที่Wayback Machine)
ลิงก์ภายนอก
- "คีย์ 256 บิต – บล็อก 128 บิต – AES" การเข้ารหัส – รหัสลับ 256 บิต : รหัสอ้างอิงและผลงานที่ส่งเข้าประกวดการออกแบบการเข้ารหัสระดับนานาชาติ EmbeddedSW
- "มาตรฐานการเข้ารหัสขั้นสูง (AES)" (PDF) . มาตรฐานการประมวลผลข้อมูลของรัฐบาลกลาง . 26 พฤศจิกายน 2544. doi : 10.6028/NIST.FIPS.197 . 197.
- ข้อมูลเกี่ยวกับอัลกอริธึม AES (เก่า ไม่ได้รับการบำรุงรักษา)
- "ส่วนที่ 3: การเข้ารหัสแบบบล็อก" (PDF)เทคโนโลยีสารสนเทศ – เทคนิคความปลอดภัย – อัลกอริทึมการเข้ารหัส ( ฉบับที่ 2) ISO 15 ธันวาคม 2010 ISO/IEC 18033-3:2010(E) เก็บถาวร(PDF)จากต้นฉบับเมื่อ 9 ตุลาคม 2022
- แอนิเมชั่นแสดงคำอธิบายเชิงลึกของ Rijndael – AES และสร้างภาพเคลื่อนไหวโดยใช้ Flash (โดย Enrique Zabala / มหาวิทยาลัย ORT / มอนเตวิเดโอ / อุรุกวัย) แอนิเมชั่นนี้ (เป็นภาษาอังกฤษ สเปน และเยอรมัน) เป็นส่วนหนึ่งของCrypTool 1 (เมนู ขั้นตอนการทำงานแต่ละอย่าง → การแสดงภาพอัลกอริทึม → AES)
- แอนิเมชั่น HTML5 ของ Rijndael – แอนิเมชั่นเดียวกันกับด้านบนที่สร้างด้วย HTML5
- การสาธิต AES ใน Excel - ตัวอย่างการใช้งานและการสาธิตใน Excel (โดยไม่ใช้มาโคร) โดย Tim Wambach