ทำไม Amazon ถึงปล่อยกุญแจส่วนตัวแทนกุญแจสาธารณะ?


20

สมองของฉันโอบรอบเพลาด้วยกุญแจสาธารณะและกุญแจส่วนตัว เมื่อคุณสร้างเซิร์ฟเวอร์คลาวด์ (อินสแตนซ์) บนบริการ EC2 ของ Amazon และต้องการเชื่อมต่อผ่าน SSH Amazon จะต้องให้คุณดาวน์โหลดกุญแจส่วนตัวเพื่อทำการเชื่อมต่อ แนวคิดเบื้องหลังคีย์สาธารณะ / ส่วนตัวไม่แนะนำให้ Amazon ควรกำหนดให้คุณดาวน์โหลดรหัสสาธารณะหรือไม่

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


1
สำหรับพวกเราที่ไม่ค่อยคุ้นเคยกับ EC2 เป็นสิ่งที่ Amazon ต้องการให้คุณดาวน์โหลดรหัสส่วนตัวหรือไม่?
Zoredache

2
เมื่อคุณตั้งค่าเซิร์ฟเวอร์คลาวด์บน Amazon EC2 และต้องการเชื่อมต่อผ่าน SSH คอนโซล Amazon ช่วยให้คุณสามารถดาวน์โหลดคีย์ส่วนตัวที่คุณใช้เพื่อทำการเชื่อมต่อ แน่นอนว่าคุณต้องปกป้องกุญแจ
เซท

@Zoredache ในความเป็นธรรมนั่นเป็นตัวเลือก ใครบางคนกำลังมองหาเครื่องมืออย่างรวดเร็วบนกล่อง Windows อาจไม่เคยใช้ OpenSSH มาก่อนดังนั้นจึงเป็นจุดเริ่มต้นที่ดี
ceejayoz

คำตอบ:


36

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

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

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


18

Amazon ให้บริการการสร้างคีย์เนื่องจากระบบปฏิบัติการบางระบบ (ไอ, Windows, ไอ) อาจไม่สะดวกในการสร้างคู่คีย์ SSH

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

จากเอกสารที่:

http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html

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

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


5
ฉันสร้างคู่หลักบนเครื่อง windows เป็นประจำ ไม่ใช่เรื่องยากแม้ว่าจะใช้ซอฟต์แวร์ที่ติดตั้งเสร็จแล้ว แต่ไม่ใช่ Windows เอง
Dominic Cronin

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

โอ้ใช่ตกลง ฉันใช้ Cygwin ฯลฯ ด้วย openssh ดังนั้นทุกอย่างทำงานได้ดี ฉันคิดว่าผู้ใช้ Windows ส่วนใหญ่ที่ทำสิ่งนี้จะใช้ PuTTY และต้องทำการแปลงคีย์ มันเป็นเพียงขั้นตอนเพิ่มเติม
cjc

1
ฉันไม่เคยใช้ Amazon จริง ๆ แต่แทนที่จะโทษว่าเป็น windows ฉันจะถือว่าเหตุผลที่ Amazon ส่งรหัสให้คุณก็คือหากพวกเขาไม่ได้ให้รหัสแก่คุณในการเข้าสู่ระบบคุณจะลงชื่อเข้าใช้เพื่อติดตั้งสาธารณะของคุณได้อย่างไร สำคัญในสถานที่แรก?
DerfK

1
@DerfK คุณสามารถส่งกุญแจสาธารณะของคุณเองและเลือกว่าจะติดตั้งในอินสแตนซ์ EC2 ใหม่ การเลือกคีย์เฉพาะเป็นส่วนหนึ่งของกระบวนการสร้างอินสแตนซ์
cjc

2

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

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

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


1

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

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

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


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

1
@ErikA ไม่ไม่สามารถรับรหัสสาธารณะได้จากรหัสส่วนตัว ไฟล์คีย์ส่วนตัวมักจะมีทั้งสองคีย์ ถ้าคุณอยากที่จะได้รับในการอภิปรายผมขอแนะนำให้crypto.stackexchange.com คนเหล่านั้นสามารถให้รายละเอียดภายในอย่างลึกซึ้งกับคุณรวมถึงความแตกต่างที่แท้จริงของคีย์ RSA และทำไมคีย์ใดที่ถือว่าเป็นสาธารณะและส่วนตัวไม่ได้เป็นเพียงการพลิกเหรียญโดยพลการ
Jeff Ferland

@Zoredache - ฉันไม่รู้ว่า: ขอบคุณ คุณมีลิงค์ไปอ้างอิงที่ดีหรือไม่?
Dominic Cronin

en.wikipedia.org/wiki/Asymmetric_key_algorithm - หนึ่งกุญแจล็อคหรือเข้ารหัสข้อความธรรมดาและอื่น ๆ ปลดล็อคหรือถอดรหัส ciphertext ทั้งสองคีย์ไม่สามารถทำหน้าที่ทั้งสองได้ - en.wikipedia.org/wiki/RSA_(algorithm) - RSA เกี่ยวข้องกับกุญแจสาธารณะและกุญแจส่วนตัว คีย์สาธารณะสามารถเป็นที่รู้จักกับทุกคนและจะใช้สำหรับการเข้ารหัสข้อความ ข้อความที่เข้ารหัสด้วยกุญแจสาธารณะสามารถถอดรหัสได้โดยใช้กุญแจส่วนตัวเท่านั้น
Zoredache

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