การเข้ารหัสและการลงชื่อเข้าใช้การเข้ารหัสแบบอสมมาตรแตกต่างกันอย่างไร


297

อะไรคือความแตกต่างระหว่างการเข้ารหัสข้อมูลบางอย่างกับการลงชื่อข้อมูลบางอย่าง (โดยใช้ RSA)

มันกลับบทบาทของกุญแจสาธารณะส่วนตัวหรือไม่?

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

การเซ็นชื่อมีประโยชน์ในสถานการณ์นี้หรือไม่

คำตอบ:


441

เมื่อเข้ารหัสคุณใช้กุญแจสาธารณะเพื่อเขียนข้อความและพวกเขาใช้กุญแจส่วนตัวเพื่ออ่าน

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

ฉันต้องการใช้ไพรเวตคีย์ของฉันเพื่อสร้างข้อความดังนั้นฉันเท่านั้นที่สามารถเป็นผู้ส่งได้

ฉันต้องการให้กุญแจสาธารณะของฉันถูกใช้เพื่ออ่านข้อความและฉันไม่สนใจว่าใครเป็นคนอ่าน

นี่คือการลงนามมันทำกับกุญแจส่วนตัวของคุณ

ฉันต้องการเข้ารหัสข้อมูลบางอย่างและใช้เป็นรหัสผลิตภัณฑ์สำหรับซอฟต์แวร์ของฉัน

ฉันแค่แคร์ว่าฉันเป็นคนเดียวที่สามารถสร้างสิ่งเหล่านี้

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

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

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

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


7
ในทางเทคนิคเมื่อคุณพูดว่าใช้รหัสส่วนตัวในการเขียนลายเซ็นของข้อความคุณกำลังบอกว่าแฮชของข้อความนั้นถูกเข้ารหัสด้วยรหัสส่วนตัวของฉันหรือไม่
Andy Ibanez

4
@AndyIbanez: สิ่งที่เข้ารหัส (ไดรฟ์ย่อย ) อาจรวมถึงการประทับเวลาและเกลือแบบสุ่มบางส่วน แต่ใช่นั่นคือส่วนสำคัญของมัน
Quassnoi

7
@Quassnoi อันที่จริงแล้วเมื่อเราพูดว่า 'sign with the private key' หมายความว่าไม่ใช่ 'เข้ารหัส' แต่หมายถึง 'ถอดรหัส' การเซ็นชื่อข้อความอย่างคร่าวๆนั้นเหมือนกับ decrypt ด้วยไพรเวตคีย์และในตัวรับที่เข้ารหัสด้วยพับลิกคีย์ด้วยวิธีนี้แฮชจะกลายเป็นเหมือนเดิมและสามารถเปรียบเทียบได้
Johnny Willer

5
@JohnnyWiller: ตามที่ @slim ระบุไว้ด้านล่างแกนทางคณิตศาสตร์จะเหมือนกันสำหรับทั้งฟังก์ชั่นการเข้ารหัสและถอดรหัส พวกเขาไม่ได้แยกฟังก์ชั่นพวกมันเป็นฟังก์ชั่นเดียวกันf(key, message)เช่นนั้นf(private, f(public, message)) === f(public, f(private, message)) === message
Quassnoi

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

143

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

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

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

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

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

ดังนั้น:

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

8
@headcode มันเพียง แต่นำไปใช้กับกุญแจอสมมาตร ปุ่มสมมาตรไม่ได้มาเป็นคู่
ผอม

3
ในความเป็นจริงมันใช้กับคีย์ RSA เท่านั้น ด้วยคีย์ ECDSA คุณสามารถสร้างคีย์สาธารณะจากไพรเวตคีย์และไพรเวตคีย์เป็นสเกลาร์ขณะที่คีย์สาธารณะเป็นพิกัด
David Schwartz

5
คุณจะถอดรหัสข้อความด้วยปุ่มสาธารณะได้อย่างไร ข้อความไม่ได้ถอดรหัสด้วยคีย์ส่วนตัวเท่านั้น
daremkd

3
5 แหล่งที่ขัดแย้งกับคำตอบนี้1 , 2 , 3 , 4 , 5
ครั้งที่

6
ไม่ใช่สิ่งที่คุณโทรหาสาธารณะและส่วนตัว คุณสามารถสร้างกุญแจสาธารณะจากกุญแจส่วนตัว แต่คุณไม่สามารถสร้างกุญแจส่วนตัวจากกุญแจสาธารณะ นั่นไม่ใช่ความแตกต่างใหญ่โตใช่ไหม
Greg Schmit

23

มีสองปัญหาที่แตกต่างกัน แต่มีความเกี่ยวข้องอย่างใกล้ชิดในการสร้างการสื่อสารที่ปลอดภัย

  1. เข้ารหัสข้อมูลเพื่อให้เฉพาะผู้ที่ได้รับอนุญาตเท่านั้นที่สามารถถอดรหัสและอ่านได้
  2. ตรวจสอบตัวตน / รับรองความถูกต้องของผู้ส่ง

ปัญหาทั้งสองนี้สามารถแก้ไขได้อย่างสวยงามโดยใช้การเข้ารหัสคีย์สาธารณะ

I. การเข้ารหัสและถอดรหัสข้อมูล

อลิซต้องการส่งข้อความถึงบ็อบที่ไม่มีใครสามารถอ่านได้

  • อลิซเข้ารหัสข้อความด้วยกุญแจสาธารณะของบ็อบแล้วส่งไปให้
  • บ๊อบได้รับข้อความและถอดรหัสโดยใช้คีย์ส่วนตัวของเขา

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

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

ครั้งที่สอง ยืนยันตัวตนของผู้ส่ง (รับรองความถูกต้อง)

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

แต่ถ้าฉันนั่งอยู่ระหว่างอลิซกับบ๊อบแนะนำตัวเองเป็น 'อลิซ' กับบ็อบและส่งข้อความของตัวเองไปหาบ๊อบแทนที่จะส่งต่อข้อความที่ส่งโดยอลิซ แม้ว่าฉันจะไม่สามารถถอดรหัสและอ่านข้อความต้นฉบับที่ส่งโดยอลิซ (ซึ่งต้องการการเข้าถึงกุญแจส่วนตัวของ Bob) ฉันกำลังหักหลังการสนทนาทั้งหมดระหว่างพวกเขา

มีวิธีที่บ๊อบยืนยันได้หรือไม่ว่าข้อความที่เขาได้รับนั้นส่งโดยอลิซ

  • อลิซเซ็นข้อความด้วยกุญแจส่วนตัวของเธอแล้วส่งไปให้ (ในทางปฏิบัติสิ่งที่มีการลงชื่อคือแฮชของข้อความเช่น SHA-256 หรือ SHA-512)
  • บ๊อบได้รับและยืนยันโดยใช้กุญแจสาธารณะของอลิซ เนื่องจากคีย์สาธารณะของอลิซยืนยันข้อความเรียบร้อยแล้วบ๊อบจึงสามารถสรุปได้ว่าข้อความนั้นได้รับการลงนามโดยอลิซ

1
ดังนั้นเมื่อคุณเซ็นข้อความคุณจะเซ็นข้อความจริงหรือข้อความที่เข้ารหัส?
FrostyStraw

21

ใช่คิดว่าการลงนามข้อมูลเป็นการให้ตราประทับขี้ผึ้งของคุณเองที่ไม่มีใครมี มันจะทำเพื่อให้บรรลุความสมบูรณ์และไม่ปฏิเสธ การเข้ารหัสจึงไม่มีใครสามารถดูข้อมูลได้ ซึ่งจะดำเนินการเพื่อให้บรรลุการรักษาความลับ ดูวิกิพีเดียhttp://en.wikipedia.org/wiki/Information_security#Key_concepts

ลายเซ็นเป็นแฮชของข้อความของคุณที่ลงนามโดยใช้กุญแจส่วนตัวของคุณ


16

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

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

ดังนั้นการใช้คีย์จะไม่ถูกย้อนกลับ (ไม่เช่นนั้นคีย์ส่วนตัวของคุณจะไม่เป็นส่วนตัวอีกต่อไป!)


ในการเข้ารหัสแบบอสมมาตรปกติการเข้ารหัสจะทำกับกุญแจสาธารณะของผู้รับไม่ใช่กุญแจส่วนตัวของคุณ
mmcdole

คุณไม่ควรพลาดว่าคำถามนี้เป็นเฉพาะที่เกี่ยวกับอาร์เอสที่ใช้กุญแจที่จะย้อนกลับไปและที่มันไม่ยอมคีย์ส่วนตัว
David Schwartz

8

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


1
เว็บเบราว์เซอร์ไม่เข้ารหัสข้อมูลตามอำเภอใจเมื่อใช้ SSL หรือไม่
Ian Warburton

2
@IanWarburton: แต่พวกเขาไม่ได้ใช้การเข้ารหัสแบบอสมมาตร การถ่ายโอนข้อมูลจริงใช้การเข้ารหัสแบบสมมาตรพร้อมคีย์เซสชันที่สร้างแบบสุ่ม
Michael Borgwardt

1
@IanWarburton: ไม่เพราะผู้โจมตีจะไม่ถูกเลือก อันตรายอยู่ในการเข้ารหัสหรือเซ็นชื่อบางสิ่งที่ผู้โจมตีโดยตรงจัดทำขึ้นเพราะมันสามารถสร้างขึ้นมาโดยเจตนาเพื่อเปิดเผยข้อมูลเกี่ยวกับกุญแจส่วนตัวของคุณหรือแม้แต่สร้างลายเซ็นที่ปรากฏว่าใช้ได้สำหรับบางสิ่งที่คุณไม่ต้องการลงชื่อ รายละเอียดของการทำงานกรณีหลังสำหรับ RSA อยู่ที่นี่: crypto.stackexchange.com/questions/35644/…
Michael Borgwardt

2
@IanWarburton: นั่นเป็นสาเหตุที่ RSA ต้องใช้การเติมเต็มดังนั้นคุณไม่เคยเข้ารหัสเฉพาะข้อความที่เลือก: en.wikipedia.org/wiki/… - แต่มันเป็นการดำเนินการที่เกี่ยวข้องกับไพรเวตคีย์
Michael Borgwardt

1
@IanWarburton ฉันไม่ใช่ผู้เชี่ยวชาญด้านการเข้ารหัส แต่จากสิ่งที่ฉันเข้าใจนั่นไม่ควรทำให้เกิดปัญหาใด ๆ
Michael Borgwardt

8

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

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


หากข้อความถูกถอดรหัสโดยกุญแจสาธารณะของฉันมีเพียงฉันเท่านั้นที่สามารถส่งได้ (สมมติว่ากุญแจส่วนตัวของฉันไม่ถูกบุกรุก)
Dojo

5

อะไรคือความแตกต่างระหว่างการเข้ารหัสข้อมูลบางอย่างกับการลงชื่อข้อมูลบางอย่าง (โดยใช้ RSA)

การเข้ารหัสรักษาความลับของข้อความ ("ข้อมูลบางอย่าง") ในขณะที่การลงนามให้ปฏิเสธไม่ได้: นั่นคือเฉพาะเอนทิตีที่ลงนามเท่านั้นที่สามารถลงนามได้ มีความแตกต่างการทำงานเช่นกัน อ่านต่อ.

มันกลับบทบาทของกุญแจสาธารณะส่วนตัวหรือไม่?

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

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

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

ตัวอย่างเช่นฉันต้องการใช้ไพรเวตคีย์ของฉันเพื่อสร้างข้อความดังนั้นฉันเท่านั้นที่สามารถเป็นผู้ส่งได้

นั่นไม่ใช่คุณสมบัติการปฏิเสธซึ่งสามารถทำได้โดยการลงนาม

ฉันต้องการให้กุญแจสาธารณะของฉันถูกใช้เพื่ออ่านข้อความและฉันไม่สนใจว่าใครเป็นคนอ่าน

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

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

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

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

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

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

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

มี Microsoft Authenticode เช่น ร้านค้าแอปพลิเคชันเช่นร้านค้า iStore และ Android อาจหรือไม่อาจใช้การเซ็นชื่อรหัส แต่พวกเขามีความมั่นใจว่าใบสมัครของคุณไม่ได้โคลนหรืออย่างน้อยไม่ได้โคลนภายในร้าน วิทยาการเข้ารหัสลับไม่ใช่วิธีแก้ปัญหาเสมอไป

การรักษารหัสของคุณจากการถูกโคลน / การเปลี่ยนแปลงที่ทุกคนเป็นหนักมากและคุณต้องการจะเป็นล่ำเป็นสันในดินแดน DRM ถ้าคุณไปทางนั้น

การเซ็นชื่อมีประโยชน์ในสถานการณ์นี้หรือไม่

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


"ในอดีตการสร้างลายเซ็น RSA มักถูกคิดว่าเป็น" การเข้ารหัสด้วยคีย์ส่วนตัว "อย่างไรก็ตามการดำเนินการค่อนข้างแตกต่างกันตามที่อธิบายไว้ข้างต้นและมาตรฐานในภายหลังนั้นพยายามอย่างยิ่ง - นี่ไม่ชัดเจนสำหรับฉัน KeyPair อาจเป็น pk หรือ sk และสิ่งใดที่เข้ารหัสอีกอันสามารถถอดรหัสได้ หากเราเห็นด้วยกับสิ่งนั้นเราจะยืนยันได้อย่างไรว่าการเซ็นชื่อและการเข้ารหัสนั้นแตกต่างกันในทางที่มีความหมาย ทั้งการเข้ารหัสและจากนั้นสามารถถอดรหัสได้ด้วยคีย์อื่นเท่านั้น ฉันเคยเห็นการอ้างอิงถึงฟังก์ชั่นการลงนามสิ่งนี้เกี่ยวข้องหรือไม่
มอร์แกน

สิ่งเดียวที่ฉันรู้ในฟังก์ชั่นการลงนามคือการแฮชข้อความก่อนการเข้ารหัส
มอร์แกน

4

ในสถานการณ์ของคุณคุณไม่เข้ารหัสในความหมายของการเข้ารหัสแบบอสมมาตร ฉันอยากจะเรียกมันว่า "เข้ารหัส"

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


2

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

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

ในฐานะที่เป็นอัลกอริทึมที่ใช้: ที่เกี่ยวข้องกับฟังก์ชั่นทางเดียวดูตัวอย่างวิกิพีเดีย หนึ่งในขั้นตอนแรกของอัลกอริธึมดังกล่าวใช้จำนวนเฉพาะจำนวนมาก แต่มีการคิดค้นฟังก์ชันทางเดียวมากกว่า

ค้นหา 'Bob', 'Alice' และ 'Mallory' เพื่อค้นหาบทความแนะนำทางอินเทอร์เน็ต


คุณสามารถแสดงความคิดเห็นในกรณีการใช้งานของฉันได้หรือไม่? ฉันต้องการใช้รหัสส่วนตัวเพื่อเข้ารหัสและกุญแจสาธารณะเพื่ออนุญาตให้ทุกคนและทุกคนในการถอดรหัส
mmcdole

1
มันไม่เป็นความจริงเลยว่าการเข้ารหัสแบบอสมมาตรทั้งหมดนั้นขึ้นอยู่กับจำนวนเฉพาะเป็นเพียงตัวอย่างที่รู้จักกันดีที่สุด (RSA) มีวิธีการอื่น ๆ เช่นการเข้ารหัสรูปไข่โค้ง
Michael Borgwardt

"ข้อความถูกเข้ารหัสแล้วเข้ารหัสโดยใช้กุญแจสาธารณะของผู้รับ" ประโยคนั้นไม่สมเหตุสมผลหรืออย่างน้อยก็ต้องการคำอธิบายเพิ่มเติม "เข้ารหัสแล้วเข้ารหัส" ???
Maarten Bodewes

คุณลืมเทรนต์! :)
Dojo

1

ตอบคำถามนี้ในเนื้อหาที่ผู้ถามต้องการใช้โซลูชันสำหรับสิทธิ์ใช้งานซอฟต์แวร์ข้อกำหนดคือ:

  1. ไม่มีบุคคลที่สามที่สามารถผลิตรหัสใบอนุญาตจากการถอดรหัสแอป
  2. เนื้อหาของรหัสซอฟต์แวร์ไม่จำเป็นต้องปลอดภัย
  3. รหัสซอฟต์แวร์ไม่สามารถอ่านได้

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

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

Python เอกสาร PyNaCl มีตัวอย่างของ 'ลายเซ็นดิจิทัล' ซึ่งจะตรงกับวัตถุประสงค์ http://pynacl.readthedocs.org/en/latest/signing/

และสาเหตุของโครงการ NaCl เป็นตัวอย่าง C

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