เป็นไปได้ไหมที่จะลงนามเอกสารสำคัญ?


15

ฉันเล่นกับ openssl เพื่อสร้างคีย์ pub / prv และสร้างลายเซ็นของไฟล์และตรวจสอบความถูกต้อง ฉันเล่นกับ Cryptophane (windows gnupg frontend) และได้ยินเกี่ยวกับ keyservers + เล่นกับการเซ็นข้อความ

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


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

@ BJ292: และคุณยืนยันได้อย่างไรว่าแฮชไม่ได้ถูกดัดแปลง?
1686

@grawity - ไม่แน่ใจว่าฉันทำตาม - อะไรคือจุดของการยุ่งเกี่ยวกับแฮช ฉันส่งไฟล์และแฮชให้คุณ - คุณสร้างแฮชใหม่จากไฟล์และยืนยันว่าตรงกัน - นี่เป็นการยืนยันว่าไฟล์นั้นไม่มีการเปลี่ยนแปลง ในกรณีส่วนใหญ่นี่เป็นสิ่งที่คนส่วนใหญ่ต้องการ - ยืนยันไฟล์ที่ได้จาก A ถึง B ไม่เปลี่ยนแปลง ดูเหมือนว่านี่คือสิ่งที่ OP ดำเนินการมา
BJ292

3
@ BJ292: คุณคาดว่า OP จะเกี่ยวข้องกับความเสียหายของข้อมูลโดยไม่ตั้งใจเท่านั้น สิ่งนี้ไม่ได้รับการระบุ (หรือปฏิเสธ) ในคำถาม แต่ OP กำลังถามเกี่ยวกับลายเซ็นดิจิทัลดังนั้นฉันจะสมมติว่ามีความจำเป็นต้องป้องกันการปรับเปลี่ยนข้อมูลโดยเจตนา (อาจเป็นอันตราย)
user1686

1
@ BJ292: ไฟล์จะถูกมิร์เรอร์บนไซต์ ppls อื่น ๆ ฉันต้องการลงชื่อพวกเขาดังนั้นกระจกอาจไม่มีการแก้ไขใด ๆ

คำตอบ:


10

วิธีการทั่วไปคือการสร้างลายเซ็นที่แยกออกมาใน.sigไฟล์ (โดยทั่วไปคือลายเซ็น PGP โดยใช้gpg -b- X.509 เป็นเรื่องแปลกมาก) และให้ไฟล์ทั้งสองในตำแหน่งเดียวกัน ตัวอย่างเช่น:

ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2
ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2.sig

นี้สามารถใช้กับชนิดของไฟล์ใด ๆ gpg --verifyแต่ผู้ใช้จะต้องมีการตรวจสอบลายเซ็นด้วยตนเองโดยใช้


น่าเสียดายที่ไม่มีการใช้รูปแบบไฟล์เก็บถาวร(ที่ฉันรู้) ในปัจจุบันมีการสนับสนุนลายเซ็นในตัวโดยใช้ PGP หรือ X.509 (สิ่งนี้ไม่รวม CAB ซึ่ง Windows ใช้ภายใน แต่แทบจะไม่มีที่อื่นเลยและค่อนข้างซับซ้อนในการลงชื่อ) WinRAR 4 สามารถเพิ่มบันทึก "การตรวจสอบความถูกต้อง" โดยใช้รูปแบบที่เป็นกรรมสิทธิ์ แต่จะใช้สิทธิ์การใช้งาน WinRAR ของคุณเป็นคีย์การลงนามซึ่งมีการแตกซ้ำหลายครั้ง (อัปเดต: คุณลักษณะนี้ถูกลบออกจาก WinRAR 5 เนื่องจากความไม่มั่นคง)


บน Windows (และในไม่ช้า Mac OS X) เป็นไปได้ที่จะสร้าง "ไฟล์เก็บถาวรแบบขยายตัวเอง" ซึ่งเป็นไฟล์ปฏิบัติการที่ลงนามแบบดิจิทัลซึ่งแยกไฟล์เก็บถาวรออกจากภายในตัวเอง อย่างไรก็ตาม SFX นั้น จำกัด อยู่ที่ระบบปฏิบัติการเดียวดังนั้นจึงเหมาะสำหรับการแจกจ่ายโปรแกรมเท่านั้นไม่ใช่เอกสารหรือรูปภาพ (โปรแกรม Java สามารถลงนามและเป็นข้ามแพลตฟอร์มได้ แต่บางระบบยังมีรันไทม์ Java)


2

Jar-archives สร้างด้วย Javas jar-tool เป็น zip-Archives ที่มีประสิทธิภาพและมี jarsigner ซึ่งเป็นเครื่องมือในการลงชื่อ

นี่คือลิงค์ที่มีประโยชน์:

มันดูซับซ้อนไปหน่อยก่อน ("อะไรฉันต้อง keeytool ทำอะไรอีก?") แต่มันง่ายที่จะทำตามขั้นตอนในการแก้ปัญหาด้วยวิธีง่าย ๆ มันได้ผล. จากนั้นคุณสามารถจุ่มลึกลงไปในเรื่อง


นี่เป็นความจริง (ไฟล์เก็บถาวร XPI ยังเป็นไฟล์ ZIP ที่มีลักษณะคล้ายกันมาก) แต่ AFAIK มีเพียง Java Runtime เท่านั้นที่ตรวจสอบลายเซ็น JAR ได้จริงและจำเป็นต้องทำการตรวจสอบด้วยตนเอง
user1686

คุณหมายถึงmanual verificationอะไร ทางเลือกคืออะไร? การเติมอัตโนมัติซึ่งตรวจสอบตัวเองทุก 10 นาที OS จะตรวจสอบการเก็บถาวรอัตโนมัติเมื่อบูทเครื่องหรือไม่? เมื่อได้รับไฟล์เก็บถาวร - ไม่ว่าจะเป็นจาก CD, ไฟล์แนบอีเมล, ดาวน์โหลด, ... ? ควรเป็นปลั๊กอินในโปรแกรมสแกนไวรัสหรือไม่?
ผู้ใช้ที่ไม่รู้จัก

ฉันหมายถึงการตรวจสอบดำเนินการโดยเครื่องมือการแยกไฟล์เก็บถาวรก่อน / ระหว่างการแตกไฟล์หรือโดย OS / รันไทม์ระหว่างการทำงานของโปรแกรม ตัวอย่างเช่น.debลายเซ็นของแพ็กเกจได้รับการยืนยันโดยdpkgก่อนที่จะมีการติดตั้งแพ็คเกจโดยที่ผู้ใช้ไม่ต้องดำเนินการใด ๆ เพิ่มเติม
1686

@grawity: แอปเพล็ตที่ลงนามแล้ว, บีบอัดในไหร์, ได้รับการตรวจสอบก่อนดำเนินการ ในการสร้างเชลล์สคริปต์ขั้นต่ำซึ่งรวมการตรวจสอบ (jarsigner) กับการแยก (jar) จะไม่สำคัญ
ผู้ใช้ที่ไม่รู้จัก

ลิงก์ที่สาม "วิกิในการเซ็นชื่อไฟล์ jar" ใช้งานไม่ได้
Jason S

0

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

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


-1

คุณสามารถลงชื่อไฟล์โดยใช้ jarsigner ด้วยสองคำสั่งนี้:

keytool -genkeypair -alias <key-alias> -keyalg RSA -keystore <keystore> -validity 180

jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore <keystore> <file-to-sign> <key-alias>

คุณต้องติดตั้ง java jdk ในพีซีของคุณ

- คำสั่งแรกสร้างที่เก็บคีย์ในไดเรกทอรีปัจจุบัน (สมมติว่ามันไม่มีอยู่) มันสร้างคู่กุญแจสาธารณะ / ส่วนตัวโดยใช้อัลกอริทึม SHA-256

- คนที่สองลงนามไฟล์โดยใช้อัลกอริทึมเดียวกันที่เก็บคีย์และนามแฝงที่สร้างโดยคนแรก

ในการตรวจสอบไฟล์ที่ลงชื่อโดยใช้ที่เก็บคีย์คุณสามารถเรียกใช้คำสั่งนี้:

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