ไซเฟอร์ ของ เออีเอส

เออีเอสใช้หลักที่เรียกว่า substitution-permutation network (เครือข่ายการแทนที่-การเรียงสับเปลี่ยน) ซึ่งมีประสิทธิภาพดีเมื่อทำให้เกิดผลทั้งในซอฟต์แวร์และฮาร์ดแวร์[9]ไม่เหมือนกับมาตรฐานก่อนคือ DES เออีเอสไม่ได้ใช้เครือข่ายฟายสเติล (Feistel network)[upper-alpha 6]เออีเอสเป็นรูปแปรของเรนดาลแต่มีขนาดบล็อกตายตัวที่ 128 บิต และขนาดกุญแจที่ 128, 192 หรือ 256 บิตเทียบกับเรนดาลที่กำหนดขนาดบล็อกและขนาดกุญแจที่เป็นพหุคูณ 32 บิตใด ๆ ก็ได้โดยน้อยสุดที่ 128 บิตและมากสุดที่ 256 บิตเออีเอสคำนวณโดยใช้แถวลำดับขนาด 4 × 4 เก็บต่อกันในความจำเรียงอันดับตามสดมภ์ (column-major order[upper-alpha 7]) เป็นหน่วยที่เรียกว่า "สเตต" (state)[upper-alpha 8]การคำนวณเออีเอสโดยมากจะทำในฟิลด์จำกัด (finite field)[upper-alpha 9]ยกตัวอย่างเช่น ถ้ามีไบต์ 16 ไบต์ คือ b 0 , b 1 , . . . , b 15 {\displaystyle b_{0},b_{1},...,b_{15}} ก็สามารถแสดงเป็นแถวลำดับสองมิติ คือ

[ b 0 b 4 b 8 b 12 b 1 b 5 b 9 b 13 b 2 b 6 b 10 b 14 b 3 b 7 b 11 b 15 ] {\displaystyle {\begin{bmatrix}b_{0}&b_{4}&b_{8}&b_{12}\\b_{1}&b_{5}&b_{9}&b_{13}\\b_{2}&b_{6}&b_{10}&b_{14}\\b_{3}&b_{7}&b_{11}&b_{15}\end{bmatrix}}}

ขนาดกุญแจที่ใช้ในไซเฟอร์เออีเอสจะระบุจำนวนรอบการแปลง (transformation round) ที่เปลี่ยนอินพุตซึ่งเรียกว่า ข้อความธรรมดา (plaintext) เป็นเอาต์พุตสุดท้ายซึ่งเรียกว่า ข้อความไซเฟอร์ (ciphertext)จำนวนรอบที่ต้องคำนวณ คือ

  • 10 รอบสำหรับกุญแจขนาด 128 บิต
  • 12 รอบสำหรับกุญแจขนาด 192 บิต
  • 14 รอบสำหรับกุญแจขนาด 256 บิต

แต่ละรอบจะมีขั้นประมวลผลหลายขั้น รวมทั้งขั้นที่ต้องอาศัยกุญแจการเข้ารหัสการถอดรหัสจะใช้รอบกลับกันเพื่อเปลี่ยนข้อความไซเฟอร์กลับไปเป็นข้อความธรรมดาดั้งเดิมด้วยกุญแจเดียวกัน

ขั้นตอนวิธีคร่าว ๆ

  1. KeyExpansion (การขยายจำนวนกุญแจ) —กุญแจที่ใช้ในแต่ละรอบจะทำจากกุญแจสมมาตรด้วยขั้นตอนวิธี Rijndael key schedule[upper-alpha 10] เออีเอสต้องใช้บล็อกกุญแจขนาด 128 บิตหนึ่งบล็อกต่างหาก (round key block - บล็อกกุญแจรอบ) สำหรับการคำนวณแต่ละรอบ บวกเพิ่มอีกหนึ่งตัว
  2. การบวกกุญแจรอบเบื้องต้น
    1. AddRoundKey—ไบต์แต่ละไบต์ของสเตตจะรวมเข้ากับบล็อกหนึ่งของกุญแจรอบด้วย bitwise xor
  3. ทำดังนี้ 9, 11 หรือ 13 รอบ
    1. SubBytes (แทนที่ไบต์)—ขั้นการแทนที่แบบไม่เชิงเส้น (non-linear)—ไบต์แต่ละไบต์จะแทนที่ด้วยไบต์อีกไบต์หนึ่งตามตารางค้นหา คือ Rijndael S-box[upper-alpha 11]
    2. ShiftRows (เลื่อนแถว) —ขั้นการย้ายสดมภ์—แถวสุดท้าย 3 แถวของสเตตจะเลื่อนหมุนเป็นจำนวนหนึ่ง
    3. MixColumns (ผสมสดมภ์) —เป็นปฏิบัติการผสมเชิงเส้น ซึ่งดำเนินการต่อสดมภ์ของสเตต เป็นการรวมไบต์ 4 ไบต์ของสดมภ์แต่ละสดมภ์
    4. AddRoundKey
  4. รอบสุดท้าย (จึงรวมเป็น 10, 12 หรือ 14 รอบทั้งหมด)
    1. SubBytes
    2. ShiftRows
    3. AddRoundKey

ขั้น SubBytes

ในขั้น SubBytes ไบต์แต่ละไบต์ของสเตตจะแทนด้วยเลขในตารางค้นหาแบบ 8 บิต คือ S ดังนั้น bij = S(aij)

ในขั้น SubBytes ไบต์แต่ละไบต์ คือ a i , j {\displaystyle a_{i,j}} ของสเตตจะแทนที่ด้วย SubByte S ( a i , j ) {\displaystyle S(a_{i,j})} โดยใช้ตารางค้นหา คือ substitution box (S-box)[upper-alpha 12]แบบ 8 บิตปฏิบัติการนี้ทำให้ได้ความไม่เป็นเชิงเส้น (non-linearity) ในไซเฟอร์S-box ที่ใช้ได้มาจากตัวผกผันการคูณของฟิลด์จำกัด (28) ซึ่งรู้ว่ามีคุณสมบัติไม่ใช่เชิงเส้น (non-linearity) ที่ดี เพื่อหลีกเลี่ยงการโจมตีอาศัยคุณสมบัติพีชคณิตที่ง่าย ๆ S-box สร้างโดยรวมฟังก์ชันผกผัน (inverse function) กับการแปลงสัมพรรคที่หาตัวผกผันได้ (invertible affine transformation[upper-alpha 13])S-box ยังเลือกไม่ให้มีจุดตรึง (ดังนั้นจึงเป็น derangement[upper-alpha 14]) คือ S ( a i , j ) ≠ a i , j {\displaystyle S(a_{i,j})\neq a_{i,j}} และไม่ให้มีจุดตรึงตรงกันข้าม คือ S ( a i , j ) ⊕ a i , j ≠ FF 16 {\displaystyle S(a_{i,j})\oplus a_{i,j}\neq {\text{FF}}_{16}} เมื่อถอดรหัส ขั้น InvSubBytes (ซึ่งเป็นฟังก์ชันผกผันของ SubBytes) จะต้องหาค่าผกผันของการแปลงสัมพรรคก่อนแล้วจึงหาตัวผกผันการคูณ

ขั้น ShiftRows

ในขั้น ShiftRows ไบต์จากแต่ละแถวของสเตตจะเลื่อนหมุนไปทางซ้ายจำนวนที่เลื่อนจะต่างกันในแต่ละแถว

ขั้น ShiftRows ปฏิบัติการต่อแถวของสเตตคือเลื่อนหมุนไบต์แต่ละไบต์ของแถวไปช่วงระยะหนึ่ง โดยแถวแรกจะไม่เลื่อนแถวสองเลื่อนหมุนไปทางซ้ายหนึ่งช่องโดยนัยเดียวกัน แถวสามและแถวสี่จะเลื่อนหมุนไป 2 และ 3 ช่องตามลำดับ[upper-alpha 15]ด้วยวิธีนี้ สดมภ์แต่ละสดมภ์ของสเตตที่เป็นเอาต์พุตของขั้น ShiftRows จะประกอบด้วยไบต์จากสดมภ์ทุกสดมภ์ของสเตตที่เป็นอินพุตขั้นนี้สำคัญเพราะเลี่ยงไม่ให้สดมภ์แต่ละสดมภ์เข้ารหัสลับอย่างเป็นอิสระจากกันและกัน ไม่งั้นแล้วเออีเอสก็จะเสื่อมเป็นบล็อกไซเฟอร์[upper-alpha 4] 4 บล็อกที่เป็นอิสระจากกันและกัน

ขั้น MixColumns

ในขั้น MixColumns สดมภ์แต่ละสดมภ์ของสเตตจะคูณด้วยพหุนามตายตัว คือ c ( x ) {\displaystyle c(x)}
ส่วนนี้รอเพิ่มเติมข้อมูล คุณสามารถช่วยเพิ่มข้อมูลส่วนนี้ได้

ในขั้น MixColumns ไบต์สี่ไบต์จากสดมภ์แต่ละสดมภ์จะนำมารวมกันโดยใช้การแปลงเชิงเส้นที่หาตัวผกผันได้ (invertible linear transformation) ฟังก์ชัน MixColumns รับไบต์สี่ไบต์เป็นอินพุต และออกไบต์สี่ไบต์เป็นเอาต์พุต โดยไบต์อินพุตแต่ละไบต์จะมีผลต่อไบต์เอาต์พุตทั้งหมดเมื่อรวมกับขั้น ShiftRows ขั้น MixColumns นี้ให้คุณสมบัติความแพร่ (diffusion)[upper-alpha 16]ต่อไซเฟอร์

ในปฏิบัติการนี้ สดมภ์แต่ละสดมภ์จะแปลงด้วยเมทริกซ์ เป็นการคูณเมทริกซ์มีค่าตายตัวกับสดมภ์โดยได้ผลเป็นค่าสดมภ์ใหม่ในสเตต

[ b 0 , j b 1 , j b 2 , j b 3 , j ] = [ 2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2 ] [ a 0 , j a 1 , j a 2 , j a 3 , j ] 0 ≤ j ≤ 3 {\displaystyle {\begin{bmatrix}b_{0,j}\\b_{1,j}\\b_{2,j}\\b_{3,j}\end{bmatrix}}={\begin{bmatrix}2&3&1&1\\1&2&3&1\\1&1&2&3\\3&1&1&2\end{bmatrix}}{\begin{bmatrix}a_{0,j}\\a_{1,j}\\a_{2,j}\\a_{3,j}\end{bmatrix}}\qquad 0\leq j\leq 3}

การ "คูณ" เมทริกซ์ประกอบด้วยการคูณและการบวกช่องในเมทริกซ์ การบวกใช้ปฏิบัติการ XOR ส่วนการคูณเป็นปฏิบัติการที่ซับซ้อน บทความนี้ไม่กล่าวถึงรายละเอียด

ขั้น AddRoundKey

ในขั้น AddRoundKey ไบต์แต่ละไบต์ของสเตตจะรวมเข้ากับไบต์ของกุญแจรอบย่อย (round subkey) ด้วยปฏิบัติการ XOR (⊕)

ในขั้น AddRoundKey กุญแจย่อย (subkey) จะรวมเข้ากับสเตตในแต่ละรอบ กุญแจย่อยจะทำมาจากกุญแจหลักด้วยขั้นตอนวิธี Rijndael key schedule[upper-alpha 10]กุญแจย่อยแต่ละตัวมีขนาดเท่ากับสเตตไบต์แต่ละไบต์ของสเตตจะรวมเข้ากับไบต์ของกุญแจย่อยที่ตรงกันด้วย bitwise XOR

การเร่งความเร็ว

ในระบบที่ใช้คำ (word) มีขนาด 32 บิตหรือยาวกว่า สามารถเร่งปฏิบัติการของไซเฟอร์นี้ด้วยการรวมขั้นตอน SubBytes และ ShiftRows กับ MixColumns โดยแปลงให้เป็นการค้นหาในตารางตามลำดับซึ่งใช้ตารางเก็บค่า 32 บิต มีรายการ 256 รายการ ทั้งหมด 4 ตาราง รวมใช้ที่ 4096 ไบต์การคำนวณรอบหนึ่งจึงสามารถทำด้วยการค้นหาตาราง 16 ครั้ง และปฏิบัติการ XOR แบบ 32 บิต 12 ครั้ง ตามด้วยปฏิบัติการ XOR แบบ 32 บิต 4 ครั้งในขั้น AddRoundKey[13]อีกอย่างหนึ่ง การค้นหาตารางสามารถทำกับตารางเก็บค่า 32 บิตมีรายการ 256 รายการตารางเดียว (รวมใช้ที่ 1024 ไบต์) ตามด้วยการหมุนเป็นวง (circular rotation)

อนึ่ง ถ้าใช้วิธีทำเป็นไบต์ ก็จะสามารถรวมขั้น SubBytes, ShiftRows และ MixColumns เป็นปฏิบัติการเดียวต่อรอบ[14]

แหล่งที่มา

WikiPedia: เออีเอส http://www.findarticles.com/p/articles/mi_m0IKZ/is... http://www.formaestudio.com/rijndaelinspector/arch... http://www.macfergus.com/pub/rdalgeq.html http://research.microsoft.com/en-us/projects/crypt... http://www.schneier.com/blog/archives/2005/05/aes_... http://www.schneier.com/crypto-gram-0010.html http://www.schneier.com/crypto-gram-0209.html http://www.schneier.com/paper-aes-performance.pdf http://www.schneier.com/paper-twofish-final.pdf http://www.springerlink.com/index/UVX5NQGNN55VK199...