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

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

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

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

Steganography

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

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

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

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

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

การเข้ารหัส ROT1 สามารถสรุปได้ หมายเลขใดก็ได้ offsets จากนั้นเรียกว่า 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 เมื่ออ่านบัตร ข้อมูลส่วนบุคคลจะถูกเข้ารหัสด้วยกุญแจสาธารณะบางอัน และทางฝั่งธนาคารข้อมูลจะถูกถอดรหัสด้วยรหัสลับ และรหัสสาธารณะนี้สามารถเปลี่ยนแปลงได้สำหรับการดำเนินการแต่ละครั้ง แต่ไม่มีวิธีใดที่จะค้นหาตัวแบ่งหลักได้อย่างรวดเร็วเมื่อสกัดกั้น

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

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

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

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

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

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

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

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

เราจะไม่กล่าวถึง DES อย่างละเอียด (หนังสือเกือบทั้งหมดในรายการเอกสารเพิ่มเติมจะมีรายละเอียดดังกล่าว คำอธิบายโดยละเอียด) และมาดูอัลกอริธึมการเข้ารหัสที่ทันสมัยกว่านี้กันดีกว่า เป็นที่น่าสังเกตว่าเหตุผลหลักในการเปลี่ยนมาตรฐานการเข้ารหัสคือความแข็งแกร่งของการเข้ารหัสที่ค่อนข้างอ่อนแอ เหตุผลก็คือความยาวของคีย์ DES เพียง 56 บิตที่สำคัญ- เป็นที่ทราบกันดีว่าอัลกอริธึมการเข้ารหัสที่แข็งแกร่งสามารถถอดรหัสได้โดยการลองใช้คีย์เข้ารหัสที่เป็นไปได้ทั้งหมด (วิธีการที่เรียกว่า กำลังดุร้าย- การโจมตีด้วยกำลังดุร้าย) เป็นเรื่องง่ายที่จะคำนวณว่าคลัสเตอร์ที่มีโปรเซสเซอร์ 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 เช่น ตรรกะ การดำเนินการแฮคเกอร์- “พิเศษหรือ”) จากนั้นบล็อกย่อยจะถูกสลับ การเปลี่ยนแปลงครั้งนี้ดำเนินการ จำนวนที่แน่นอนครั้ง (“รอบ”): 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 (ในกรณีนี้คือข้อความซิงค์) จะถูกเข้ารหัสในโหมดการแทนที่อย่างง่าย

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 ระบบประมวลผลข้อมูล การป้องกันการเข้ารหัส อัลกอริธึมการแปลงการเข้ารหัส - ม.: มาตรฐานแห่งสหภาพโซเวียต, 2532
  2. อัลกอริทึม AES: http://www.nist.gov/ae
  3. อัลกอริทึม RSA: http://www.rsasecurity.com/rsalabs/pkcs/pkcs-1

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

แผนการทำงาน

นี่เป็นบทเรียนที่สี่ในชุด “Dive into Crypto” บทเรียนทั้งหมดในซีรีส์ตามลำดับเวลา:

  • ผู้เขียนโค้ดพื้นฐานและประวัติศาสตร์ วิธีการทำงานของกะ การทดแทน Richard Sorge, Vernam และการเข้ารหัส (และได้รับการวิเคราะห์)
  • คืออะไร การกระจายคีย์ทำอย่างไร และจะเลือกคีย์ที่รัดกุมได้อย่างไร
  • เครือข่าย Feistel คืออะไรและรหัสบล็อกในประเทศที่ใช้ในโปรโตคอลสมัยใหม่คืออะไร - GOST 28147-89, "Grassnechik"
  • บทที่ 4 ยันต์ต่างประเทศสมัยใหม่อะไรคือความแตกต่างระหว่าง 3DES, AES, Blowfish, IDEA, Threefish โดย Bruce Schneier และวิธีการทำงาน (คุณอยู่ที่นี่ไหม)
  • ประเภทของลายเซ็นอิเล็กทรอนิกส์ วิธีการทำงาน และวิธีการใช้งาน
  • บทที่ 6 การเข้ารหัสควอนตัมคืออะไร ใช้ที่ไหน และช่วยในการแจกจ่ายรหัสลับ สร้างตัวเลขสุ่ม และลายเซ็นอิเล็กทรอนิกส์อย่างไร

3DES

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

DES ได้รับการพัฒนาโดยทีมนักคณิตศาสตร์ที่ IBM Research Laboratory ซึ่งรวมถึง Feistel ที่คุ้นเคยอยู่แล้วด้วย รหัสเวอร์ชันแรกมีชื่อว่า "ลูซิเฟอร์" แต่ได้รับการแก้ไขในภายหลังและในที่สุดก็นำมาใช้เป็นอัลกอริทึมการเข้ารหัสข้อมูลอย่างเป็นทางการ (DEA) มันยังคงเป็นมาตรฐานโลกมานานกว่ายี่สิบปีก่อนที่จะถูกแทนที่ด้วย Triple DES

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

  1. ข้อความเช่นเดียวกับการเข้ารหัสอื่น ๆ จะถูกแบ่งออกเป็นบล็อกขนาด 64 บิต
  2. จากคีย์ 56 บิต จะมีการสร้างคีย์แบบกลม 48 บิต 16 คีย์
  3. แต่ละบล็อกผ่านการเรียงสับเปลี่ยน กล่าวคือ บิตทั้งหมดของบล็อกอินพุตจะถูกสับตามตารางที่กำหนด
  4. บล็อกถูกแบ่งออกเป็นครึ่งและเข้าสู่เครือข่าย Feistel ที่คุ้นเคยซึ่งมีการเลื่อน 16 รอบ
  5. เราเชื่อมต่อครึ่งหนึ่ง
  6. และอีกหนึ่งการเปลี่ยนแปลง

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

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

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

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

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

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

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


DES ที่ยอดเยี่ยม

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

DES ได้รับการพิสูจน์แล้วว่ามีจุดเด่นของทรัพย์สินนี้ทั้งหมด

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

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

DES ใช้ที่ไหน? ใช่ เกือบทุกที่ การใช้งานมีอยู่ในไลบรารีซอฟต์แวร์ส่วนใหญ่ อย่างไรก็ตาม ใครจะรู้ว่าการใช้ DES ในทุกวันนี้ปลอดภัยแค่ไหน? แม้ว่า IBM จะอ้างว่าอัลกอริทึมนี้เป็นผลมาจากการวิเคราะห์การเข้ารหัสอย่างเข้มข้นถึง 17 ปี แต่บางคนก็กลัวว่า NSA ได้แทรกช่องโหว่เข้าไปในอัลกอริทึมซึ่งทำให้หน่วยงานสามารถถอดรหัสข้อความที่ดักฟังได้อย่างง่ายดาย คณะกรรมการข่าวกรองของวุฒิสภาสหรัฐฯ ได้ศึกษาปัญหานี้อย่างรอบคอบ และแน่นอนว่าไม่พบสิ่งใดเลย ข้อกล่าวหาต่อ NSA ถูกยกฟ้อง และผลการศึกษาก็ยังคงถูกจัดประเภทไว้ กล่าวอีกนัยหนึ่งก็คือ ข่าวลือและการเก็งกำไรแพร่สะพัดในอเมริกามาเป็นเวลานานแล้วว่า DES ควรเชื่อถือได้หรือไม่ แต่อย่างที่ฉันเชื่อ สถานการณ์นี้อธิบายได้ด้วยคำพูดที่ว่า “คนฉลาดจะไม่บอก คนโง่จะไม่เข้าใจ” ท้ายที่สุด NSA ยอมรับว่าไม่สามารถไว้วางใจ IBM ในภารกิจที่สำคัญเช่นนี้ได้ และได้ทำการปรับเปลี่ยนหลายประการ เช่น การระบุ S-box

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

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

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

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

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

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

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

คำจำกัดความด้านความปลอดภัยทางไซเบอร์และคู่มือเริ่มต้นใช้งานฉบับย่อ

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

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

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

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

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

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

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

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

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

ทับทิม

need "openssl" need "pry" data_to_encrypt = "ตอนนี้คุณอ่านฉันได้แล้ว!" 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 จริง

ต้องการ "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– ถอดรหัสข้อความ:

ข้อมูลแฮช

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

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

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

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

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

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

ประเภทการเข้ารหัส

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

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

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

ในระบบสมัยใหม่ คีย์มักจะเป็นสตริงข้อมูลที่ได้มาจากรหัสผ่านที่รัดกุม หรือจากแหล่งที่มาแบบสุ่มโดยสมบูรณ์ มันถูกป้อนเข้าไปในซอฟต์แวร์เข้ารหัสแบบสมมาตร ซึ่งใช้เพื่อเก็บข้อมูลอินพุตเป็นความลับ การแย่งชิงข้อมูลสามารถทำได้โดยใช้อัลกอริธึมการเข้ารหัสแบบสมมาตร เช่น Data Encryption Standard (DES), Advanced Encryption Standard (AES) หรือ International Data Encryption Algorithm (IDEA)

ข้อ จำกัด

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

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

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

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

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

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

Diffie-Hellman และ RSA เป็นตัวอย่างของอัลกอริทึมที่ใช้การเข้ารหัสคีย์สาธารณะ

ข้อ จำกัด

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

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

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

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

การแฮช

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

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

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

Message Digest 5 (MD5) และ Secure Hashing Algorithm (SHA) เป็นอัลกอริธึมการแฮชที่ใช้กันอย่างแพร่หลายสองตัว

ข้อ จำกัด

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

การรวมกันของวิธีการเข้ารหัส

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

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

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

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

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