คีย์ API และคีย์ลับทำงานอย่างไร จะปลอดภัยหรือไม่หากฉันต้องส่งผ่าน API และรหัสลับไปยังแอปพลิเคชันอื่น


136

ฉันเพิ่งเริ่มคิดว่าคีย์ api และคีย์ลับทำงานอย่างไร เพียง 2 วันที่ผ่านมาฉันลงทะเบียนสำหรับ Amazon S3 และติดตั้งปลั๊กอิน S3Fox พวกเขาขอให้ฉันใช้ทั้งรหัสการเข้าถึงและรหัสการเข้าถึงแบบลับซึ่งทั้งสองอย่างนั้นต้องการให้ฉันเข้าสู่ระบบเพื่อการเข้าถึง

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

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

คำตอบ:


90

โดยทั่วไปได้ชี้แจงรายละเอียดเกี่ยวกับสิ่งที่ระบุไว้ที่นี่

นี่คือวิธีการทำงาน: สมมติว่าเรามีฟังก์ชั่นที่ใช้จำนวนจากศูนย์ถึงเก้าเพิ่มสามและถ้าผลลัพธ์มากกว่าสิบลบสิบ ดังนั้น f (2) = 5, f (8) = 1, ฯลฯ ตอนนี้เราสามารถสร้างฟังก์ชั่นอื่นเรียกมันว่า f 'ที่ย้อนกลับโดยเพิ่มเจ็ดแทนสาม f '(5) = 2, f' (1) = 8, ฯลฯ

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

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

ฟังก์ชั่น HMACสร้างขึ้นบนที่จัดตั้งขึ้นฟังก์ชันแฮชที่จะใช้คีย์ที่รู้จักกันในการตรวจสอบข้อความสตริง มันได้ผลเช่นนี้:

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

ความแตกต่างระหว่างสิ่งนี้กับ PKI ก็คือวิธีนี้สงบเงียบทำให้สามารถแลกเปลี่ยนจำนวนขั้นต่ำระหว่างระบบของคุณกับเซิร์ฟเวอร์ของ Amazon

นั่นเป็นสิ่งเดียวกับการขอหมายเลขบัตรเครดิตหรือรหัสผ่านของฉันและเก็บไว้ในฐานข้อมูลของตัวเองหรือไม่

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

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

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

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


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

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

3
URL นี้บอกรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งาน Amazon S3 Auth - docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html
asyncwait

10
"ตามทฤษฎีฟังก์ชั่นทางคณิตศาสตร์ใด ๆ ที่แมปสิ่งหนึ่งไปยังอีกสิ่งหนึ่งสามารถย้อนกลับได้" - นั่นไม่เป็นความจริงฟังก์ชันแฮชเป็นตัวอย่าง มันง่ายมากที่จะแสดง สมมติว่าเรามีฟังก์ชั่นที่จะเปลี่ยนคำเป็นตัวเลขโดยยึดตามผลรวมของค่า (a = 1, b = 2, c = 3 ฯลฯ ) เช่น "SO" จะเป็น 18 +14 = 32 ดังนั้นเราจึงเปลี่ยน SO เป็น 32 แต่ถ้าฉันเปิดเผยฟังก์ชันนี้กับใครสักคนและให้หมายเลข 32 เขาไม่มีทางที่เขาจะรู้ว่าคำพื้นฐานของเราคือ "SO" หรือ "ZF" (26 + 6) หรือหนึ่งในความเป็นไปได้อื่น ๆ อีกมากมาย
Leo

1
ตามเอกสารที่ @asyncwait เชื่อมโยงแล้ว amazon จะเก็บรหัสลับของคุณอย่างแน่นอนไม่ใช่แค่แฮชของมัน ในความเป็นจริงดูเหมือนว่า hashing เดียวที่เกิดขึ้นคือสิ่งที่เกิดขึ้นภายในฟังก์ชั่น HMAC
cowlinator

7

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

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

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


2
การเชื่อมโยงคีย์ส่วนตัวไม่ได้ใช้งานไม่ได้แล้ว
setzamora

@Joset อัพเดทลิงค์ที่ชี้ไปที่สำเนาในเครื่อง wayback อินเทอร์เน็ตตั้งแต่ปี 2008
oligofren

1

AWS ได้ออกแบบอัลกอริทึมการรับรองความถูกต้องที่กำหนดเอง v4 ได้รับการปล่อยตัวในปี 2014 โดยมีรายละเอียดที่ระบุไว้ที่นี่: คำขอตรวจสอบสิทธิ์ (AWS ลายเซ็นรุ่นที่ 4) จุดสำคัญคือการร้องขอไม่ได้ลงนามด้วยตัวเอง แต่ด้วยคีย์การลงนามซึ่งสร้างขึ้นโดยใช้ความลับ นอกจากนี้ยังใช้ HMAC-SHA256 ในการเซ็นชื่อ

การสร้างลายเซ็น

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

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