ใน DES เป็นรหัสบล็อกแบบสมมาตรที่นำมาใช้โดยสถาบันมาตรฐานและเทคโนโลยีแห่งชาติ (NIST) DES ถูกนำมาใช้เป็น FIPS 46 ใน Federal Register ในเดือนมกราคม 1977
NIST สามารถแสดง DES เป็นมาตรฐานสำหรับใช้ในซอฟต์แวร์ที่ไม่จัดประเภท DES เป็นรหัสบล็อกคีย์สมมาตรที่ใช้กันอย่างแพร่หลายมากที่สุดเนื่องจากมีการตีพิมพ์ ต่อมา NIST ได้ออกมาตรฐานใหม่ (FIPS 46-3) ซึ่งยืนยันการใช้ DES สามตัว (รหัส DES ซ้ำ 3 ครั้ง) สำหรับซอฟต์แวร์ในอนาคต
DES มีขนาดบล็อก 64 บิตและต้องการคีย์ 56 บิตระหว่างการใช้งาน (8 พาริตีบิตถูกกีดกันออกจากคีย์ 64 บิตที่สมบูรณ์) DES เป็นระบบเข้ารหัสแบบสมมาตร โดยเฉพาะรหัส Feistel 16 รอบ
บล็อกถูกเข้ารหัสภายใต้การเรียงสับเปลี่ยน IP เริ่มต้น และด้วยเหตุนี้จึงเกิดการคำนวณที่ขึ้นกับคีย์ที่ซับซ้อน และสุดท้ายคือการเปลี่ยนแปลงซึ่งตรงกันข้ามกับ IP การเปลี่ยนแปลงเริ่มต้น -1 .
การเรียงสับเปลี่ยนคือการดำเนินการที่ดำเนินการโดยฟังก์ชัน ซึ่งเปลี่ยนองค์ประกอบที่ตำแหน่ง j ไปยังตำแหน่ง k การคำนวณที่ขึ้นกับคีย์สามารถแสดงได้ง่ายๆ ในเงื่อนไขของฟังก์ชัน-f เรียกว่าฟังก์ชันไซเฟอร์ และฟังก์ชัน KS เรียกว่ากำหนดการคีย์
บทบาทของกล่อง S ในฟังก์ชัน F คือการแทนที่รวมถึงกลุ่ม S-box แปดกล่อง แต่ละอันใช้ 6 บิตเป็นอินพุตและสร้าง 4 บิตดังนี้ - บิตแรกและบิตสุดท้ายของอินพุตไปยังกล่อง Si สร้างเลขฐานสอง 2 บิตเพื่อเลือกหนึ่งในสี่การแทนที่ที่แสดงโดยสี่แถวในตารางสำหรับ Si
สี่บิตตรงกลางเลือกหนึ่งในสิบหกคอลัมน์ ค่าทศนิยมในเซลล์ที่เลือกโดยแถวและคอลัมน์จะถูกแปลงเป็นคำอธิบาย 4 บิตเพื่อสร้างผลลัพธ์ ตัวอย่างเช่น ใน S1 สำหรับอินพุต 011001 แถวคือ 01 และคอลัมน์คือ 1100 ค่าในแถวที่ 1 คอลัมน์ 12 คือ 9 ดังนั้นเอาต์พุตคือ 1001
หลักการของ S-boxes มีดังนี้ −
-
S-box แต่ละกล่องต้องมีอินพุต 6 บิตและเอาต์พุต 4 บิต
-
ไม่มีบิตเอาต์พุตของ S-box ที่ควรอยู่ใกล้ฟังก์ชันเชิงเส้นของบิตอินพุตมากเกินไป (กล่อง S เป็นองค์ประกอบที่ไม่เชิงเส้นเพียงองค์ประกอบเดียวของ DES และความไม่เป็นเชิงเส้นเป็นจุดแข็งของอัลกอริทึม)
-
แต่ละ "แถว" ของ S-box ควรรวมเอาท์พุตที่เป็นไปได้ทั้งหมด (นี่เป็นการสุ่มเอาท์พุต)
-
หากอินพุตสองรายการในกล่อง S-box ต่างกันในหนึ่งบิต เอาต์พุตของอินพุตเหล่านั้นจะต้องต่างกันอย่างน้อยสองบิต
-
หากอินพุตสองตัวในกล่อง S-box ต่างกันโดยเฉพาะในสองบิตตรงกลาง และเอาต์พุตควรต่างกันอย่างน้อยสองบิต
-
หากอินพุตสองรายการไปยัง S-box ต่างกันในสองบิตแรกและเห็นด้วยกับสองบิตสุดท้าย เอาต์พุตทั้งสองควรไม่เหมือนกัน