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


11

ฉันกำลังทำ IPsec VPN บน ASA 8.0 และฉันเข้าใจเพียงเล็กน้อยเกี่ยวกับสิ่งนั้น ผู้ริเริ่มเริ่มต้นด้วยการส่งนโยบาย ISAKMP ไปยังผู้ตอบคำถามและผู้ตอบกลับจะส่งนโยบายที่ตรงกันกลับมา หลังจากนั้นคีย์ Diffie-Hellman จะได้รับการแลกเปลี่ยนจากนั้นทั้งคู่ก็ส่งคีย์ที่แชร์ล่วงหน้าไปยังอีกอันเพื่อการตรวจสอบความถูกต้อง

ตอนนี้เรามีสองปุ่ม:

  • หนึ่งจะถูกสร้างขึ้นโดยการเข้ารหัส AES
  • หนึ่งจะถูกสร้างขึ้นโดยกลุ่ม Diffie-Hellman

คีย์ใดที่ใช้เพื่อเข้ารหัสคีย์ที่แบ่งปันล่วงหน้า

คำตอบ:


16

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

ขั้นตอนที่ 1 สามารถทำได้ในสอง mods ต่างกัน: Main Mode และ Aggressive Mode ในโหมดใดโหมดหนึ่งข้อความแรกจะถูกส่งโดย Initiator และข้อความที่สองจะถูกส่งโดย Responder ทั้งสองข้อความเหล่านี้รวมถึงสิ่งที่เป็นที่รู้จักกันในโลกการเข้ารหัสเป็นNonce Nonce เป็นเพียงตัวเลขที่สร้างแบบสุ่มเพื่อใช้ในการสร้างคีย์ (ระยะ Nonce มาจาก _N_umber ใช้ _Once_) ดังนั้นหลังจากข้อความที่ 1 และข้อความที่ 2 ทั้งสองฝ่ายรู้จัก Nonces ของกันและกัน

Nonce ถูกรวมเข้ากับ Pre-Shared-Key เพื่อสร้างค่า Seed สำหรับการสร้างคีย์ลับ ส่วนสัมพันธ์ของIKE RFCอยู่ที่นี่:

 For pre-shared keys:       SKEYID = prf(pre-shared-key, Ni_b | Nr_b)

SKEYID เป็นค่า Seed ที่จะใช้ในการสร้างคีย์ลับเพิ่มเติมในภายหลัง Pre-Shared-Key และค่า Nonce ทั้งสอง (Ni_b เป็น Nonce ของ Initiator และ Nr_B เป็น Nonce ของ Responder) ถูกรวมเข้าด้วยกันโดยใช้ฟังก์ชัน PRF หรือ Psuedo แบบสุ่ม PRF เปรียบเสมือนอัลกอริธึมการแฮ็กยกเว้นว่าผลลัพธ์อาจมีหลายบิตตามที่คุณต้องการ

ตอนนี้ถ้าคุณกำลังทำโหมดหลักตอนแรกข้อความที่ 3 และ 4 จะแบ่งปันคีย์สาธารณะของผู้ริเริ่มและผู้ตอบคำถาม (ตามลำดับ) ของ Diffie-Hellman พวกเขาทั้งสองใช้ค่าเหล่านี้เพื่อสร้าง Diffie-Hellman ร่วมกันความลับ หากคุณกำลังทำโหมด Aggressive ค่า DH Public เหล่านี้จะรวมอยู่ในข้อความ 1 และข้อความ 2 (พร้อมด้วย Nonces)

จากนั้นค่า Seed จะถูกรวมเข้ากับ DH Shared Secret (และค่าอื่น ๆ สองสาม) เพื่อสร้างคีย์เซสชันสามอัน: คีย์ Derevative, คีย์การรับรองความถูกต้องและคีย์การเข้ารหัส RFC ระบุว่าเป็นเช่นนี้:

ผลลัพธ์ของโหมดหลักหรือโหมดก้าวร้าวคือวัสดุการคีย์ที่ผ่านการตรวจสอบสามกลุ่ม:

 SKEYID_d = prf(SKEYID, g^xy | CKY-I | CKY-R | 0)
 SKEYID_a = prf(SKEYID, SKEYID_d | g^xy | CKY-I | CKY-R | 1)
 SKEYID_e = prf(SKEYID, SKEYID_a | g^xy | CKY-I | CKY-R | 2)

SKEYID_d, _a และ _e เป็นกุญแจสามเซสชันที่กล่าวถึงข้างต้น SKEYIDเป็นค่าเมล็ดพันธุ์ g^xyคือ DH Shared Secret CKY-IและCKI-Rเป็นผู้ริเริ่มและคุกกี้ตอบกลับค่าเหล่านี้เป็นเพียงค่าเพิ่มเติมที่สร้างแบบสุ่มซึ่งจะใช้ในภายหลังเพื่อระบุการแลกเปลี่ยน ISAKMP และการเชื่อมโยงด้านความปลอดภัยโดยเฉพาะ 0 1 2คือตัวเลขที่แท้จริง 0, 1 และ 2 สัญลักษณ์ Pipe |แสดงถึงการต่อข้อมูล

ไม่ว่าในกรณีใดค่าทั้งหมดเหล่านี้จะถูกรวมเข้าด้วยกันโดยใช้ PRF ซึ่งสร้างคีย์เซสชันสามคีย์:

  • รหัสอนุพันธ์ - รหัสนี้ไม่ได้ใช้โดย ISAKMP และส่งมอบให้กับ IPsec แทนเพื่อให้ IPsec สามารถสร้างรหัสลับของตัวเอง
  • คีย์การรับรองความถูกต้อง - คีย์นี้ใช้โดย ISAKMP ใน HMAC (อัลกอริทึมการแฮชที่ปลอดภัยด้วยคีย์ลับ)
  • คีย์การเข้ารหัส - คีย์นี้ใช้โดย ISAKMP เพื่อเข้ารหัสสิ่งที่สมมาตร ISAKMP ต้องการอย่างปลอดภัยกับเพื่อนคนอื่น ๆ ดังนั้นหากอัลกอริทึมการเข้ารหัสที่เลือกสำหรับระยะที่ 1 คือ AES AES จะใช้คีย์นี้เพื่อเข้ารหัสข้อมูลแบบสมมาตร - AES จะไม่สร้างวัสดุการคีย์ของตัวเอง

คีย์การพิสูจน์ตัวตนและคีย์การเข้ารหัสใช้เพื่อรักษาความปลอดภัย / เข้ารหัสการเจรจาต่อรองระยะที่ 2 ในโหมดหลักข้อความ 5 และ 6 ของเฟส 1 จะได้รับการปกป้องด้วยปุ่มเหล่านี้ นอกจากนี้การแลกเปลี่ยนข้อมูล ISAKMP ในอนาคต (DPD, เหตุการณ์ Rekey, ลบข้อความ, ฯลฯ ) จะได้รับการปกป้องด้วยสองปุ่มนี้

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

RFC บอกว่ามันเป็นเช่นนั้น:

SKEYID_e เป็นวัสดุที่สำคัญที่ใช้โดย ISAKMP SA เพื่อปกป้องความลับของข้อความ

SKEYID_a เป็นวัสดุทำกุญแจที่ ISAKMP SA ใช้ในการตรวจสอบความถูกต้องของข้อความ

SKEYID_d เป็นวัสดุการคีย์ที่ใช้เพื่อรับคีย์สำหรับการเชื่อมโยงความปลอดภัยที่ไม่ใช่ของ ISAKMP

จากทั้งหมดที่กล่าวมาเราสามารถอ้างอิงกลับไปยังคำถามของคุณ: มีการใช้คีย์ใดเพื่อรักษาความปลอดภัย Pre-Shared-Key

ในโหมดหลัก Pre-Shared-Key (PSK) ได้รับการตรวจสอบในข้อความ 5 และ 6 ข้อความ 5 และ 6 ได้รับการป้องกันโดยคีย์เซสชันที่ ISAKMP สร้างขึ้นตามที่อธิบายไว้ข้างต้น

ในโหมดก้าวร้าวไม่มีข้อความใด ๆ ในการเจรจาถูกเข้ารหัส และ PSK ได้รับการตรวจสอบในข้อความที่ 2 และ 3 ข้อสังเกตฉันบอกว่าทั้งสองกรณี PSK นั้นได้รับการตรวจสอบแล้วและฉันไม่เคยบอกว่า PSK นั้นแลกเปลี่ยนกัน เห็นได้ชัดว่าหากไม่มีสิ่งใดในโหมด Aggressive ที่ถูกเข้ารหัสและคุณเพียงส่ง Pre-Shared-Key ข้ามสายที่ไม่ได้เข้ารหัสจะมีช่องโหว่ด้านความปลอดภัยที่ใหญ่โต

โชคดีสำหรับเราผู้เขียนของ ISAKMP ก็คิดเช่นนั้น และเป็นผลให้พวกเขาสร้างวิธีพิเศษในการตรวจสอบว่าแต่ละฝ่ายมี PSK ที่ถูกต้องโดยไม่ต้องแชร์ผ่านสายจริง : มีสองรายการที่มีการใช้ในการตรวจสอบไปยังแต่ละ Peer ว่าพวกเขาทั้งสองมี PSK เดียวกันวิธีเอกลักษณ์และแฮเอกลักษณ์

VPN Peers สามารถเลือกที่จะระบุตัวตนของพวกเขาด้วยวิธีการต่าง ๆ ; โดยทั่วไปเพียร์ก็จะใช้ที่อยู่ IP ของแหล่งที่มา แต่พวกเขามีตัวเลือกในการใช้ FQDN หรือชื่อโฮสต์ แต่ละสิ่งเหล่านี้พร้อมกับค่าสหสัมพันธ์สำหรับวิธีการที่เลือกเป็นสิ่งที่ประกอบกันเป็นวิธีการระบุตัวตน ดังนั้นสำหรับตัวอย่างเช่นถ้าผมมี IP 5.5.5.5 และฉันต้องการที่จะใช้ที่อยู่ IP ของฉันที่จะระบุตัวเองของฉันวิธี IDได้อย่างมีประสิทธิภาพจะเป็น[IP Address, 5.5.5.5] (หมายเหตุ: ค่าทั้งสองเป็นวิธีการ ID ทั้งหมด)

วิธี ID จะรวมกันแล้ว (ใช้ PRF ก) ด้วยค่าเมล็ดพันธุ์ที่เราพูดถึงก่อนหน้านี้ (SKEYID) และค่าอื่น ๆ ไม่กี่เพื่อสร้างเอกลักษณ์ของแฮ จำได้ว่าสิ่งที่สร้าง SKEYID ตั้งแต่แรกคือ Pre-Shared-Key

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

นี่คือคำอธิบายใน RFC ที่นี่:

ในการตรวจสอบความถูกต้องของการแลกเปลี่ยนริเริ่มของโปรโตคอลสร้าง HASH_I และตอบกลับสร้าง HASH_R ที่:

HASH_I = prf(SKEYID, g^xi | g^xr | CKY-I | CKY-R | SAi_b | IDii_b )
HASH_R = prf(SKEYID, g^xr | g^xi | CKY-R | CKY-I | SAi_b | IDir_b )

IDii และ IDir เป็นวิธีการ ID และ HASH_I และ HASH_R เป็นผู้ริเริ่มและแฮชของ Responder ทั้งสองสิ่งนี้ถูกแชร์ในเฟส 1 จาก RFC:

เมื่อทำการตรวจสอบคีย์ที่แบ่งปันล่วงหน้าโหมดหลักจะถูกกำหนดดังนี้:

         Initiator                        Responder
        ----------                       -----------
         HDR, SA             -->
                             <--    HDR, SA
         HDR, KE, Ni         -->
                             <--    HDR, KE, Nr
         HDR*, IDii, HASH_I  -->
                             <--    HDR*, IDir, HASH_R

โหมด Aggressive พร้อมคีย์ที่แบ่งปันล่วงหน้ามีการอธิบายดังนี้:

       Initiator                        Responder
      -----------                      -----------
       HDR, SA, KE, Ni, IDii -->
                             <--    HDR, SA, KE, Nr, IDir, HASH_R
       HDR, HASH_I           -->

และในที่สุดเราก็สามารถตอบคำถามของคุณได้อย่างเต็มที่:

Pre-Shared-Key จะรวมกันโดยใช้ PRF กับ Nonces และกลุ่มของค่าอื่น ๆ ที่คนอื่น ๆ รู้จักในการเจรจา ผลที่ได้คือค่าที่สามารถบรรลุร่วมกันโดยทั้งสองฝ่ายหากทั้งสองฝ่ายเริ่มต้นด้วยค่าเดียวกัน - หรือที่เรียกว่า pre-shared-key เดียวกัน ค่าผลลัพธ์คือสิ่งที่แชร์บน wire โดยอนุญาตให้ทั้งสองฝ่ายยืนยันว่าพวกเขามีการจับคู่ Pre-Shared-Keys โดยไม่เปิดเผยข้อมูลใด ๆ เกี่ยวกับ Pre-Shared-Key เอง

โหมดหลักไปอีกขั้นหนึ่งที่ปลอดภัยยิ่งขึ้นด้วยการเข้ารหัสการแลกเปลี่ยน "ผลลัพธ์ที่ได้" ตามที่อธิบายไว้ข้างต้นทำให้ยากยิ่งขึ้นในการดึงข้อมูลที่เป็นประโยชน์เกี่ยวกับสิ่งที่ Pre-Shared-Key ใช้


(ดูเหมือนว่าฉันล้มเหลวอย่างน่าสังเวชที่จะตอบคำถามสั้น ๆ นี้)


และสิ่งสุดท้าย. วิธีการเข้ารหัส aes ไม่สร้างคีย์ใด ๆ , ฉันกำลังเรียนรู้หนังสือ ccnp vpn, และมีการเขียนในหนังสือเล่มนี้ว่าอัลกอริทึมคีย์สมมาตรสร้างและใช้การเข้ารหัสศัตรูคีย์เดียว, ตัวอย่างของคีย์อัลโก symmet คือ aes, des
user3347934

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

ขอบคุณมากมันช่วยให้ฉันเข้าใจจริงๆว่า VPN ทำงานอย่างไรกับคีย์ที่แชร์ล่วงหน้า
user3347934

ฉันมีปัญหาหนึ่งโปรดดูที่networkengineering.stackexchange.com/questions/13484/
3347934

ที่จริงแล้วฉันไม่เข้าใจว่ามีการใช้คีย์ใดในการ crrate diffi-helmen คีย์ลับที่แชร์
user3347934

5

คำตอบของคุณอยู่ในคำถามของคุณ: การแลกเปลี่ยน Diffie-Hellman ใช้เพื่อสร้างคีย์ทั่วไปเพื่อแลกเปลี่ยนคีย์ทั่วไปอย่างปลอดภัย (เช่นการแบ่งปันล่วงหน้า)

ดูที่นี่: /security/67953/understanding-diffie-hellman-key-exchange

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