คีย์ในโปรโตคอลการเข้ารหัสคีย์ส่วนตัวมีการแลกเปลี่ยนกันอย่างไร


12

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

ทั่วไปมากขึ้น: ถ้า Alice และ Bob ใช้อัลกอริทึมการเข้ารหัส / ถอดรหัสที่ทำงานบนคีย์ส่วนตัวเดียวกันวิธีที่ปลอดภัยในการแลกเปลี่ยนคีย์นี้คืออะไร (ไม่ใช้หลักสูตรที่แตกต่าง)k

นี่คือสิ่งที่ฉันถามตัวเองเสมอเมื่อเรียนการเข้ารหัสคีย์ส่วนตัว


คำถามที่เกี่ยวข้อง
Raphael

คำตอบ:


6

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

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

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

  • การแลกเปลี่ยนคีย์ Diffie-Hellman : ใช้ arthimetic แบบแยกส่วนเพื่อแลกเปลี่ยนคีย์อย่างปลอดภัย
  • ศูนย์กระจายคีย์เดียว / หลาย (KDC) : ใช้ระบบจองตั๋วบุคคลที่สามที่เชื่อถือได้
  • โปรโตคอลการตรวจสอบสิทธิ์ของ Kerberos : โปรโตคอลที่ค่อนข้างซับซ้อนโดยใช้ KDC

7

เมื่อใดก็ตามที่ Alice และ Bob ต้องการที่จะเห็นด้วยกับคีย์ส่วนตัวเดียวกันวิธีที่นิยมมากที่สุดคือการใช้Diffie-Hellman มันทำงานได้ดังต่อไปนี้:

  1. ค่าส่วนกลางสองได้รับการแต่งตั้งครั้งแรกให้พูดและg(เหล่านี้มักจะเป็นจำนวนเฉพาะจำนวนมากและเป็นที่รู้จักสำหรับทุกคนที่ใช้โปรโตคอลนั้น)g = 17n=13g=17

  2. อลิซเลือกราคาเอกชนและบ๊อบเลือกราคาเอกชน7 เหล่านี้เป็นส่วนตัวกับตัวเองb = 7a=3b=7

  3. อลิซคำนวณ:และ Bob คำนวณ:ในกรณีนี้และและพวกเขาแลกเปลี่ยนค่าอื่น ๆ (อาจจะผ่านการแชท) เช่นทุกคนรู้ ค่าของ และBA=gamodnB=gbmodnA=12B=4AB

  4. อลิซคำนวณ:และบ๊อบคำนวณ:ในกรณีนี้12K=BamodnK=AbmodnK=12

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

ปัญหาในการเข้ารหัสคีย์ส่วนตัวคือการโจมตีแบบคนกลางและนั่นเป็นหนึ่งในเหตุผลหลักในการเลือกการเข้ารหัสคีย์สาธารณะเหนือการเข้ารหัสคีย์ส่วนตัว


5

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

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

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

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

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

  • อลิซสามารถรับรองความถูกต้องของบ๊อบโดยส่งการท้าทายให้เขา: ค่าสุ่ม ( nonce ) เข้ารหัสด้วยกุญแจสาธารณะของบ๊อบ ถ้าบ๊อบสามารถถอดรหัสค่านั้นแล้วส่งกลับอลิซก็รู้ว่าเธอกำลังคุยกับบ็อบอยู่
  • บ๊อบสามารถรับรองความถูกต้องกับอลิซโดยส่งข้อความที่ลงชื่อด้วยกุญแจสาธารณะของเขา อลิซตรวจสอบลายเซ็นเพื่อตรวจสอบว่าเธอกำลังพูดคุยกับบ็อบจริงๆ

มีหลากหลายรูปแบบที่ใช้หนึ่งในวิธีการเหล่านี้ (หรือยังตัวแปรอื่น) ในทิศทางเดียวและวิธีเดียวกันหรือแตกต่างกันในทิศทางอื่นหรือรับรองความถูกต้องในทิศทางเดียวเท่านั้น ตัวอย่างเช่นSSL / TLS (เลเยอร์การเข้ารหัสสำหรับโปรโตคอล -s จำนวนมากเช่น HTTPS, SMTPS, IMAPS ฯลฯ ) สามารถใช้การเข้ารหัสหลายชุดที่แตกต่างกันและมักจะรับรองความถูกต้องของเซิร์ฟเวอร์กับลูกค้า แต่สามารถรับรองความถูกต้องของไคลเอ็นต์ได้เช่นกัน Diffie-Hellman ช้าและยุ่งยากสำหรับแอปพลิเคชั่นนี้ ขั้นตอนวิธีการกันอย่างแพร่หลายมากที่สุดกับการจัดจำหน่ายที่สำคัญของประชาชนเป็นอาร์เอส

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

มีโปรโตคอลที่ไม่ต้องอาศัยการเข้ารหัสคีย์สาธารณะ โดยเฉพาะอย่างยิ่งโพรโทคอลKerberosถูกใช้ในเครือข่ายทั้งบน unix และ Windows เพื่อสร้างการเชื่อมต่อระหว่างไคลเอนต์และเซิร์ฟเวอร์ Kerberos ใช้เซิร์ฟเวอร์การรับรองความถูกต้องกลางที่เรียกว่าศูนย์กระจายคีย์ (KDC) KDC จะต้องมีรหัสผ่านของผู้ใช้ที่เก็บไว้ในฐานข้อมูลและโดยปกติแล้วไคลเอนต์จะแจ้งให้ผู้ใช้ใส่รหัสผ่าน เพื่อหลีกเลี่ยงการเปิดเผยรหัสผ่านโปรโตคอลไม่ได้ใช้รหัสผ่านโดยตรง แต่แฮชการเข้ารหัสลับหรือโดยทั่วไปฟังก์ชั่นที่ได้รับมาคีย์ที่ใช้กับรหัสผ่าน

ด้วยความลับที่ใช้ร่วมกันนี้ลูกค้าและ KDC สร้างช่องทางที่ปลอดภัยและ KDC ส่ง "ตั๋ว" ให้กับลูกค้า ตั๋วมีเซสชั่นคีย์ (เช่นคีย์ลับที่สร้างขึ้นใหม่) รวมถึงสำเนาของคีย์ที่เข้ารหัสด้วยคีย์สมมาตรอื่นที่ใช้ร่วมกันระหว่าง KDC และเซิร์ฟเวอร์ที่ไคลเอนต์ต้องการติดต่อ จากนั้นไคลเอ็นต์ส่งต่อสำเนาที่เข้ารหัสนี้ไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์ถอดรหัสข้อความนี้เพื่อรับคีย์เซสชันและสร้าง nonce ที่เข้ารหัสด้วยคีย์เซสชันและส่งกลับไปยังไคลเอ็นต์ จากนั้นไคลเอ็นต์จะเริ่มต้นช่องสัญญาณที่ปลอดภัยด้วยเซิร์ฟเวอร์เข้ารหัสด้วยคีย์เซสชันและเริ่มต้นด้วยการแสดงว่าสามารถถอดรหัส nonce: สิ่งนี้พิสูจน์ตัวตนของลูกค้าไปยังเซิร์ฟเวอร์ จัดตั้งเซสชั่น Kerberos เป็นตัวแปรของโปรโตคอล Needham-ชโรเดอ

¹ ในแง่ที่ว่า cryptographers ได้พยายามอย่างหนัก แต่วิธีที่ดีที่สุดที่พวกเขาค้นพบคือต้องใช้พลังงานในการคำนวณที่ไม่น่าเชื่อ


3

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


3

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

นอกจากโปรโตคอลการแลกเปลี่ยนคีย์ Diffie-Hellman (DH) แล้วยังมีโปรโตคอลการกระจายคีย์ควอนตัม หนึ่งในที่รู้จักมากที่สุดโปรโตคอล QKD เป็นโปรโตคอลเบนเน็ตต์-Brassard, BB84

ข้อได้เปรียบของ BB84 เหนือ DH คือ DH มีความปลอดภัยเฉพาะถ้าลอการิทึมแบบแยกไม่สามารถทำได้อย่างมีประสิทธิภาพ (ดูสมมติฐานลอการิทึมแบบไม่ต่อเนื่องและDDHที่เกี่ยวข้องที่เกี่ยวข้อง) อย่างไรก็ตาม BB84 มีความปลอดภัยในทางทฤษฎีข้อมูล นั่นคือแม้ว่า , BB84 จะยังคงปลอดภัย (แต่ DH จะไม่)P=NP

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.