วิธีการเข้ารหัสข้อมูล - บล็อกโปรแกรมเมอร์เว็บ อัลกอริธึมการเข้ารหัสที่ทันสมัย

ในศตวรรษที่ 21 การเข้ารหัสมีบทบาทสำคัญอย่างยิ่ง ชีวิตดิจิทัล คนสมัยใหม่- มาดูวิธีการเข้ารหัสข้อมูลโดยย่อ

การเข้ารหัสไม่ได้เป็นเพียงเรื่องของคอมพิวเตอร์เท่านั้น

เป็นไปได้มากว่าคุณได้พบการเข้ารหัสขั้นพื้นฐานแล้วและอาจรู้วิธีการเข้ารหัสบางอย่าง ตัวอย่างเช่น Caesar Cipher มักใช้ในเกมการศึกษาสำหรับเด็ก

ROT13 เป็นการเข้ารหัสข้อความทั่วไปอีกประเภทหนึ่ง ในนั้นตัวอักษรแต่ละตัวจะเลื่อนไป 13 ตำแหน่งดังแสดงในรูป:

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

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

คำจำกัดความและ คำแนะนำฉบับย่อเกี่ยวกับความปลอดภัยทางไซเบอร์

ในการรักษาความปลอดภัยทางไซเบอร์ มีหลายสิ่งที่ผู้ใช้กังวลเมื่อพูดถึงข้อมูลใดๆ ซึ่งรวมถึงการรักษาความลับ ความสมบูรณ์ และความพร้อมของข้อมูล

การรักษาความลับ– ข้อมูลไม่สามารถรับหรืออ่านโดยผู้ใช้ที่ไม่ได้รับอนุญาต

ความสมบูรณ์ของข้อมูล– มั่นใจว่าข้อมูลจะยังคงอยู่ 100% และผู้โจมตีจะไม่ถูกเปลี่ยนแปลง

ความพร้อมของข้อมูล– เข้าถึงข้อมูลเมื่อจำเป็น

นอกจากนี้เราจะพิจารณาในบทความด้วย รูปทรงต่างๆการเข้ารหัสดิจิทัลและวิธีการที่จะช่วยให้บรรลุเป้าหมายที่ระบุไว้ข้างต้น

วิธีการเข้ารหัสขั้นพื้นฐาน:
  • สมมาตร
  • อสมมาตร
  • การแฮช
  • ลายเซ็นดิจิทัล

การเข้ารหัสแบบสมมาตร

ก่อนที่เราจะเข้าเรื่อง เรามาตอบคำถามง่ายๆ ก่อนว่า "การเข้ารหัส" หมายความว่าอย่างไรกันแน่? การเข้ารหัสคือการเปลี่ยนแปลงข้อมูลเพื่อซ่อนจากบุคคลที่ไม่ได้รับอนุญาต แต่ในขณะเดียวกันก็จัดเตรียมไว้ให้ ผู้ใช้ที่ได้รับอนุญาตเข้าถึงมัน

ในการเข้ารหัสและถอดรหัสข้อมูลอย่างเหมาะสม คุณต้องมีสองสิ่ง: ข้อมูลและคีย์ถอดรหัส เมื่อใช้การเข้ารหัสแบบสมมาตร คีย์สำหรับการเข้ารหัสและถอดรหัสข้อมูลจะเหมือนกัน ลองใช้สตริงและเข้ารหัสโดยใช้ Ruby และ OpenSSL:

ทับทิม

ต้องการ "openssl" ต้องการ "pry" data_to_encrypt = "now คุณสามารถอ่านฉัน!" cipher = OpenSSL::Cipher.new("aes256") คีย์ cipher.encrypt = cipher.random_key iv = cipher.random_iv data_to_encrypt = cipher.update(data_to_encrypt) + cipher.finalbinding.pry true

ต้องการ "openssl"

ต้อง "แงะ"

การเข้ารหัส = OpenSSL::การเข้ารหัส ใหม่("aes256")

การเข้ารหัส เข้ารหัส

คีย์ = รหัส สุ่ม_คีย์

iv = รหัส สุ่ม_iv

data_to_encrypt = รหัส อัปเดต (data_to_encrypt) + การเข้ารหัส สุดท้าย

ผูกพัน. แงะ

จริง

นี่คือสิ่งที่โปรแกรมจะส่งออก:

โปรดทราบว่าตัวแปร data_to_encryptซึ่งแต่เดิมเป็นบรรทัดที่ว่า “ตอนนี้คุณอ่านฉันได้แล้ว!” กลายเป็นกลุ่มตัวอักษรที่เข้าใจยาก เรามาย้อนกลับกระบวนการโดยใช้คีย์ที่เดิมเก็บไว้ในตัวแปร สำคัญ.

หลังจากใช้คีย์เดียวกับที่เราตั้งค่าไว้สำหรับการเข้ารหัส เราจะถอดรหัสข้อความและรับสตริงดั้งเดิม

ลองดูวิธีการเข้ารหัสอื่น ๆ

การเข้ารหัสแบบอสมมาตร

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

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

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

แต่คุณจะเข้าใจอะไรได้อย่างไร กุญแจสาธารณะเซิร์ฟเวอร์เป็นของเซิร์ฟเวอร์นี้โดยเฉพาะ? มีหลายวิธีในการแก้ปัญหานี้ วิธีการที่พบบ่อยที่สุด (และวิธีที่ใช้บนอินเทอร์เน็ต) คือการใช้โครงสร้างพื้นฐานคีย์สาธารณะ (PKI) ในกรณีของเว็บไซต์ จะมีผู้ออกใบรับรองซึ่งมีไดเร็กทอรีของเว็บไซต์ทั้งหมดที่มีการออกใบรับรองและคีย์สาธารณะ เมื่อคุณเชื่อมต่อกับเว็บไซต์ รหัสสาธารณะจะได้รับการตรวจสอบโดยผู้ออกใบรับรองในครั้งแรก

มาสร้างคีย์สาธารณะและคีย์ส่วนตัวขึ้นมาคู่กัน:

ทับทิม

need "openssl" need "pry" data_to_encrypt = "ตอนนี้คุณอ่านฉันได้แล้ว!" key = OpenSSL::PKey::RSA.new(2048)binding.pry จริง

ต้องการ "openssl"

ต้อง "แงะ"

data_to_encrypt = "ตอนนี้คุณอ่านฉันได้แล้ว!"

คีย์ = OpenSSL::PKey::RSA ใหม่ (2048)

ผูกพัน. แงะ

จริง

ปรากฎว่า:

โปรดทราบว่ากุญแจส่วนตัวและกุญแจสาธารณะคือ แยกวัตถุด้วยตัวระบุที่แตกต่างกัน โดยใช้ #private_encryptคุณสามารถเข้ารหัสสตริงโดยใช้ รหัสส่วนตัวและใช้ #public_decrypt– ถอดรหัสข้อความ:

ข้อมูลแฮช

การแฮชนั้นต่างจากการเข้ารหัสแบบสมมาตรและไม่สมมาตรตรงที่เป็นฟังก์ชันทางเดียว เป็นไปได้ที่จะสร้างแฮชจากข้อมูลบางส่วน แต่ไม่มีวิธีย้อนกลับกระบวนการ สิ่งนี้ทำให้การแฮชไม่ค่อยดีนัก ด้วยวิธีที่สะดวกการจัดเก็บข้อมูลแต่เหมาะสำหรับการตรวจสอบความสมบูรณ์ของข้อมูลบางส่วน

ฟังก์ชั่นรับข้อมูลบางอย่างเป็นอินพุตและเอาต์พุต ดูเหมือนว่า สตริงสุ่มซึ่งจะมีความยาวเท่ากันเสมอ ฟังก์ชันแฮชในอุดมคติจะสร้างค่าเฉพาะสำหรับอินพุตที่แตกต่างกัน อินพุตเดียวกันจะสร้างแฮชเดียวกันเสมอ ดังนั้นจึงสามารถใช้การแฮชเพื่อตรวจสอบความสมบูรณ์ของข้อมูลได้

ดังที่คุณจำได้ การเปลี่ยนแปลง การทดแทน การเรียงสับเปลี่ยน และการเข้ารหัส Vernam จะใช้การดำเนินการกับอักขระเฉพาะแต่ละตัวของข้อความ เราจำเป็นต้องเลื่อน - เราเลื่อนสัญลักษณ์ ใช้กุญแจ - นำไปใช้กับสัญลักษณ์ จากนั้นไปที่สัญลักษณ์ถัดไป ไปเรื่อยๆ จนกว่าเราจะเข้ารหัสสัญลักษณ์ทั้งหมด ข้อความธรรมดา- วิธีการเข้ารหัสนี้เรียกว่าการเข้ารหัสแบบสตรีม - เราเข้ารหัสอักขระแต่ละตัวแยกกัน อีกวิธีหนึ่งคือการแบ่งข้อความธรรมดาดั้งเดิมออกเป็นกลุ่มที่มีอักขระหลายตัว (บล็อก) และดำเนินการเข้ารหัสในแต่ละบล็อก นี่เป็นวิธีการเข้ารหัสแบบบล็อก

เพื่อให้ความแตกต่างระหว่างรหัสบล็อกและสตรีมชัดเจนขึ้น เราจะยกตัวอย่างโดยใช้รหัสทดแทนแบบง่าย

การเข้ารหัสสตรีม

มาเข้ารหัสคำว่า CIPHER ด้วยรหัสสตรีมทดแทน:

เราเข้ารหัสอักขระแต่ละตัวและได้รับไซเฟอร์เท็กซ์ มันไม่ง่ายไปกว่านี้แล้ว

บล็อกการเข้ารหัส

มาเข้ารหัสคำว่า AVADAKEDAVRA กันดีกว่า เนื่องจากการเข้ารหัสเป็นแบบบล็อกหนึ่ง เราจะแบ่งข้อความธรรมดาออกเป็นบล็อกที่มีอักขระสี่ตัว: AVAD | เอก | AVRA (ในทางปฏิบัติ บล็อกข้อความประกอบด้วย 64-256 บิต) สำหรับแต่ละบล็อก เราจะมีตารางทดแทนของเราเอง:

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

เครือข่ายฟีสเทล

ตอนนี้เราพร้อมที่จะก้าวไปสู่หัวข้อที่สำคัญมากซึ่งเปิดประตูสู่โลกอันกว้างใหญ่ ระบบที่ทันสมัยการเข้ารหัส เครือข่าย Feistel เป็นวิธีการเข้ารหัสแบบบล็อกที่พัฒนาโดย Horst Feistel ที่ห้องปฏิบัติการ IBM ในปี 1971 ปัจจุบันเครือข่าย Feistel เป็นรากฐาน ปริมาณมาก โปรโตคอลการเข้ารหัส- ลองคิดดูว่า "บนนิ้ว" คืออะไร

เครือข่าย Feistel ทำงานบนบล็อกข้อความธรรมดา ดังนั้นเราจะดูกลไกการทำงานของเครือข่ายหนึ่งบนบล็อกใดบล็อกหนึ่ง การดำเนินการสำหรับบล็อกที่เหลือจะคล้ายกัน

  • บล็อกแบ่งออกเป็นสองส่วนเท่า ๆ กัน - ซ้าย (L) และขวา (R)
  • หลังจากการแบ่งพาร์ติชัน บล็อกย่อยด้านซ้ายจะถูกแก้ไขโดยฟังก์ชัน f โดยใช้คีย์ K: x = f(L, K) ในฐานะฟังก์ชัน คุณสามารถจินตนาการถึงการเปลี่ยนแปลงใดๆ ที่คุณต้องการได้ ตัวอย่างเช่น รหัส shift แบบเก่าที่ดีที่มีคีย์ K
  • บล็อกย่อยที่ได้จะถูกเพิ่มแบบโมดูโล 2 ด้วยบล็อกย่อยที่ถูกต้อง R ซึ่งไม่เคยใช้มาก่อน: x=x+R
  • จากนั้นชิ้นส่วนที่ได้จะถูกสลับและติดกาวเข้าด้วยกัน

อย่างที่คุณเห็นทุกอย่างค่อนข้างง่าย เพื่อทำความเข้าใจวิธีการทำงาน ให้ดูแผนภาพ:

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

ตอนนี้เรามาดูการทำงานของเครือข่าย Feistel โดยใช้ตัวอย่าง ลองใช้คำว่า AVADAKDAVRA แล้วแบ่งออกเป็นสองช่วงตึก กลุ่มละ 6 ตัวอักษร - AVADAK | เอดาฟรา. สำหรับฟังก์ชัน เราใช้รหัสกะตามจำนวนตำแหน่งที่กำหนดโดยปุ่มกลม ให้คีย์ลับ K = . ในฐานะที่เป็นคีย์กลม เราใช้ K = 1, K = 2 สำหรับการบวกโมดูโล 2 เราจะแปลงข้อความเป็นรหัสไบนารี่ตามตัวอักษรโทรเลข ซึ่งแทบจะไม่มีใครใช้เลย

นี่คือสิ่งที่เกิดขึ้น:

ตอนนี้เรามาเริ่มบล็อกแรกผ่านเครือข่าย Feistel กันเป็นสองรอบ:

ลองเข้ารหัสบล็อกที่สองด้วยตัวเอง ฉันได้รับ MOSSTR

การถอดรหัสจะดำเนินการในลักษณะเดียวกันทุกประการ: ไซเฟอร์เท็กซ์จะถูกแบ่งออกเป็นบล็อกแล้วบล็อกย่อย บล็อกย่อยด้านซ้ายจะเข้าสู่ฟังก์ชัน เพิ่มโมดูโล 2 ด้วยอันที่ถูกต้อง จากนั้นบล็อกย่อยจะถูกสลับ ข้อแตกต่างคือส่งคีย์แบบกลมในลำดับย้อนกลับนั่นคือในกรณีของเราในรอบแรกเราจะใช้คีย์ K = 2 จากนั้นในรอบที่สอง K = 1

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

GOST 28147-89 (แม็กม่า)

เรามีแนวคิดที่จำเป็นเกือบทั้งหมดในคลังแสงของเราแล้ว ดังนั้นเราจึงพร้อมที่จะไปยังหัวข้อสำคัญอันดับแรกของการเข้ารหัสในประเทศ - GOST 28147-89 เป็นเรื่องที่ควรค่าแก่การบอกว่ามีเพียงคนขี้เกียจเท่านั้นที่ไม่ได้เขียนเกี่ยวกับมาตรฐานนี้ ดังนั้นฉันจะพยายามเป็นครั้งที่ล้านและครั้งแรกเพื่อสรุปสั้น ๆ และไม่มีสูตรมากมายที่สรุปสาระสำคัญของโหมดการเข้ารหัสของ Magma ที่ยิ่งใหญ่และน่ากลัว หากคุณตัดสินใจที่จะอ่านมาตรฐาน คุณควรตุนเวลา พลังงาน ความอดทน และอาหารเอาไว้ เพราะมาตรฐานเป็นเช่นนั้น ภาษามนุษย์ดังที่คุณทราบห้ามเขียนโดยเด็ดขาด

ลักษณะหลัก: คีย์ 256 บิต บล็อก 64 บิต

ก่อนที่จะวิเคราะห์ Magma คุณต้องเรียนรู้แนวคิดใหม่ - ตารางการแทนที่หรือ S-box นี่เป็นตารางประเภทเดียวกับตารางในรหัสทดแทน ออกแบบมาเพื่อแทนที่สัญลักษณ์บล็อกย่อยด้วยสัญลักษณ์ที่บันทึกไว้ในตาราง อย่าคิดว่า S-box เป็นตัวเลขสุ่มที่สร้างโดยฟังก์ชัน rand() S-box เป็นผลมาจากลำดับที่สร้างขึ้นอย่างรอบคอบ เนื่องจากความแข็งแกร่งของการเข้ารหัสของการเข้ารหัสทั้งหมดขึ้นอยู่กับลำดับเหล่านั้น

GOST 28147 อธิบายตารางทดแทนอย่างจำกัด เพียงแต่บอกว่าพวกมันเป็นองค์ประกอบลับเพิ่มเติม (พร้อมด้วย รหัสลับ) และ "จัดส่งแล้ว ในลักษณะที่กำหนด- ไม่มีอะไรเพิ่มเติม นับตั้งแต่มีการนำ GOST 28147 มาใช้ ความไม่แน่นอนทางวิทยาศาสตร์และทางเทคนิคที่เกี่ยวข้องกับการเลือก S-box ทำให้เกิดข่าวลือและการเก็งกำไร มีการพูดคุยเกี่ยวกับเกณฑ์ลับที่ทราบโดยนักพัฒนา GOST เท่านั้น แน่นอนว่าความไม่แน่นอนนี้ทำให้ความมั่นใจในระบบเข้ารหัสลดลง

ข้อบกพร่องนี้เป็นเหตุที่ดีเยี่ยมในการวิพากษ์วิจารณ์มาตรฐาน Nicolas Courtois นักเข้ารหัสชาวฝรั่งเศสได้ตีพิมพ์บทความหลายบทความที่มีบทบัญญัติที่เป็นข้อขัดแย้งหลายประการเกี่ยวกับความแข็งแกร่งของ GOST กูร์กตัวส์เชื่อว่ามาตรฐานของรัสเซียนั้นถูกโจมตีได้ง่ายและไม่สามารถถือเป็นระดับสากลได้ อย่างไรก็ตาม กูร์กตัวส์ทำการวิเคราะห์เอสบ็อกซ์นอกเหนือจากที่เกิดขึ้นจริง ดังนั้นคุณไม่ควรพึ่งพาความคิดเห็นของเขา

ตอนนี้เรามาดูกันว่าพวกเขาเกิดอะไรขึ้นภายในกำแพงของ Lubyanka ที่มืดมน

โหมดการเปลี่ยนง่าย

ในโหมดการเปลี่ยนอย่างง่ายเป็นเวลา 32 รอบ ตามมาตรฐาน เราจำเป็นต้องมีปุ่มกลม 32 อัน ในการสร้างคีย์แบบกลม คีย์ 256 บิตดั้งเดิมจะถูกแบ่งออกเป็นบล็อก 32 บิตจำนวน 8 บล็อก: K1…K8 คีย์ K9...K24 เป็นการวนซ้ำของคีย์ K1...K8 คีย์ K25…K32 คือคีย์ K8…K1

  1. บล็อก 64 บิตแต่ละบล็อกแบ่งออกเป็นสองบล็อกย่อย - Ai และ Bi
  2. บล็อกย่อยด้านซ้าย Ai จะถูกเพิ่มแบบโมดูโล 232 ด้วยปุ่มกลม K1: Ai+1 = Ai + Ki mod 232
  3. บล็อกย่อยด้านซ้ายผ่าน S-box
  4. บิตของบล็อกย่อยด้านซ้ายจะถูกเลื่อนไป 11 ตำแหน่ง (การเลื่อนแบบวน)
  5. บล็อกย่อยด้านซ้ายบวกขึ้นทางด้านขวาหนึ่งโมดูโล 2: A = A ⊕ B สาม
  6. บล็อกย่อยที่ถูกต้องยอมรับ ความหมายดั้งเดิมบล็อกย่อยด้านซ้าย: Bi+1 = Ai
  7. บล็อกย่อยจะถูกสลับ

เป็นเพียงตัวอย่างรอบเดียวเท่านั้น คีย์ 256 บิต:

อาวาเดก อาดาวา อาร์วาเดก อาดาว่า อาร์วาเดก อาดาว่า อาร์วาเดก อาดาวา อาร์วา

00011 01010 11110 00011 01001 00001 01111 00011 01001 00011 11110

00011... . . . 00011 01010 11110 0

จากนั้นปุ่มกลม

K1 = 00011 01010 11110 00011 01001 00001 01

K2 = 111 00011 01001 00011 11110 00011 0001

K3 = . - -

S - กล่อง= [ 1 , 15 , 13 , 0 , 5 , 7 , 10 , 4 , 9 , 2 , 3 , 14 , 6 , 11 , 8 , 12 ]

วิธีการใช้งาน S-box นี้? ง่ายมาก! หากอินพุตของ S-box เป็น 0 เอาต์พุตจะเป็น 1 (ใช้สัญลักษณ์ที่ 0 ของ S-box) ถ้าเป็น 4 เอาต์พุตจะเป็น 5 (ใช้สัญลักษณ์ที่ 4) หากอินพุตเป็น 7 จากนั้นเอาต์พุตจะเป็น 4 และต่อๆ ไป

ข้อความธรรมดา:

แบ่งออกเป็นสองบล็อก 32 บิตของบิตสูงและต่ำ:

แน่นอนว่าตัวอย่างนี้กลายเป็นเรื่องธรรมดาเพราะ GOST ยังไม่ใช่มาตรฐานที่ทุกคนสามารถผ่านได้ด้วยมือของตัวเอง

โหมดการเปลี่ยนอย่างง่ายนั้นง่ายเกินไปและมีข้อเสียที่สำคัญ:

  • ข้อผิดพลาดหนึ่งในบล็อกที่เข้ารหัสทำให้บิตทั้งหมดของบล็อกนั้นเสียหาย
  • เมื่อเข้ารหัสบล็อกข้อความธรรมดาที่เหมือนกัน จะได้บล็อกข้อความเข้ารหัสที่เหมือนกัน ซึ่งสามารถให้ข้อมูลบางอย่างแก่นักวิเคราะห์การเข้ารหัสได้

ดังนั้นจึงแนะนำให้ใช้ GOST 28147-89 ในโหมดการแทนที่อย่างง่ายสำหรับการเข้ารหัสข้อมูลสำคัญเท่านั้น

โหมดการเล่นเกม

โหมดนี้ไม่มีข้อเสียของโหมดการเปลี่ยนแบบธรรมดา โหมดแกมมาถูกเรียกเช่นนี้เนื่องจากใช้แกมมา ซึ่งเป็นลำดับสุ่มเทียมที่เพิ่มโมดูโล 2 ลงในข้อความธรรมดาในแต่ละรอบ แกมมาถูกสร้างขึ้นจากข้อความการซิงโครไนซ์ S ซึ่งเป็นลำดับสุ่มเทียมที่เปลี่ยนแปลงไปตามการวนซ้ำแต่ละครั้ง และถูกเข้ารหัสในโหมดการแทนที่อย่างง่าย หลังจากนั้นจะกลายเป็นแกมมาและซ้อนทับบนข้อความธรรมดา

และตอนนี้ทุกอย่างเป็นไปตามลำดับ

ทำซ้ำขั้นตอนที่ 3-5 สำหรับแต่ละบล็อก การปรับเปลี่ยนทั้งหมดนี้สามารถดูได้ในแผนภาพ

การถอดรหัสจะดำเนินการในลักษณะเดียวกัน แทนที่จะเป็นบล็อกข้อความธรรมดา จะมีการจัดเตรียมบล็อกข้อความเข้ารหัสไว้

โหมดแกมมาพร้อมข้อเสนอแนะ

มาซับซ้อนกว่านี้กันดีกว่า อัลกอริธึมจะคล้ายกับโหมดแกมมา แต่แกมมานั้นถูกสร้างขึ้นตามบล็อกก่อนหน้าของข้อมูลที่เข้ารหัส ดังนั้นผลลัพธ์การเข้ารหัสของบล็อกปัจจุบันจึงขึ้นอยู่กับบล็อกก่อนหน้าด้วย 1. ข้อความการซิงโครไนซ์ S - ลำดับการสุ่มหลอกแบบ 64 บิต

2. S ถูกเข้ารหัสในโหมดการแทนที่อย่างง่าย
3. ข้อความธรรมดาจะถูกเพิ่มแบบโมดูโล 2 ให้กับแกมมาผลลัพธ์
4. ไซเฟอร์เท็กซ์ผลลัพธ์จะถูกส่งเป็นข้อความการซิงโครไนซ์สำหรับบล็อกถัดไป และยังถูกส่งไปยังเอาต์พุตด้วย คุณสามารถดูได้ว่ามีลักษณะอย่างไรในแผนภาพ

โหมดการแทรกจำลอง

ในโหมดนี้ ส่วนแทรกจำลองจะถูกสร้างขึ้น - บล็อกเพิ่มเติมที่มีความยาวคงที่ ขึ้นอยู่กับข้อความต้นฉบับและคีย์ จำเป็นต้องมีบล็อกขนาดเล็กดังกล่าวเพื่อยืนยันว่าไม่มีการบิดเบือนใด ๆ เกิดขึ้นโดยไม่ได้ตั้งใจหรือโดยเจตนาในไซเฟอร์เท็กซ์ - นั่นคือเพื่อตรวจสอบความสมบูรณ์ โหมดนี้ทำงานดังนี้:

1. บล็อกข้อความธรรมดาต้องผ่าน 16 รอบในโหมดการแทนที่อย่างง่าย
2. เพิ่มบล็อกข้อความธรรมดาอีกบล็อกลงในบล็อกโมดูโล 2 ที่เป็นผลลัพธ์
3. ผลรวมจะต้องผ่านอีก 16 รอบในโหมดการเปลี่ยนอย่างง่าย
4. เพิ่มบล็อกข้อความธรรมดาถัดไปและแทนที่อย่างง่ายอีกครั้ง และต่อไปเรื่อยๆ จนกว่าจะไม่มีบล็อกข้อความธรรมดาอีกต่อไป

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

GOST 34.12-2015 (ตั๊กแตน)

หลายคนคิดว่า GOST 28147-89 นั้นล้าสมัยและไม่แข็งแกร่งเพียงพอเมื่อเปรียบเทียบกับอัลกอริธึมต่างประเทศ เพื่อแทนที่มัน นักเข้ารหัสในประเทศได้เปิดตัวมาตรฐานการเข้ารหัสใหม่ พวกเขากล่าวว่าสิ่งนี้เกิดขึ้นเนื่องจากการโจมตี GOST เก่าจำนวนมากหรือเนื่องจากความยาวบล็อกนี้ล้าสมัยแล้วและน้อยเกินไปสำหรับชุดข้อมูลสมัยใหม่ ไม่มีใครโฆษณาเหตุผลที่แท้จริง แน่นอนว่ามีการเปลี่ยนแปลงคุณสมบัติหลักบางประการ

ลักษณะหลัก: คีย์ 256 บิต บล็อก 128 บิต

นอกจากนี้ยังควรกล่าวอีกว่าในมาตรฐานใหม่ S-box ได้รับการแก้ไขและรอบคอบ ดังนั้นจึงไม่จำเป็นต้องสร้างการทดแทนแบบสุ่มที่น่าอัศจรรย์ของคุณเอง GOST ใหม่มีโหมดการเข้ารหัสเพิ่มเติมมากมาย:
โหมดการเปลี่ยนอย่างง่าย (Electronic Codebook, ECB);
โหมดแกมมา (ตัวนับ, CTR);
โหมดแกมมาพร้อมผลป้อนกลับเอาต์พุต (ผลป้อนกลับเอาต์พุต, OFB);
โหมดการเปลี่ยนอย่างง่ายพร้อมการมีส่วนร่วม (Cipher Block Chaining, SBC);
โหมดแกมมาพร้อมการตอบสนองแบบไซเฟอร์เท็กซ์ (Cipher Feedback, CFB);
โหมดการสร้างการแทรกการจำลอง (อัลกอริธึมรหัสรับรองความถูกต้องข้อความ)

มาดูโหมดใหม่กัน

โหมดเปลี่ยนง่ายด้วยการมีส่วนร่วม

ดังที่เห็นในมาตรฐานก่อนหน้านี้ โหมดการเปลี่ยนอย่างง่ายเป็นโหมดที่อ่อนแอที่สุด ดังนั้นในมาตรฐานใหม่ ตอนนี้จึงขยายออกไปด้วยการมีส่วนร่วมและไม่ง่ายเลย

  1. เวกเตอร์การเริ่มต้นฟังดูน่ากลัว แต่ในความเป็นจริง มันเป็นเพียงลำดับของบิตที่ป้อนอินพุต
  2. เวกเตอร์แบ่งออกเป็นสองส่วน - L และ R ซึ่งส่วนหนึ่งถูกเพิ่มแบบโมดูโล 2 ด้วยข้อความธรรมดา และอีกส่วนหนึ่งกลายเป็นครึ่งหนึ่งของเวกเตอร์การเริ่มต้นสำหรับบล็อกถัดไป
  3. ผลรวมของข้อความธรรมดาและชิ้นส่วนของเวกเตอร์การเริ่มต้นจะถูกส่งผ่านรหัสแทนที่อย่างง่าย
  4. บล็อกไซเฟอร์เท็กซ์ที่ได้จะติดกาวเข้าด้วยกัน

เมื่อคุณดูแผนภาพ ทุกอย่างจะชัดเจนทันที

แน่นอนว่าเวกเตอร์การเริ่มต้นนั้นไม่ง่ายนัก: มันจะต้องผ่านชุดของการแปลงเชิงเส้น (โดยใช้ linear shift register) ก่อนที่จะเริ่มเข้ารหัสบล็อกใหม่ แต่การทำความคุ้นเคยกับการเข้ารหัสก็เพียงพอแล้วที่จะจินตนาการถึงแผนการดังกล่าว การถอดรหัสในโหมดนี้ยังไม่ชัดเจนนัก ดังนั้นจึงควรดูแผนภาพจะดีกว่า

สำหรับข้อดี - การเข้ารหัส ท่ามกลางการพัฒนาภายในประเทศคือผู้ให้บริการ cryptoProvider CryptoPro CSP

คำไม่กี่คำเกี่ยวกับความแข็งแกร่งของโหมดการเข้ารหัส นักเข้ารหัสชาวต่างชาติจำนวนมากพยายามยกมือต่อต้านมาตรฐานของเรา แต่ในขณะนี้ยังไม่มีการโจมตีเพียงครั้งเดียวที่สามารถนำไปใช้ในระดับการพัฒนาทางเทคโนโลยีในปัจจุบัน ในบรรดาโปรแกรมเมอร์มาตรฐานนี้ เป็นเวลานานไม่ได้รับความนิยมมากนัก เนื่องจากเป็นการยากที่จะเข้าใจอัลกอริธึมการทำงานจากข้อความ และไม่มีคำอธิบายที่ชัดเจนเพียงพอ แต่ปัจจุบันมีการใช้งานในภาษาโปรแกรมต่างๆ มากมายแล้ว ดังนั้นตอนนี้การใช้ GOST จึงค่อนข้างเป็นไปได้และในหลาย ๆ ด้านก็เกินมาตรฐานต่างประเทศ สุดท้ายรักชาติอยู่ที่ไหน!

เซอร์เกย์ ปานาเซนโก,
หัวหน้าฝ่ายพัฒนา ซอฟต์แวร์บริษัท "อังกาด"
[ป้องกันอีเมล]

แนวคิดพื้นฐาน

กระบวนการแปลงข้อมูลเปิดเป็นข้อมูลที่เข้ารหัสและในทางกลับกันมักเรียกว่าการเข้ารหัส และองค์ประกอบทั้งสองของกระบวนการนี้เรียกว่าการเข้ารหัสและการถอดรหัสตามลำดับ ในทางคณิตศาสตร์ การแปลงนี้จะถูกแสดง การพึ่งพาต่อไปนี้อธิบายการกระทำด้วยข้อมูลเบื้องต้น:

ค = เอก1(ม)

ม" = Dk2(C),

โดยที่ M (ข้อความ) เป็นข้อมูลที่เปิด (ในวรรณกรรมเกี่ยวกับความปลอดภัยของข้อมูลมักเรียกว่า " แหล่งที่มา");
C (ข้อความตัวเลข) - ข้อความไซเฟอร์ (หรือรหัสลับ) ที่ได้รับจากการเข้ารหัส
E (การเข้ารหัส) - ฟังก์ชั่นการเข้ารหัสที่ทำการแปลงการเข้ารหัสในข้อความต้นฉบับ
k1 (คีย์) - พารามิเตอร์ของฟังก์ชัน E เรียกว่าคีย์เข้ารหัส
M" - ข้อมูลที่ได้รับจากการถอดรหัส
D (ถอดรหัส) - ฟังก์ชั่นถอดรหัสที่ทำการแปลงการเข้ารหัสแบบผกผันบนไซเฟอร์เท็กซ์
k2 เป็นกุญแจที่ใช้ในการถอดรหัสข้อมูล

แนวคิดของ "คีย์" ในมาตรฐาน GOST 28147-89 (อัลกอริธึมการเข้ารหัสแบบสมมาตร) ถูกกำหนดไว้ดังนี้: "สถานะลับเฉพาะของพารามิเตอร์บางตัวของอัลกอริธึมการแปลงการเข้ารหัสทำให้มั่นใจได้ว่าการเลือกการแปลงหนึ่งรายการจากชุดที่เป็นไปได้สำหรับ ของอัลกอริทึมนี้การแปลง" กล่าวอีกนัยหนึ่งคีย์คือองค์ประกอบเฉพาะซึ่งคุณสามารถเปลี่ยนผลลัพธ์ของอัลกอริทึมการเข้ารหัสได้: ข้อความต้นฉบับเดียวกันเมื่อใช้ ปุ่มที่แตกต่างกันจะถูกเข้ารหัสแตกต่างออกไป

เพื่อให้ผลลัพธ์การถอดรหัสตรงกับข้อความต้นฉบับ (เช่น สำหรับ M" = M) ต้องเป็นไปตามเงื่อนไขสองประการพร้อมกัน ประการแรก ฟังก์ชันถอดรหัส D จะต้องตรงกับฟังก์ชันการเข้ารหัส E ประการที่สอง คีย์ถอดรหัส k2 จะต้องตรงกับการเข้ารหัส คีย์ k1

หากใช้อัลกอริธึมการเข้ารหัสที่รัดกุมในการเข้ารหัส หากไม่มีคีย์ที่ถูกต้อง k2 ก็เป็นไปไม่ได้ที่จะได้รับ M" = M ความแรงของการเข้ารหัสเป็นคุณสมบัติหลักของอัลกอริธึมการเข้ารหัสและบ่งบอกถึงระดับความซับซ้อนของการได้รับต้นฉบับเป็นหลัก ข้อความจากข้อความที่เข้ารหัสโดยไม่มีคีย์ k2

อัลกอริธึมการเข้ารหัสสามารถแบ่งออกเป็นสองประเภท: การเข้ารหัสแบบสมมาตรและแบบไม่สมมาตร สำหรับแบบแรก อัตราส่วนของคีย์เข้ารหัสและคีย์ถอดรหัสถูกกำหนดเป็น k1 = k2 = k (นั่นคือ ฟังก์ชัน E และ D ใช้คีย์เข้ารหัสเดียวกัน) ในการเข้ารหัสแบบอสมมาตร คีย์การเข้ารหัส k1 จะถูกคำนวณจากคีย์ k2 ในลักษณะที่ การแปลงผกผันเป็นไปไม่ได้ เช่น การใช้สูตร k1 = ak2 mod p (a และ p เป็นพารามิเตอร์ของอัลกอริทึมที่ใช้)

การเข้ารหัสแบบสมมาตร

อัลกอริธึมการเข้ารหัสแบบสมมาตรมีมาตั้งแต่สมัยโบราณ: เป็นวิธีการซ่อนข้อมูลที่จักรพรรดิโรมัน Gaius Julius Caesar ใช้ในศตวรรษที่ 1 ก่อนคริสต์ศักราช e. และอัลกอริธึมที่เขาคิดค้นขึ้นนั้นเรียกว่า “ระบบเข้ารหัสของซีซาร์”

ปัจจุบันอัลกอริธึมที่รู้จักกันดีที่สุดคือสมมาตร การเข้ารหัส DES(มาตรฐานการเข้ารหัสข้อมูล) พัฒนาขึ้นเมื่อปี พ.ศ. 2520 จนกระทั่งเมื่อเร็ว ๆ นี้ ได้กลายเป็น “มาตรฐานของสหรัฐอเมริกา” เนื่องจากรัฐบาลของประเทศนี้แนะนำให้ใช้เพื่อนำไปปฏิบัติ ระบบต่างๆการเข้ารหัสข้อมูล แม้ว่าเดิมที DES มีแผนจะใช้เป็นเวลาไม่เกิน 10-15 ปี แต่ความพยายามที่จะเปลี่ยนมันเริ่มต้นในปี 1997 เท่านั้น

เราจะไม่กล่าวถึง DES อย่างละเอียด (หนังสือเกือบทั้งหมดในรายการเอกสารเพิ่มเติมจะมีรายละเอียดดังกล่าว คำอธิบายโดยละเอียด) และมาดูอัลกอริธึมการเข้ารหัสที่ทันสมัยกว่านี้กันดีกว่า เป็นที่น่าสังเกตว่าเหตุผลหลักในการเปลี่ยนมาตรฐานการเข้ารหัสคือความแข็งแกร่งของการเข้ารหัสที่ค่อนข้างอ่อนแอ เหตุผลก็คือความยาวของคีย์ DES เพียง 56 บิตที่สำคัญ- เป็นที่ทราบกันดีว่าอัลกอริธึมการเข้ารหัสที่รัดกุมสามารถถอดรหัสได้โดยการลองใช้คีย์เข้ารหัสที่เป็นไปได้ทั้งหมด (ที่เรียกว่าการโจมตีแบบ bruteforce) เป็นเรื่องง่ายที่จะคำนวณว่าคลัสเตอร์ที่มีโปรเซสเซอร์ 1 ล้านตัว ซึ่งแต่ละตัวคำนวณ 1 ล้านคีย์ต่อวินาที จะตรวจสอบคีย์ DES 256 รูปแบบในเวลาเกือบ 20 ชั่วโมง และตั้งแต่นั้นเป็นต้นมา ตามมาตรฐานปัจจุบัน พลังการคำนวณค่อนข้างจริง เป็นที่ชัดเจนว่าคีย์ 56 บิตสั้นเกินไป และจำเป็นต้องแทนที่อัลกอริธึม DES ด้วยคีย์ที่แรงกว่า

ปัจจุบันมีการใช้อัลกอริธึมการเข้ารหัสที่แข็งแกร่งสมัยใหม่สองตัวมากขึ้น: มาตรฐานในประเทศ GOST 28147-89 และมาตรฐานการเข้ารหัสลับใหม่ของสหรัฐอเมริกา - AES (มาตรฐานการเข้ารหัสขั้นสูง)

มาตรฐาน GOST 28147-89

อัลกอริทึมที่กำหนดโดย GOST 28147-89 (รูปที่ 1) มีความยาวคีย์เข้ารหัส 256 บิต มันเข้ารหัสข้อมูลในบล็อกขนาด 64 บิต (อัลกอริธึมดังกล่าวเรียกว่าอัลกอริธึมบล็อก) ซึ่งจากนั้นจะแบ่งออกเป็นสองบล็อกย่อย 32 บิต (N1 และ N2) Subblock N1 ได้รับการประมวลผลด้วยวิธีใดวิธีหนึ่ง หลังจากนั้นค่าของมันจะถูกเพิ่มเข้าไปในค่าของ subblock N2 (การเพิ่มจะดำเนินการแบบโมดูโล 2 เช่น การดำเนินการเชิงตรรกะ XOR - "เอกสิทธิ์หรือ") จากนั้นบล็อกย่อยจะถูกสลับ การเปลี่ยนแปลงครั้งนี้วิ่ง จำนวนที่แน่นอนครั้ง (“รอบ”): 16 หรือ 32 ขึ้นอยู่กับโหมดการทำงานของอัลกอริทึม ในแต่ละรอบ จะดำเนินการสองครั้ง

อย่างแรกคือการคีย์ เนื้อหาของบล็อกย่อย N1 จะถูกเพิ่มแบบโมดูโล 2 ด้วยส่วน 32 บิตของคีย์ Kx กุญแจเต็มการเข้ารหัสจะแสดงเป็นการต่อคีย์ย่อย 32 บิต: K0, K1, K2, K3, K4, K5, K6, K7 ในระหว่างกระบวนการเข้ารหัส จะมีการใช้คีย์ย่อยอันใดอันหนึ่งเหล่านี้ ขึ้นอยู่กับหมายเลขรอบและโหมดการทำงานของอัลกอริธึม

การดำเนินการครั้งที่สอง - การเปลี่ยนโต๊ะ- หลังจากการคีย์ บล็อกย่อย N1 จะถูกแบ่งออกเป็น 8 ส่วน ละ 4 บิต ค่าของแต่ละส่วนจะถูกแทนที่ตามตารางการแทนที่สำหรับส่วนนี้ของบล็อกย่อย บล็อกย่อยจะถูกหมุนบิตไปทางซ้าย 11 บิต

การทดแทนตาราง(กล่องทดแทน - S-box) มักใช้ในอัลกอริธึมการเข้ารหัสสมัยใหม่ ดังนั้นจึงควรอธิบายว่าการดำเนินการดังกล่าวมีการจัดการอย่างไร

ค่าเอาต์พุตของบล็อกจะถูกบันทึกไว้ในตาราง บล็อกข้อมูลของมิติข้อมูลหนึ่ง (ในกรณีของเราคือ 4 บิต) มีการแสดงตัวเลขของตัวเองซึ่งกำหนดจำนวนของค่าเอาต์พุต ตัวอย่างเช่น ถ้า S-box มีลักษณะเป็น 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 และบล็อก 4 บิต “0100” มาถึงอินพุต (ค่า 4) จากนั้นตามตารางค่าเอาต์พุตจะเป็น 15 เช่น "1111" (0 a 4, 1 a 11, 2 a 2 ... ) อัลกอริทึมที่กำหนดโดย GOST 28147-89 มีโหมดการทำงานสี่โหมด: การแทนที่อย่างง่าย การเล่นเกม การเล่นเกมด้วยข้อเสนอแนะ

และการสร้างคำนำหน้าเลียนแบบ พวกเขาใช้การแปลงการเข้ารหัสแบบเดียวกับที่อธิบายไว้ข้างต้น แต่เนื่องจากวัตถุประสงค์ของโหมดนั้นแตกต่างกัน การแปลงนี้จึงดำเนินการแตกต่างกันในแต่ละโหมด เปลี่ยนง่ายในการเข้ารหัสแต่ละบล็อกข้อมูล 64 บิต จะดำเนินการ 32 รอบที่อธิบายไว้ข้างต้น ในกรณีนี้ จะใช้คีย์ย่อย 32 บิตในลำดับต่อไปนี้:

K0, K1, K2, K3, K4, K5, K6, K7, K0, K1, ฯลฯ - ในรอบที่ 1 ถึง 24;

K7, K6, K5, K4, K3, K2, K1, K0 - ในรอบ 25 ถึง 32.

ถอดรหัสเข้า. โหมดนี้ดำเนินการในลักษณะเดียวกันทุกประการ แต่มีลำดับการใช้คีย์ย่อยที่แตกต่างกันเล็กน้อย:

K0, K1, K2, K3, K4, K5, K6, K7 - ในรอบ 1 ถึง 8;

K7, K6, K5, K4, K3, K2, K1, K0, K7, K6, ฯลฯ - ในรอบที่ 9 ถึง 32

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

ใน โหมดแกมมาแต่ละบล็อกข้อความธรรมดาจะถูกเพิ่มทีละบิตแบบโมดูโล 2 ให้กับบล็อกแกมมาการเข้ารหัสแบบ 64 บิต รหัสแกมมาเป็นลำดับพิเศษที่ได้รับจากการดำเนินการบางอย่างด้วยรีจิสเตอร์ N1 และ N2 (ดูรูปที่ 1)

1. การกรอกเริ่มต้นถูกเขียนเพื่อลงทะเบียน N1 และ N2 - ค่า 64 บิตที่เรียกว่าข้อความการซิงโครไนซ์

2. เนื้อหาของรีจิสเตอร์ N1 และ N2 ได้รับการเข้ารหัส (in ในกรณีนี้- ซิงค์ข้อความ) ในโหมดการแทนที่อย่างง่าย

3. เนื้อหาของรีจิสเตอร์ N1 จะถูกเพิ่มแบบโมดูโล (232 - 1) โดยมีค่าคงที่ C1 = 224 + 216 + 28 + 24 และผลลัพธ์ของการบวกจะถูกเขียนเพื่อลงทะเบียน N1

4. เนื้อหาของรีจิสเตอร์ N2 จะถูกเพิ่มแบบโมดูโล 232 โดยมีค่าคงที่ C2 = 224 + 216 + 28 + 1 และผลลัพธ์ของการบวกจะถูกเขียนเพื่อลงทะเบียน N2

5. เนื้อหาของรีจิสเตอร์ N1 และ N2 จะถูกส่งออกเป็นบล็อกแกมมา 64 บิตของการเข้ารหัส (ในกรณีนี้ N1 และ N2 จะสร้างบล็อกแกมมาแรก)

หากจำเป็นต้องใช้บล็อกแกมม่าถัดไป (เช่น การเข้ารหัสหรือการถอดรหัสจำเป็นต้องดำเนินการต่อ) ก็จะกลับไปที่ขั้นตอนที่ 2

สำหรับการถอดรหัส แกมมาจะถูกสร้างขึ้นในลักษณะที่คล้ายกัน จากนั้นไซเฟอร์เท็กซ์และบิตแกมม่าจะถูก XORed อีกครั้ง เนื่องจากการดำเนินการนี้สามารถย้อนกลับได้ ในกรณีที่มีมาตราส่วนที่พัฒนาอย่างถูกต้อง จึงได้รับข้อความต้นฉบับ (ตาราง)

การเข้ารหัสและถอดรหัสในโหมดแกมมา

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

ในการใช้งานอัลกอริทึม GOST 28147-89 ส่วนใหญ่ ข้อความการซิงโครไนซ์จะไม่เป็นความลับ อย่างไรก็ตาม มีระบบที่ข้อความการซิงโครไนซ์เป็นองค์ประกอบลับเดียวกันกับคีย์การเข้ารหัส สำหรับระบบดังกล่าว ความยาวคีย์ที่มีประสิทธิผลของอัลกอริธึม (256 บิต) จะเพิ่มขึ้นอีก 64 บิตของข้อความการซิงโครไนซ์ความลับ ซึ่งถือได้ว่าเป็นองค์ประกอบหลักด้วย

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

ข้าว. 2. การพัฒนาแกมมาการเข้ารหัสในโหมดแกมมาพร้อมข้อเสนอแนะ

เมื่อพิจารณาถึงโหมด การสร้างคำนำหน้าเลียนแบบควรกำหนดแนวคิดเรื่องรุ่น คำนำหน้าเลียนแบบเป็นการเข้ารหัส เช็คซัมคำนวณโดยใช้คีย์เข้ารหัสและออกแบบมาเพื่อตรวจสอบความสมบูรณ์ของข้อความ เมื่อสร้างคำนำหน้าการเลียนแบบ การดำเนินการต่อไปนี้จะดำเนินการ: บล็อก 64 บิตแรกของอาร์เรย์ข้อมูลซึ่งมีการคำนวณคำนำหน้าการเลียนแบบถูกเขียนเพื่อลงทะเบียน N1 และ N2 และเข้ารหัสในโหมดการแทนที่แบบง่ายที่ลดลง ( ดำเนินการ 16 รอบแรกจาก 32 รอบ) ผลลัพธ์ที่ได้จะถูกรวมแบบโมดูโล 2 พร้อมด้วยบล็อคข้อมูลถัดไป และผลลัพธ์จะถูกเก็บไว้ใน N1 และ N2

วงจรจะเกิดซ้ำจนกระทั่งบล็อกข้อมูลสุดท้าย เนื้อหา 64 บิตที่เป็นผลลัพธ์ของการลงทะเบียน N1 และ N2 หรือบางส่วนอันเป็นผลมาจากการแปลงเหล่านี้เรียกว่าคำนำหน้าการเลียนแบบ ขนาดของคำนำหน้าการเลียนแบบถูกเลือกตามความน่าเชื่อถือที่ต้องการของข้อความ: ด้วยความยาวของบิตคำนำหน้าการเลียนแบบ ความน่าจะเป็นที่การเปลี่ยนแปลงในข้อความจะไม่มีใครสังเกตเห็นจะเท่ากับ 2-r ส่วนใหญ่ ใช้คำนำหน้าการเลียนแบบ 32 บิตนั่นคือเนื้อหาครึ่งหนึ่งของการลงทะเบียน นี่ก็เพียงพอแล้ว เนื่องจากเช่นเดียวกับการตรวจสอบผลรวมอื่นๆ ไฟล์แนบเลียนแบบมีจุดประสงค์เพื่อป้องกันการบิดเบือนข้อมูลโดยไม่ตั้งใจเป็นหลัก เพื่อป้องกันการแก้ไขข้อมูลโดยเจตนาอื่นๆ วิธีการเข้ารหัส- ลายเซ็นดิจิทัลอิเล็กทรอนิกส์เป็นหลัก

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

อัลกอริธึม GOST 28147-89 ถือเป็นอัลกอริธึมที่แข็งแกร่งมาก - ปัจจุบันยังไม่มีการเสนอวิธีการที่มีประสิทธิภาพสำหรับการเปิดเผยมากไปกว่าวิธี "กำลังเดรัจฉาน" ที่กล่าวถึงข้างต้น ความปลอดภัยสูงนั้นเกิดขึ้นได้จากความยาวคีย์ขนาดใหญ่ - 256 บิต เมื่อใช้ข้อความการซิงโครไนซ์ลับ ความยาวคีย์ที่มีประสิทธิภาพจะเพิ่มขึ้นเป็น 320 บิต และการเข้ารหัสตารางการแทนที่จะเพิ่มขึ้น บิตพิเศษ- นอกจากนี้ ความแข็งแกร่งของการเข้ารหัสยังขึ้นอยู่กับจำนวนรอบการเปลี่ยนแปลง ซึ่งตาม GOST 28147-89 ควรเป็น 32 (ผลเต็มรูปแบบของการกระจายข้อมูลอินพุตจะเกิดขึ้นหลังจาก 8 รอบ)

มาตรฐานเออีเอส

ต่างจากอัลกอริทึม GOST 28147-89 ซึ่งยังคงเป็นความลับมาเป็นเวลานานซึ่งเป็นมาตรฐานอเมริกัน การเข้ารหัส AESซึ่งมีจุดประสงค์เพื่อแทนที่ DES ได้รับการคัดเลือกผ่านการแข่งขันแบบเปิด ซึ่งองค์กรและบุคคลที่สนใจทุกคนสามารถศึกษาและแสดงความคิดเห็นเกี่ยวกับอัลกอริทึมของผู้สมัครได้

การแข่งขันเพื่อแทนที่ DES ได้รับการประกาศในปี 1997 โดยสถาบันมาตรฐานและเทคโนโลยีแห่งชาติของสหรัฐอเมริกา (NIST - สถาบันมาตรฐานและเทคโนโลยีแห่งชาติ) มีการส่งอัลกอริธึมของผู้สมัคร 15 รายการเข้าร่วมการแข่งขัน ซึ่งพัฒนาโดยทั้งองค์กรที่มีชื่อเสียงในด้านการเข้ารหัส (RSA Security, Counterpane ฯลฯ) และบุคคลทั่วไป ผลการแข่งขันได้รับการประกาศในเดือนตุลาคม พ.ศ. 2543 ผู้ชนะคืออัลกอริธึม Rijndael ซึ่งพัฒนาโดยนักเข้ารหัสสองคนจากเบลเยียม Vincent Rijmen และ Joan Daemen

อัลกอริธึม Rijndael นั้นไม่เหมือนกับอัลกอริธึมการเข้ารหัสแบบสมมาตรที่รู้จักกันดีที่สุด ซึ่งมีโครงสร้างที่เรียกว่า "เครือข่าย Feistel" และคล้ายกับ GOST 28147-89 ของรัสเซีย ลักษณะเฉพาะของเครือข่าย Feistel คือค่าอินพุตจะถูกแบ่งออกเป็นบล็อกย่อยตั้งแต่สองบล็อกขึ้นไป ซึ่งส่วนหนึ่งจะถูกประมวลผลในแต่ละรอบ กฎหมายบางอย่างหลังจากนั้นจะถูกวางทับบนบล็อกย่อยที่ยังไม่ได้ประมวลผล (ดูรูปที่ 1)

ต่างจากมาตรฐานการเข้ารหัสในประเทศ อัลกอริธึม Rijndael แสดงถึงบล็อกข้อมูลในรูปแบบของอาร์เรย์ไบต์สองมิติขนาด 4X4, 4X6 หรือ 4X8 (อนุญาตให้ใช้บล็อกข้อมูลที่เข้ารหัสหลายขนาดคงที่ได้) การดำเนินการทั้งหมดจะดำเนินการกับแต่ละไบต์ของอาร์เรย์และในการดำเนินการทั้งหมด คอลัมน์อิสระและเส้น

อัลกอริธึม Rijndael ทำการแปลงสี่ครั้ง: BS (ByteSub) - การแทนที่ตารางของแต่ละไบต์ของอาเรย์ (รูปที่ 3) SR (ShiftRow) - เลื่อนแถวอาร์เรย์ (รูปที่ 4) ด้วยการดำเนินการนี้ บรรทัดแรกยังคงไม่เปลี่ยนแปลง และส่วนที่เหลือจะถูกเลื่อนแบบวนทีละไบต์ไปทางซ้ายตามจำนวนไบต์คงที่ ขึ้นอยู่กับขนาดของอาร์เรย์ ตัวอย่างเช่น สำหรับอาร์เรย์ 4X4 บรรทัด 2, 3 และ 4 จะถูกเลื่อนไป 1, 2 และ 3 ไบต์ตามลำดับ ถัดไปมา MC (MixColumn) - การดำเนินการกับคอลัมน์อาร์เรย์อิสระ (รูปที่ 5) เมื่อแต่ละคอลัมน์คูณด้วยเมทริกซ์คงที่ c(x) ตามกฎบางอย่าง และสุดท้าย AK (AddRoundKey) - การเพิ่มรหัส แต่ละบิตของอาเรย์จะถูกเพิ่มแบบโมดูโล 2 พร้อมด้วยบิตที่สอดคล้องกันของคีย์กลม ซึ่งในทางกลับกัน จะถูกคำนวณด้วยวิธีใดวิธีหนึ่งจากคีย์เข้ารหัส (รูปที่ 6)


ข้าว. 3. ปฏิบัติการ BS

ข้าว. 4. ปฏิบัติการ SR.

ข้าว. 5. ปฏิบัติการ MC.

จำนวนรอบการเข้ารหัส (R) ในอัลกอริธึม Rijndael นั้นแปรผันได้ (10, 12 หรือ 14 รอบ) และขึ้นอยู่กับขนาดบล็อกและคีย์การเข้ารหัส (คีย์ยังมีขนาดคงที่หลายขนาดด้วย)

การถอดรหัสจะดำเนินการโดยใช้การดำเนินการย้อนกลับต่อไปนี้ การกลับตารางและการแทนที่ตารางจะดำเนินการบนตารางผกผัน (สัมพันธ์กับตารางที่ใช้ในระหว่างการเข้ารหัส) การดำเนินการผกผันกับ SR คือการหมุนแถวไปทางขวาแทนที่จะหมุนไปทางซ้าย การดำเนินการผกผันสำหรับ MC เป็นการคูณโดยใช้กฎเดียวกันด้วยเมทริกซ์อื่น d(x) ที่ตรงตามเงื่อนไข: c(x) * d(x) = 1 การเพิ่มคีย์ AK ถือเป็นค่าผกผันของตัวมันเอง เนื่องจากจะใช้เฉพาะ XOR เท่านั้น การดำเนินการ. การดำเนินการย้อนกลับเหล่านี้จะถูกนำไปใช้ในระหว่างการถอดรหัสในลำดับย้อนกลับกับที่ใช้ในระหว่างการเข้ารหัส

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

ข้อเสียเปรียบประการเดียวของอัลกอริธึมถือได้ว่าเป็นโครงร่างที่แหวกแนวโดยธรรมชาติ ความจริงก็คือคุณสมบัติของอัลกอริธึมที่ใช้เครือข่าย Feistel ได้รับการวิจัยมาเป็นอย่างดี และในทางกลับกัน Rijndael อาจมีช่องโหว่ที่ซ่อนอยู่ซึ่งสามารถค้นพบได้หลังจากเวลาผ่านไประยะหนึ่งนับตั้งแต่มีการใช้อย่างแพร่หลายเท่านั้น

การเข้ารหัสแบบอสมมาตร

อัลกอริธึมการเข้ารหัสแบบอสมมาตรตามที่ระบุไว้แล้วใช้สองคีย์: k1 - คีย์เข้ารหัสหรือสาธารณะและ k2 - คีย์ถอดรหัสหรือความลับ พับลิกคีย์คำนวณจากข้อมูลลับ: k1 = f(k2)

อัลกอริธึมการเข้ารหัสแบบอสมมาตรขึ้นอยู่กับการใช้ฟังก์ชันทางเดียว ตามคำนิยาม ฟังก์ชัน y = f(x) จะเป็นทิศทางเดียว ถ้า: มันง่ายที่จะคำนวณสำหรับทุกคน ตัวเลือกที่เป็นไปได้ x และสำหรับค่า y ที่เป็นไปได้มากที่สุด การคำนวณค่า x ค่อนข้างยาก โดยที่ y = f(x)

ตัวอย่างของฟังก์ชันทางเดียวคือการคูณตัวเลขขนาดใหญ่สองตัว: N = P*Q การคูณนี้เองก็คือ ใช้งานง่าย- อย่างไรก็ตาม ฟังก์ชันผกผัน (การสลายตัวของ N ออกเป็นสองปัจจัยใหญ่) ที่เรียกว่าการแยกตัวประกอบตามการประมาณเวลาสมัยใหม่ ค่อนข้างซับซ้อน ปัญหาทางคณิตศาสตร์- ตัวอย่างเช่น แยกตัวประกอบ N ด้วยมิติ 664 บิตที่ P ? Q จะต้องมีการดำเนินการประมาณ 1,023 ครั้ง และในการคำนวณ x แบบผกผันสำหรับเลขชี้กำลังโมดูลาร์ y = ax mod p โดยที่ทราบ a, p และ y (ด้วยขนาด a และ p เท่ากัน) คุณต้องดำเนินการประมาณ 1,026 ครั้ง ตัวอย่างสุดท้ายที่ให้ไว้เรียกว่าปัญหาลอการิทึมแบบแยกส่วน (DLP) และฟังก์ชันประเภทนี้มักใช้ในอัลกอริธึมการเข้ารหัสแบบอสมมาตร เช่นเดียวกับในอัลกอริธึมที่ใช้ในการสร้างลายเซ็นดิจิทัลอิเล็กทรอนิกส์

ฟังก์ชันที่สำคัญอีกประเภทหนึ่งที่ใช้ในการเข้ารหัสแบบอสมมาตรคือฟังก์ชันแบ็คดอร์แบบทางเดียว คำจำกัดความระบุว่าฟังก์ชันมีทิศทางเดียวกับประตูหลังหากเป็นทิศทางเดียว และเป็นไปได้ที่จะคำนวณฟังก์ชันผกผัน x = f-1(y) ได้อย่างมีประสิทธิภาพ กล่าวคือ ถ้า "ประตูหลัง" (ตัวเลขลับบางตัว ใช้กับค่าที่ไม่สมมาตร อัลกอริธึมการเข้ารหัส - ค่าของรหัสลับ)

ฟังก์ชันแบ็คดอร์แบบทางเดียวถูกนำมาใช้ในอัลกอริธึมการเข้ารหัสแบบอสมมาตร RSA ที่ใช้กันอย่างแพร่หลาย

อัลกอริทึมอาร์เอสเอ

พัฒนาขึ้นในปี 1978 โดยนักเขียนสามคน (Rivest, Shamir, Adleman) ชื่อนี้มาจากอักษรตัวแรกของนามสกุลของผู้พัฒนา ความน่าเชื่อถือของอัลกอริธึมขึ้นอยู่กับความยากในการแยกตัวประกอบตัวเลขจำนวนมากและการคำนวณลอการิทึมแบบไม่ต่อเนื่อง พารามิเตอร์หลักของอัลกอริทึม RSA คือโมดูลระบบ N ตามการคำนวณทั้งหมดในระบบและ N = P*Q (P และ Q เป็นความลับแบบสุ่มอย่างง่าย ตัวเลขใหญ่มักจะมีขนาดเท่ากัน)

รหัสลับ k2 ถูกเลือกแบบสุ่มและต้องตรงตามเงื่อนไขต่อไปนี้:

1

โดยที่ GCD เป็นตัวหารร่วมมาก เช่น k1 จะต้องเป็นจำนวนไพรม์ร่วมของฟังก์ชันออยเลอร์ F(N) ส่วนค่าหลังจะเท่ากับจำนวนของจำนวนเต็มบวกในช่วงตั้งแต่ 1 ถึง N โคไพรม์ถึง N และคำนวณเป็น F(N) = (P - 1)*(Q - 1).

พับลิกคีย์ k1 คำนวณจากความสัมพันธ์ (k2*k1) = 1 ม็อด F(N)และเพื่อจุดประสงค์นี้จึงใช้อัลกอริทึมแบบยุคลิดทั่วไป (อัลกอริทึมสำหรับการคำนวณตัวหารร่วมมาก) การเข้ารหัสบล็อกข้อมูล M โดยใช้อัลกอริทึม RSA ดำเนินการดังนี้: ค=ม [ยกกำลัง k1]ม็อด เอ็น- โปรดทราบว่าเนื่องจากในระบบเข้ารหัสจริงที่ใช้ RSA ตัวเลข k1 มีขนาดใหญ่มาก (ปัจจุบันขนาดสามารถเข้าถึงได้สูงสุด 2,048 บิต) การคำนวณโดยตรงของ M [ยกกำลัง k1]ไม่สมจริง เพื่อให้ได้มา จะใช้การผสมผสานระหว่างการยกกำลังสองซ้ำของ M และการคูณผลลัพธ์

การผกผันของฟังก์ชันนี้สำหรับขนาดใหญ่ไม่สามารถทำได้ กล่าวอีกนัยหนึ่ง เป็นไปไม่ได้เลยที่จะหา M เมื่อทราบค่า C, N และ k1 อย่างไรก็ตามการมีคีย์ลับ k2 โดยใช้การแปลงแบบง่าย ๆ สามารถคำนวณ M = Ck2 mod N ได้ เห็นได้ชัดว่านอกเหนือจากคีย์ลับเองแล้วยังจำเป็นต้องตรวจสอบให้แน่ใจว่าพารามิเตอร์ P และ Q เป็นความลับ หากผู้โจมตีได้รับค่าของพวกเขา เขาจะสามารถคำนวณคีย์ลับ k2 ได้

การเข้ารหัสใดดีกว่า?

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

ประการแรกคือการดำเนินการเข้ารหัสและถอดรหัสความเร็วต่ำเนื่องจากมีการดำเนินการที่ใช้ทรัพยากรมาก ข้อเสีย "ทางทฤษฎี" อีกประการหนึ่งคือความแข็งแกร่งของการเข้ารหัสของอัลกอริธึมการเข้ารหัสแบบอสมมาตรไม่ได้รับการพิสูจน์ทางคณิตศาสตร์ สาเหตุหลักมาจากปัญหาลอการิทึมแยก - ยังไม่ได้รับการพิสูจน์ว่าการแก้ปัญหาในเวลาที่ยอมรับนั้นเป็นไปไม่ได้ ปัญหาที่ไม่จำเป็นยังเกิดขึ้นจากความจำเป็นในการปกป้องกุญแจสาธารณะจากการทดแทน ด้วยการแทนที่กุญแจสาธารณะของผู้ใช้ที่ถูกกฎหมาย ผู้โจมตีจะสามารถเข้ารหัสข้อความสำคัญด้วยกุญแจสาธารณะของเขา และต่อมาถอดรหัสได้อย่างง่ายดายด้วยกุญแจส่วนตัวของเขา

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

แหล่งข้อมูลเพิ่มเติม

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

  1. Brassard J. "วิทยาการเข้ารหัสลับสมัยใหม่"
  2. Petrov A. A. "ความปลอดภัยของคอมพิวเตอร์: วิธีการเข้ารหัสลับ"
  3. Romanets Yu. V. , Timofeev P. A. , Shangin V. F. "การปกป้องข้อมูลในระบบคอมพิวเตอร์สมัยใหม่"
  4. Sokolov A.V., Shangin V.F. "การปกป้องข้อมูลในเครือข่ายและระบบขององค์กรแบบกระจาย"

คำอธิบายที่สมบูรณ์ของอัลกอริธึมการเข้ารหัสสามารถพบได้ในเอกสารต่อไปนี้:

  1. GOST 28147-89 ระบบประมวลผลข้อมูล การป้องกันการเข้ารหัส
  2. อัลกอริธึมการแปลงการเข้ารหัส - ม.: มาตรฐานแห่งสหภาพโซเวียต, 2532
  3. อัลกอริทึม AES: http://www.nist.gov/ae

อัลกอริทึม RSA: http://www.rsasecurity.com/rsalabs/pkcs/pkcs-1

การแนะนำ

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

หนังสือศักดิ์สิทธิ์ของอียิปต์โบราณและอินเดียโบราณเป็นตัวอย่างของสิ่งนี้

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

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

เหตุใดปัญหาของการใช้วิธีการเข้ารหัสในระบบสารสนเทศ (IS) จึงมีความเกี่ยวข้องเป็นพิเศษในขณะนี้

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

ในทางกลับกัน การเกิดขึ้นของคอมพิวเตอร์ที่มีประสิทธิภาพ เครือข่าย และเทคโนโลยีการประมวลผลแบบนิวรัลทำให้สามารถทำลายชื่อเสียงของระบบการเข้ารหัสลับ ซึ่งจนกระทั่งเมื่อไม่นานมานี้ถือว่าไม่สามารถแตกหักได้ในทางปฏิบัติ

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

ในบทที่สอง เราทำงานร่วมกับโปรโตคอลการแจกจ่ายคีย์เข้ารหัส แนวคิดของลายเซ็นอิเล็กทรอนิกส์ และโปรโตคอลลายเซ็นอิเล็กทรอนิกส์

บทที่สามของงานนี้พูดถึงฟังก์ชันแฮชและ (วิธีการ) อัลกอริธึมสำหรับการสร้าง

บทที่สี่จะพูดถึงการปรับปรุงลายเซ็นอิเล็กทรอนิกส์ El Gamal ให้ทันสมัย ​​และปัญหาลอการิทึมแบบไม่ต่อเนื่อง

วิทยาการเข้ารหัสลับ (คริปโตส - ความลับ โลโก้ - วิทยาศาสตร์) เกี่ยวข้องกับปัญหาการปกป้องข้อมูลโดยการแปลงข้อมูล วิทยาการเข้ารหัสลับแบ่งออกเป็นสองส่วน - วิทยาการเข้ารหัสลับและการวิเคราะห์วิทยา เป้าหมายของทิศทางเหล่านี้อยู่ตรงข้ามกันโดยตรง

การเข้ารหัสเกี่ยวข้องกับการค้นหาและการศึกษาวิธีการทางคณิตศาสตร์ในการแปลงข้อมูล

ประเด็นที่น่าสนใจของการเข้ารหัสคือการศึกษาความเป็นไปได้ของการถอดรหัสข้อมูลโดยไม่รู้คีย์

งานนี้จะมุ่งเน้นไปที่วิธีการเข้ารหัส

การเข้ารหัสสมัยใหม่ประกอบด้วยสี่ส่วนหลัก:

ระบบเข้ารหัสแบบสมมาตร

ระบบเข้ารหัสคีย์สาธารณะ

ระบบลายเซ็นอิเล็กทรอนิกส์

การจัดการคีย์

พื้นที่หลักของการใช้วิธีการเข้ารหัสคือการถ่ายโอนข้อมูลที่เป็นความลับผ่านช่องทางการสื่อสาร (เช่น อีเมล) การสร้างความถูกต้องของข้อความที่ส่ง การจัดเก็บข้อมูล (เอกสาร ฐานข้อมูล) บนสื่อในรูปแบบที่เข้ารหัส

การเข้ารหัสทำให้สามารถแปลงข้อมูลในลักษณะที่สามารถอ่าน (กู้คืน) ได้ก็ต่อเมื่อทราบรหัสเท่านั้น

ข้อความที่ใช้ตัวอักษรบางตัวจะถือเป็นข้อมูลที่ต้องเข้ารหัสและถอดรหัส ข้อกำหนดเหล่านี้หมายถึงสิ่งต่อไปนี้

ตัวอักษรคือชุดสัญญาณจำนวนจำกัดที่ใช้ในการเข้ารหัสข้อมูล

ข้อความคือชุดองค์ประกอบตามลำดับตัวอักษร

ต่อไปนี้เป็นตัวอย่างของตัวอักษรที่ใช้ในระบบสารสนเทศสมัยใหม่:

ตัวอักษร Z33 - ตัวอักษรรัสเซีย 32 ตัวและช่องว่าง

ตัวอักษร Z256 - อักขระที่รวมอยู่ในรหัส ASCII และ KOI-8 มาตรฐาน

ตัวอักษรไบนารี - Z2 = (0,1);

ตัวอักษรฐานแปดหรืออักษรฐานสิบหก

การเข้ารหัสเป็นกระบวนการเปลี่ยนแปลง ข้อความต้นฉบับหรือที่เรียกว่าข้อความธรรมดาจะถูกแทนที่ด้วยข้อความไซเฟอร์เท็กซ์

การถอดรหัสเป็นกระบวนการย้อนกลับของการเข้ารหัส ข้อความไซเฟอร์เท็กซ์จะถูกแปลงเป็นรหัสต้นฉบับตามคีย์

สิ่งสำคัญคือข้อมูลที่จำเป็นสำหรับการเข้ารหัสและถอดรหัสข้อความที่ราบรื่น

ระบบการเข้ารหัสคือตระกูลของการแปลงข้อความธรรมดาแบบ T สมาชิกของตระกูลนี้ได้รับการจัดทำดัชนีหรือกำหนดโดยสัญลักษณ์ k พารามิเตอร์ k คือกุญแจสำคัญ คีย์สเปซ K คือชุดของค่าคีย์ที่เป็นไปได้ โดยปกติแล้วคีย์จะเป็นชุดตัวอักษรตามลำดับ

Cryptosystems แบ่งออกเป็นคีย์สมมาตรและคีย์สาธารณะ

ในระบบเข้ารหัสลับแบบสมมาตร คีย์เดียวกันจะใช้สำหรับทั้งการเข้ารหัสและการถอดรหัส

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

ลายเซ็นอิเล็กทรอนิกส์ (ดิจิทัล) คือการแปลงการเข้ารหัสที่แนบมากับข้อความ ซึ่งช่วยให้เมื่อผู้ใช้รายอื่นได้รับข้อความ สามารถตรวจสอบผู้เขียนและความถูกต้องของข้อความได้

ความแรงของการเข้ารหัสเป็นคุณลักษณะของการเข้ารหัสที่กำหนดความต้านทานต่อการถอดรหัสโดยไม่ต้องรู้คีย์ (เช่น การเข้ารหัส) มีตัวบ่งชี้ความแข็งแกร่งของการเข้ารหัสหลายประการ ได้แก่:

จำนวนคีย์ที่เป็นไปได้ทั้งหมด

เวลาเฉลี่ยที่จำเป็นสำหรับการเข้ารหัสลับ

การแปลง Tk ถูกกำหนดโดยอัลกอริธึมที่เกี่ยวข้องและค่าของพารามิเตอร์ k ประสิทธิผลของการเข้ารหัสเพื่อปกป้องข้อมูลขึ้นอยู่กับการรักษาความลับของคีย์และความเข้มแข็งในการเข้ารหัสของการเข้ารหัส

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

ข้อกำหนดที่ยอมรับโดยทั่วไปต่อไปนี้ได้รับการกำหนดขึ้นสำหรับระบบรักษาความปลอดภัยข้อมูลการเข้ารหัสสมัยใหม่:

ข้อความที่เข้ารหัสจะต้องสามารถอ่านได้ก็ต่อเมื่อมีรหัสเท่านั้น

จำนวนการดำเนินการที่จำเป็นในการกำหนดคีย์เข้ารหัสที่ใช้จากส่วนของข้อความที่เข้ารหัสและข้อความธรรมดาที่เกี่ยวข้องจะต้องไม่น้อยกว่าจำนวนคีย์ที่เป็นไปได้ทั้งหมด

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

ความรู้เกี่ยวกับอัลกอริธึมการเข้ารหัสไม่ควรส่งผลกระทบต่อความน่าเชื่อถือของการป้องกัน

การเปลี่ยนแปลงคีย์เล็กน้อยควรนำไปสู่การเปลี่ยนแปลงที่สำคัญในลักษณะที่ปรากฏของข้อความที่เข้ารหัสแม้ว่าจะใช้คีย์เดียวกันก็ตาม

องค์ประกอบโครงสร้างของอัลกอริธึมการเข้ารหัสจะต้องไม่เปลี่ยนแปลง

บิตเพิ่มเติมที่นำมาใช้ในข้อความระหว่างกระบวนการเข้ารหัสจะต้องซ่อนไว้อย่างสมบูรณ์และปลอดภัยในไซเฟอร์เท็กซ์

ความยาวของไซเฟอร์เท็กซ์ต้องเท่ากับความยาวของข้อความต้นฉบับ

ไม่ควรมีการอ้างอิงที่ง่ายและสร้างขึ้นได้ง่ายระหว่างคีย์ที่ใช้ตามลำดับในกระบวนการเข้ารหัส

คีย์ใด ๆ ที่เป็นไปได้จะต้องให้การปกป้องข้อมูลที่เชื่อถือได้

อัลกอริธึมจะต้องอนุญาตการใช้งานทั้งซอฟต์แวร์และฮาร์ดแวร์ในขณะที่การเปลี่ยนความยาวของคีย์ไม่ควรทำให้อัลกอริธึมการเข้ารหัสเสื่อมคุณภาพ

บทที่ 2 โปรโตคอลการแจกจ่ายคีย์เข้ารหัสและโปรโตคอลลายเซ็นอิเล็กทรอนิกส์

ไม่ว่าระบบการเข้ารหัสลับจะซับซ้อนและเชื่อถือได้เพียงใด จุดอ่อนในการใช้งานจริงคือปัญหาของการแจกจ่ายคีย์ เพื่อให้การแลกเปลี่ยนข้อมูลที่เป็นความลับระหว่างสองหัวข้อ IP เป็นไปได้ คีย์จะต้องถูกสร้างขึ้นโดยหนึ่งในนั้น จากนั้นจึงถ่ายโอนไปยังอีกอันหนึ่งอย่างเป็นความลับอีกครั้ง เหล่านั้น. โดยทั่วไปแล้ว การโอนคีย์อีกครั้งจำเป็นต้องใช้ระบบเข้ารหัสบางประเภท

เพื่อแก้ปัญหานี้ ระบบกุญแจสาธารณะจึงถูกเสนอโดยอิงจากผลลัพธ์ที่ได้จากพีชคณิตคลาสสิกและสมัยใหม่

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

ข้อความต้นฉบับถูกเข้ารหัสด้วยกุญแจสาธารณะของผู้รับและส่งถึงเขา โดยหลักการแล้วข้อความที่เข้ารหัสไม่สามารถถอดรหัสด้วยข้อความธรรมดาเดียวกันได้


สำคัญ. การถอดรหัสข้อความสามารถทำได้โดยใช้รหัสส่วนตัวเท่านั้นซึ่งผู้รับเท่านั้นที่รู้

ระบบการเข้ารหัสคีย์สาธารณะใช้สิ่งที่เรียกว่าฟังก์ชันย้อนกลับไม่ได้หรือฟังก์ชันทางเดียว ซึ่งมีคุณสมบัติดังต่อไปนี้: เมื่อกำหนดค่า x จะทำให้คำนวณค่า f(x) ค่อนข้างง่าย แต่ถ้า y=f(x) ดังนั้นจึงไม่มีวิธีง่ายๆ ในการคำนวณค่า x

ชุดของคลาสของฟังก์ชันที่ไม่สามารถย้อนกลับได้ทำให้เกิดระบบคีย์สาธารณะที่หลากหลาย อย่างไรก็ตาม ไม่ใช่ทุกฟังก์ชันที่ไม่สามารถย้อนกลับได้จะเหมาะสำหรับการใช้งานในไอซีจริง

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

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

หลังจากที่คณิตศาสตร์เริ่มเข้ารหัสข้อมูลและพัฒนาทฤษฎีการเข้ารหัส นักวิทยาศาสตร์ได้ค้นพบคุณสมบัติที่เป็นประโยชน์มากมายของวิทยาศาสตร์ประยุกต์นี้ ตัวอย่างเช่น อัลกอริธึมการถอดรหัสช่วยถอดรหัสภาษาที่ตายแล้ว เช่น อียิปต์โบราณหรือละติน

Steganography

Steganography มีอายุมากกว่าการเข้ารหัสและการเข้ารหัส ศิลปะนี้ปรากฏมานานแล้ว ความหมายที่แท้จริงคือ "การเขียนที่ซ่อนอยู่" หรือ "การเขียนลับ" แม้ว่าการอำพรางข้อมูลจะไม่ตรงกับคำจำกัดความของรหัสหรือตัวเลข แต่ก็มีจุดมุ่งหมายเพื่อซ่อนข้อมูลจากสายตาที่สอดรู้สอดเห็น

Steganography เป็นรหัสที่ง่ายที่สุด ตัวอย่างทั่วไปคือการกลืนกระดาษโน้ตที่คลุมด้วยขี้ผึ้ง หรือข้อความบนศีรษะที่โกนแล้วซึ่งซ่อนอยู่ใต้ผมที่โตแล้ว ตัวอย่างที่ชัดเจนที่สุดของการอำพรางตัวคือวิธีการที่อธิบายไว้ในหนังสือนักสืบภาษาอังกฤษหลายเล่ม (และไม่เพียงแต่) เมื่อข้อความถูกส่งผ่านหนังสือพิมพ์ซึ่งมีการทำเครื่องหมายตัวอักษรไว้อย่างรอบคอบ

ข้อเสียเปรียบหลักของ Steganography ก็คือคนนอกที่เอาใจใส่สามารถสังเกตเห็นได้ ดังนั้น เพื่อป้องกันไม่ให้อ่านข้อความลับได้ง่าย จึงมีการใช้วิธีการเข้ารหัสและการเข้ารหัสร่วมกับการอำพรางข้อมูล

ROT1 และรหัสซีซาร์

ชื่อของรหัสนี้คือ ROTate 1 จดหมายส่งต่อและเป็นที่รู้จักของเด็กนักเรียนหลายคน มันเป็นรหัสทดแทนอย่างง่าย สาระสำคัญคือแต่ละตัวอักษรจะถูกเข้ารหัสโดยการเลื่อนตัวอักษร 1 ตัวไปข้างหน้า A -> B, B -> B, ..., I -> A. ตัวอย่างเช่น ลองเข้ารหัสวลี “ Nastya ของเราร้องไห้เสียงดัง” และรับ “obshb Obtua dspnlp rmbsheu”

รหัส ROT1 สามารถสรุปให้เป็นจำนวนออฟเซ็ตที่กำหนดเองได้ จากนั้นจึงเรียกว่า ROTN โดยที่ N คือตัวเลขที่ควรชดเชยการเข้ารหัสตัวอักษร ในรูปแบบนี้ รหัสนี้เป็นที่รู้จักมาตั้งแต่สมัยโบราณ และเรียกว่า "รหัสซีซาร์"

รหัสซีซาร์นั้นง่ายและรวดเร็วมาก แต่เป็นรหัสการเรียงสับเปลี่ยนเดี่ยวที่เรียบง่าย ดังนั้นจึงแตกง่าย มีข้อเสียเปรียบคล้ายกันคือเหมาะสำหรับการแกล้งเด็กเท่านั้น

รหัสการขนย้ายหรือการเรียงสับเปลี่ยน

รหัสการเรียงสับเปลี่ยนอย่างง่ายประเภทนี้มีความร้ายแรงมากกว่าและมีการใช้อย่างแข็งขันเมื่อไม่นานมานี้ ในช่วงสงครามกลางเมืองอเมริกาและสงครามโลกครั้งที่ 1 มีการใช้ข้อความนี้ในการส่งข้อความ อัลกอริธึมประกอบด้วยการจัดเรียงตัวอักษรใหม่ - เขียนข้อความในลำดับย้อนกลับหรือจัดเรียงตัวอักษรใหม่เป็นคู่ ตัวอย่างเช่น ลองเข้ารหัสวลี “Morse code is also a cipher” -> “Akubza ezrom - ezhot rfish”

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

รหัสมอร์ส

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

โทรเลขและตัวอักษรเป็นคนแรกที่จดสิทธิบัตรสิ่งประดิษฐ์ "ของเขา" ในปี 1840 แม้ว่าอุปกรณ์ที่คล้ายกันจะถูกประดิษฐ์ต่อหน้าเขาทั้งในรัสเซียและอังกฤษก็ตาม แต่ใครจะสนใจล่ะตอนนี้... รหัสโทรเลขและมอร์สมีอิทธิพลอย่างมากต่อโลก ทำให้สามารถส่งข้อความข้ามทวีปได้ในทันที

การทดแทนอักษรเดี่ยว

รหัส ROTN และมอร์สที่อธิบายไว้ข้างต้นเป็นตัวแทนของแบบอักษรทดแทนแบบตัวอักษรเดียว คำนำหน้า "mono" หมายความว่าในระหว่างการเข้ารหัส ตัวอักษรแต่ละตัวในข้อความต้นฉบับจะถูกแทนที่ด้วยตัวอักษรหรือรหัสอื่นจากตัวอักษรเข้ารหัสตัวเดียว

การถอดรหัสรหัสทดแทนแบบง่ายนั้นไม่ใช่เรื่องยากและนี่คือข้อเสียเปรียบหลัก สามารถแก้ไขได้โดยเพียงแค่ค้นหาหรือ ตัวอย่างเช่นเป็นที่รู้กันว่าตัวอักษรที่ใช้มากที่สุดในภาษารัสเซียคือ "o", "a", "i" ดังนั้น เราสามารถสรุปได้ว่าตัวอักษรที่ปรากฏบ่อยที่สุดในไซเฟอร์เท็กซ์หมายถึง "o", "a" หรือ "i" จากการพิจารณาเหล่านี้ ข้อความสามารถถอดรหัสได้แม้ว่าจะไม่ต้องค้นหาด้วยคอมพิวเตอร์ก็ตาม

เป็นที่รู้กันว่า Mary I ราชินีแห่งสก็อตตั้งแต่ปี 1561 ถึง 1567 มีการใช้รหัสแทนที่ตัวอักษรเดี่ยวที่ซับซ้อนมากซึ่งมีการผสมหลายชุด แต่ศัตรูของเธอก็สามารถถอดรหัสข้อความได้ และข้อมูลก็เพียงพอที่จะตัดสินประหารราชินี

รหัส Gronsfeld หรือการทดแทนหลายตัวอักษร

การเข้ารหัสแบบธรรมดาถือว่าไร้ประโยชน์ ดังนั้นจึงมีการปรับเปลี่ยนหลายอย่าง รหัส Gronsfeld เป็นการดัดแปลงรหัสของ Caesar วิธีการนี้มีความทนทานต่อการแฮ็กมากกว่ามากและประกอบด้วยความจริงที่ว่าอักขระแต่ละตัวของข้อมูลที่เข้ารหัสนั้นได้รับการเข้ารหัสโดยใช้ตัวอักษรตัวใดตัวหนึ่งซึ่งจะถูกทำซ้ำแบบวนซ้ำ เราสามารถพูดได้ว่านี่เป็นแอปพลิเคชั่นหลายมิติของรหัสแทนที่ที่ง่ายที่สุด อันที่จริง รหัส Gronsfeld นั้นคล้ายคลึงกับรหัสที่กล่าวถึงด้านล่างมาก

อัลกอริธึมการเข้ารหัส ADFGX

นี่คือรหัสลับสงครามโลกครั้งที่ 1 ที่มีชื่อเสียงที่สุดที่ชาวเยอรมันใช้ รหัสได้ชื่อมาเพราะมันลดขนาดรหัสทั้งหมดให้สลับตัวอักษรเหล่านี้ การเลือกตัวอักษรนั้นขึ้นอยู่กับความสะดวกเมื่อส่งผ่านสายโทรเลข ตัวอักษรแต่ละตัวในตัวเลขจะแสดงด้วยสองตัว มาดูรูปแบบสี่เหลี่ยมจัตุรัส ADFGX ที่น่าสนใจยิ่งขึ้นซึ่งมีตัวเลขและเรียกว่า ADFGVX

ดี เอฟ วี เอ็กซ์
เจ ถาม 5 ชม ดี
ดี 2 อี วี 9 ซี
เอฟ 8 ฉัน เอ็น เค วี
คุณ บี เอฟ 6 โอ
วี 4 เอ็กซ์ 3
เอ็กซ์ ถาม 7 0

อัลกอริทึมสำหรับการเขียนสี่เหลี่ยมจัตุรัส ADFGX มีดังนี้:

  1. เราสุ่มตัวอักษร n ตัวเพื่อแสดงคอลัมน์และแถว
  2. เราสร้างเมทริกซ์ N x N
  3. เราป้อนตัวอักษร ตัวเลข เครื่องหมาย ลงในเมทริกซ์ โดยสุ่มกระจัดกระจายไปทั่วเซลล์

มาสร้างสี่เหลี่ยมที่คล้ายกันสำหรับภาษารัสเซียกันดีกว่า ตัวอย่างเช่น เรามาสร้างสี่เหลี่ยมจัตุรัส ABCD:

บี ใน ดี
ของเธอ เอ็น BB ฉัน/ป
บี ชม วี/เอฟ เอช/ซี ซี ดี
ใน ช/ชช บี เอ็กซ์ ฉัน
เกี่ยวกับ ยู
ดี และ คุณ

เมทริกซ์นี้ดูแปลก เนื่องจากเซลล์จำนวนหนึ่งมีตัวอักษรสองตัว สิ่งนี้เป็นที่ยอมรับ ความหมายของข้อความจะไม่สูญหายไป สามารถฟื้นฟูได้ง่าย มาเข้ารหัสวลี “Compact Cipher” โดยใช้ตารางนี้:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
วลี ถึง เกี่ยวกับ ถึง เอ็น และ เอฟ
รหัส บีวี ยาม กิกะไบต์ จีดี อา บีวี ฐานข้อมูล เกี่ยวกับ ดีจี นรก เวอร์จิเนีย นรก BB ฮ่า

ดังนั้นข้อความที่เข้ารหัสสุดท้ายจะมีลักษณะดังนี้: “bvgvgbgdagbvdbabdgvdvaadbbga” แน่นอนว่าชาวเยอรมันใช้วิธีเดียวกันนี้ผ่านยันต์อีกหลายตัว และผลลัพธ์ที่ได้คือข้อความเข้ารหัสที่ป้องกันการแฮ็กได้มาก

รหัสวิเจแนร์

รหัสนี้เป็นลำดับความสำคัญที่ทนทานต่อการแตกร้าวได้ดีกว่ารหัสตัวอักษรเดียว แม้ว่าจะเป็นรหัสแทนที่ข้อความธรรมดาก็ตาม อย่างไรก็ตาม ด้วยอัลกอริธึมที่แข็งแกร่ง จึงถือว่าเป็นไปไม่ได้ที่จะแฮ็กเป็นเวลานาน การกล่าวถึงครั้งแรกย้อนกลับไปในศตวรรษที่ 16 Vigenère (นักการทูตชาวฝรั่งเศส) ถูกมองว่าเป็นผู้ประดิษฐ์อย่างผิดพลาด เพื่อให้เข้าใจสิ่งที่เรากำลังพูดถึงได้ดีขึ้น ลองพิจารณาตารางVigenère (Vigenère square, tabula recta) สำหรับภาษารัสเซีย

มาเริ่มเข้ารหัสวลี "Kasperovich หัวเราะ" แต่เพื่อให้การเข้ารหัสประสบความสำเร็จ คุณต้องมีคำหลัก - ปล่อยให้เป็น "รหัสผ่าน" ตอนนี้เรามาเริ่มการเข้ารหัสกัน ในการดำเนินการนี้ เราจดคีย์หลายครั้งเพื่อให้จำนวนตัวอักษรตรงกับจำนวนตัวอักษรในวลีที่เข้ารหัส โดยการทำซ้ำคีย์หรือตัดออก:

ตอนนี้ เมื่อใช้ระนาบพิกัด เรามองหาเซลล์ที่เป็นจุดตัดของคู่ตัวอักษร และเราได้: K + P = b, A + A = B, C + P = B เป็นต้น

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
รหัส: คอมเมอร์สันต์ บี ใน ยู กับ เอ็น ยู สช และ อี เอ็กซ์ และ

เราเข้าใจแล้วว่า "แคสเปอร์โรวิชหัวเราะ" = "abvyusnyugshch eykhzhgal"

การทำลายรหัสVigenèreนั้นยากมาก เนื่องจากการวิเคราะห์ความถี่จำเป็นต้องทราบความยาว คำหลัก- ดังนั้นการแฮ็กจึงเกี่ยวข้องกับการสุ่มเพิ่มความยาวของคีย์เวิร์ดและพยายามถอดรหัสข้อความลับ

ควรกล่าวถึงด้วยว่านอกเหนือจากคีย์สุ่มโดยสมบูรณ์แล้ว ยังสามารถใช้ตารางVigenèreที่แตกต่างไปจากเดิมอย่างสิ้นเชิง ในกรณีนี้ จัตุรัสVigenèreประกอบด้วยตัวอักษรรัสเซียที่เขียนทีละบรรทัดโดยมีออฟเซ็ตหนึ่ง ซึ่งนำเราไปสู่การเข้ารหัส ROT1 และเช่นเดียวกับในรหัสซีซาร์ ค่าชดเชยสามารถเป็นอะไรก็ได้ นอกจากนี้การเรียงลำดับตัวอักษรไม่จำเป็นต้องเรียงตามตัวอักษร ในกรณีนี้ ตัวตารางเองอาจเป็นคีย์ โดยไม่รู้ว่าข้อความใดจะเป็นไปไม่ได้ที่จะอ่านข้อความ แม้จะรู้คีย์ก็ตาม

รหัส

รหัสจริงประกอบด้วยการจับคู่สำหรับแต่ละคำ รหัสแยกต่างหาก- หากต้องการทำงานร่วมกับพวกเขา คุณต้องมีสิ่งที่เรียกว่ารหัสหนังสือ อันที่จริงนี่เป็นพจนานุกรมเดียวกันซึ่งมีเฉพาะคำแปลเป็นรหัสเท่านั้น ตัวอย่างโค้ดทั่วไปและแบบง่ายคือ ตาราง ASCII- รหัสสากลของตัวอักษรธรรมดา

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

ในศตวรรษที่ 20 หลายรัฐใช้รหัสเพื่อส่งข้อมูลลับ โดยเปลี่ยนสมุดรหัสหลังจากช่วงระยะเวลาหนึ่ง และพวกเขาก็ตามล่าหาหนังสือของเพื่อนบ้านและฝ่ายตรงข้ามอย่างแข็งขัน

"ปริศนา"

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

ตรงกันข้ามกับที่สุด ยันต์ง่ายๆ Enigma มีการผสมผสานที่เป็นไปได้หลายล้านล้านรายการ ทำให้แทบเป็นไปไม่ได้เลยที่จะทำลายข้อมูลที่เข้ารหัส ในทางกลับกัน พวกนาซีได้เตรียมชุดค่าผสมเฉพาะสำหรับแต่ละวัน ซึ่งพวกเขาใช้ในวันใดวันหนึ่งในการส่งข้อความ ดังนั้นแม้ว่า Enigma จะตกอยู่ในมือของศัตรู แต่ก็ไม่ได้มีส่วนช่วยในการถอดรหัสข้อความใด ๆ โดยไม่แนะนำ การกำหนดค่าที่จำเป็นทุกวัน.

พวกเขาพยายามทำลายอินิกมาอย่างแข็งขันตลอดการรณรงค์ทางทหารของฮิตเลอร์ ในอังกฤษในปี พ.ศ. 2479 อุปกรณ์คอมพิวเตอร์เครื่องแรก (เครื่องทัวริง) ถูกสร้างขึ้นเพื่อจุดประสงค์นี้ ซึ่งต่อมาได้กลายเป็นต้นแบบของคอมพิวเตอร์ในอนาคต งานของเขาคือจำลองปฏิบัติการของปริศนาหลายสิบตัวพร้อมกันและเรียกใช้ข้อความของนาซีที่สกัดกั้นผ่านพวกมัน แต่แม้แต่เครื่องทัวริงก็สามารถถอดรหัสข้อความได้เป็นครั้งคราวเท่านั้น

การเข้ารหัสคีย์สาธารณะ

อัลกอริธึมการเข้ารหัสที่ได้รับความนิยมสูงสุดซึ่งใช้ทุกที่ในเทคโนโลยีและระบบคอมพิวเตอร์ ตามกฎแล้วสาระสำคัญของมันอยู่ต่อหน้าสองคีย์ซึ่งหนึ่งในนั้นถูกส่งสู่สาธารณะและอันที่สองเป็นความลับ (ส่วนตัว) รหัสสาธารณะใช้เพื่อเข้ารหัสข้อความ และใช้รหัสลับเพื่อถอดรหัส

บทบาทของกุญแจสาธารณะส่วนใหญ่มักเล่นโดยคนมาก จำนวนมากซึ่งมีตัวหารเพียงสองตัวไม่นับหนึ่งและจำนวนนั้นเอง ตัวหารทั้งสองนี้รวมกันเป็นรหัสลับ

ลองดูตัวอย่างง่ายๆ ให้กุญแจสาธารณะเป็น 905 ตัวหารคือตัวเลข 1, 5, 181 และ 905 จากนั้นรหัสลับจะเป็นเช่นตัวเลข 5*181 คุณจะบอกว่ามันง่ายเกินไป? จะเกิดอะไรขึ้นถ้าหมายเลขสาธารณะเป็นตัวเลข 60 หลัก? การคำนวณตัวหารจำนวนมากเป็นเรื่องยากทางคณิตศาสตร์

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

ความทนทานของตัวอักษร

ความแรงของการเข้ารหัสลับของอัลกอริธึมการเข้ารหัสคือความสามารถในการต้านทานการแฮ็ก พารามิเตอร์นี้สำคัญที่สุดสำหรับการเข้ารหัสใดๆ เห็นได้ชัดว่าเป็นรหัสทดแทนง่ายๆที่ใครๆก็สามารถถอดรหัสได้ อุปกรณ์อิเล็กทรอนิกส์, เป็นหนึ่งในความไม่แน่นอนที่สุด

ไม่มีอยู่จริงในวันนี้ มาตรฐานทั่วไปซึ่งสามารถประเมินความแข็งแกร่งของรหัสได้ ต้องใช้แรงงานเข้มข้นและ กระบวนการที่ยาวนาน- อย่างไรก็ตาม มีคณะกรรมการจำนวนหนึ่งที่สร้างมาตรฐานในด้านนี้ ตัวอย่างเช่น ข้อกำหนดขั้นต่ำสำหรับ Advanced Encryption Standard หรืออัลกอริทึมการเข้ารหัส AES ที่พัฒนาโดย NIST USA

สำหรับการอ้างอิง: รหัส Vernam ได้รับการยอมรับว่าเป็นรหัสที่ทนทานต่อการถอดรหัสมากที่สุด ในเวลาเดียวกันข้อดีของมันคือมันเป็นรหัสที่ง่ายที่สุดตามอัลกอริธึม