Чи можливо підписувати архіви?


15

Я грав з openssl, щоб зробити ключ pub / prv та створити підпис файлу та перевірити його. Я грав з Cryptophane (windows gnupg frontend) і чув про сервери клавіш + грав із текстом підписання.

Однак я ніколи не підписував файловий архів. Якщо я хочу опублікувати архів (7z, rar або zip, це не має значення), і я хотів би, щоб мої користувачі чи програмне забезпечення мали змогу перевірити, чи підписано цей архів, як би це зробити? Публічний ключ, очевидно, повинен бути доступний публічно. Але додавання підпису до архіву - це те, що мене турбує. Чи дозволяє будь-яке програмне забезпечення + архів мені підписати та перевірити стислий архівний файл?


Чому ви хочете його підписати? Ви можете просто створити хеш SHA1 і зробити хеш доступним для перевірки своїх клієнтів / користувачів. Цього достатньо для підтвердження того, що файл не був підроблений. Хоча ваші користувачі повинні мати можливість перевірити хеш, але не складніше, ніж перевірка підпису.
BJ292

@ BJ292: А як ви переконаєтесь, що хеш не був підроблений?
користувач1686

@grawity - Не впевнений, що я дотримуюся - у чому сенс підробляти хеш? Я надсилаю вам файл та хеш - ви відтворите хеш із файлу та підтвердите його відповідність - це підтверджує, що файл не змінено. За більшості обставин це все, що більшість людей хочуть - підтвердження, що файл отримав від А до Б незмінним. Безумовно, звучить так, що це те, через що йде ОП.
BJ292

3
@ BJ292: Ви припускаєте, що ОП стосується лише випадкової корупції даних. Про це не було сказано (або відмовлено) у запитанні, але ОП запитує про цифрові підписи, тому я припускаю, що потрібно захистити від навмисних (можливо, шкідливих) змін даних.
користувач1686

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) можливо створити "саморозпаковуваний архів" - виконуваний цифровим підписом файл, який витягує архів зсередини - ось, наприклад, працюють інсталятори програмного забезпечення в Windows. Однак SFX обмежені однією операційною системою, тому вони підходять лише для розповсюдження програм , а не документів або зображень. (Програми Java можуть бути підписані та є платформними, але деякі системи все ще мають час виконання Java.)


2

Jar-архіви, побудовані за допомогою інструменту Javas jar-tool, є ефективно zip-Archives, і є інструмент, ярсик, для їх підписання.

Ось кілька корисних посилань:

Спочатку це виглядає дещо складніше ("Що, мені потрібен keeytool? Що ще?"), Але легко виконувати кроки, щоб вирішити це просто. Це працює. Тоді ви можете зануритися глибше в справу.


Це правда (архіви XPI також мають ZIP-файли, підписані дуже схожим чином), але AFAIK, лише Java Runtime насправді перевіряє підписи JAR, а необхідність робити ручну перевірку робить його навіть менш практичним, ніж GnuPG.
користувач1686

Що ти маєш на увазі manual verification? Яка альтернатива? Автозапуск, який перевіряє себе кожні 10 хвилин? Чи повинен ОС автоматично перевірити архів під час завантаження? Коли буде отримано архів - будь то з компакт-диска, вкладення електронної пошти, завантаження, ...? Чи повинен це бути плагін у вашому сканері вірусів?
користувач невідомий

Я мав на увазі перевірку, виконану інструментом вилучення архіву до / під час вилучення, або ОС / час виконання під час виконання програми. Наприклад, .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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.