.snk คืออะไร


153

ไฟล์. snk มีไว้เพื่ออะไร ฉันรู้ว่ามันย่อมาจากStrongly Named Keyแต่คำอธิบายทั้งหมดของสิ่งที่มันเป็นและวิธีการทำงานเหนือหัวของฉัน

มีคำอธิบายง่ายๆเกี่ยวกับวิธีการใช้คีย์ที่มีชื่ออย่างยิ่งและวิธีการทำงานอย่างไร

คำตอบ:


212

แฟ้ม .snk จะใช้ในการใช้ชื่อที่แข็งแกร่งในการชุมนุมสุทธิ ชื่อที่แข็งแกร่งดังกล่าวประกอบด้วย

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

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

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

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

บทความ " ความลับของการตั้งชื่อที่แข็งแกร่ง (เก็บถาวรที่เครื่อง Wayback) " ทำงานที่ยอดเยี่ยมในการอธิบายแนวคิดเหล่านี้โดยละเอียดยิ่งขึ้น พร้อมรูปภาพ


2
นี่หมายความว่าเมื่อคุณลงนามในแอสเซมบลีด้วย. PFX จริง ๆ แล้วมันใช้เพียงแค่สร้างแอปพลิเคชั่น. SNK ทันทีเมื่อใดก็ตาม
Patrick

5
@Patrick no นั่นคือAuthenticode Signatureซึ่งในขณะเดียวกันก็พิสูจน์ว่าไฟล์ไม่ได้ถูกแก้ไขระหว่างการเซ็นชื่อและการตรวจสอบนั้นไม่ได้ตอบสนองความต้องการชื่อที่แข็งแกร่ง ปัญหาคือ Authenticode ไม่จำเป็นต้องมีห่วงโซ่ของความน่าเชื่อถือของแอสเซมบลีที่ต้องมีการตั้งชื่อที่รัดกุมดังนั้นคุณสามารถ Authenticode เซ็นชื่อแอสเซมบลีที่อาศัยแอสเซมบลีชื่อ / ลงนามไม่แข็งแรง
Scott Chamberlain

1
คุณสามารถถอด snk ออกแล้วแทนที่ด้วยอีกอันหนึ่ง .. ฉันไม่รู้ว่าสถานการณ์จริงที่มีประโยชน์ .. มันเป็นคู่ที่สำคัญของเราที่คุณไม่สามารถสร้างความไว้วางใจได้
อิบราฮิม

8
WayBackMachine เชื่อมโยงไปยังความลับของชื่อที่แข็งแกร่ง
asfeynman

โปรดอัปเดตลิงก์ในคำตอบ (ไปยังลิงก์ที่แนะนำโดย @asfeynman) เนื่องจากลิงก์นั้นตายแล้วและทุกคนไม่ได้อ่านความคิดเห็น
XelaNimed

22

ในโลก. Net ไฟล์SNKจะถูกใช้เพื่อลงนามไบนารีที่รวบรวมของคุณ สิ่งนี้ช่วยให้สองสิ่งเกิดขึ้น:

  1. คุณสามารถลงทะเบียนการประชุมใน GAC (แคชสมัชชาทั่วโลก) โดยพื้นฐานแล้วคุณสามารถอ้างอิงได้จากหลาย ๆ ที่บนเครื่องเดียวกันโดยไม่ต้องบำรุงรักษาหลายชุด)
  2. คุณสามารถใช้ไบนารีของคุณจากภายในไบนารีอื่น ๆ ที่มีการลงชื่อด้วย (นี่เป็นพฤติกรรมแปลก ๆ ของไวรัสที่เกี่ยวกับชุดประกอบที่ลงนามแล้ว)
  3. แอสเซมบลีของคุณไม่สามารถแก้ไขได้อย่างง่ายดาย (โดยบุคคลที่สาม)ที่ไม่สามารถเข้าถึงไฟล์ SNK ได้โดยให้ความปลอดภัยอย่างน้อยจำนวนเล็กน้อย

ฉันไม่คุ้นเคยกับการทำงานของเซิร์ฟเวอร์ BizTalkดังนั้นฉันไม่คิดว่าฉันจะสามารถเข้าใจถึงจุดประสงค์ที่เฉพาะเจาะจงที่พวกเขาให้บริการภายในสภาพแวดล้อมนั้นได้

หวังว่านี่จะเป็นประโยชน์บ้าง


7

ไฟล์. snk ใช้สำหรับการลงนามชุดประกอบเพื่อให้สามารถเพิ่มลงใน Global Assembly Cache (GAC)

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการเข้ารหัสคีย์สาธารณะที่http://en.wikipedia.org/wiki/Public-key_cryptography


4

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

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


3

ไฟล์. snk จะใช้เพื่อให้แน่ใจว่าคนอื่นไม่สามารถส่งสลิปประกอบของพวกเขาในสถานที่ของคุณ มันมีคู่ของคีย์การเข้ารหัส / ถอดรหัส

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

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

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

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