Можно ли подписывать архивы?


15

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

Я однако никогда не подписывал файловый архив. Если я хочу опубликовать архив (7z, rar или zip, это не имеет значения), и я бы хотел, чтобы мои пользователи или программное обеспечение могли проверить, подписан ли этот архив, как мне это сделать? Открытый ключ, очевидно, должен быть доступен публично. Но добавление подписи в архив - вот что меня беспокоит. Позволяет ли какое-либо программное обеспечение + архив подписывать и проверять сжатый архивный файл?


Почему вы хотите подписать это? Вы можете просто создать хеш SHA1 и сделать его доступным для проверки ваших клиентов / пользователей. Этого достаточно, чтобы подтвердить, что файл не был подделан. Хотя ваши пользователи должны иметь возможность проверять хеш, но не сложнее, чем проверять подпись.
BJ292

@ BJ292: А как проверить, что хеш не был взломан?
user1686

@ Grawity - Не уверен, что я следую - какой смысл вмешиваться в хэш? Я отправляю вам файл и хеш - вы заново создаете хеш из файла и подтверждаете, что он совпадает - это подтверждает, что файл не был изменен. В большинстве случаев это все, что нужно большинству людей - подтверждение того, что файл получен из А в Б без изменений. Конечно, звучит так, как будто это то, что нужно после ОП.
BJ292

3
@ BJ292: Вы предполагаете, что 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) можно создать «самораспаковывающийся архив» - исполняемый файл с цифровой подписью, который извлекает архив изнутри себя - так работают, например, установщики программного обеспечения в Windows. Однако SFX ограничены одной операционной системой, поэтому они подходят только для распространения программ , а не документов или изображений. (Java-программы могут быть подписаны и являются кроссплатформенными, но немногие системы все еще имеют среду выполнения Java.)


2

Jar-архивы, собранные с помощью Javas-jar-tool, по сути являются zip-архивами, и для подписи существует инструмент jarsigner.

Вот несколько полезных ссылок:

Сначала это выглядит немного сложно («Что, мне нужен keeytool? Что еще?»), Но легко выполнить шаги для простого решения. Оно работает. Тогда вы можете погрузиться глубже в вопрос.


Это правда (архивы XPI также являются ZIP-файлами, подписанными очень похожим образом), но AFAIK, только среда выполнения Java, фактически проверяет подписи JAR, а необходимость ручной проверки делает его еще менее практичным, чем GnuPG.
user1686 15.06.12

Что ты имеешь в виду manual verification? Какая альтернатива? Автопопуп, который проверяется каждые 10 минут? Должна ли ОС автоматически проверять архив при загрузке? Когда получен архив - будь то с CD, email-вложения, загрузки, ...? Должен ли это быть плагин в вашем антивирусном сканере?
пользователь неизвестен

Я имел в виду проверку, выполняемую инструментом извлечения архива до / во время извлечения или ОС / средой выполнения во время выполнения программы. Например, .debподписи пакетов проверяются dpkgперед установкой пакета, при этом пользователь не предпринимает никаких дополнительных действий.
user1686

@ Grawity: подписанные апплеты, упакованные в банку, проверены перед выполнением. Создать минимальный сценарий оболочки, который объединяет проверку (jarsigner) с извлечением (jar), будет тривиальным.
пользователь неизвестен

третья ссылка "вики на подписывание файлов JAR" не работает
Джейсон С

0

Конечно, каждый раз, когда вы устанавливаете подписанное программное обеспечение, вы проверяете подписанный архив. Чтобы создать его, вы должны использовать те же инструменты для упаковки, которые используют разработчики. Есть некоторые компромиссы, простота использования и кроссплатформенная совместимость. Я не могу придумать, как создать кросс-платформенный самораспаковывающийся архив с подписью.

Для окон создайте самораспаковывающийся архив с помощью инструмента 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.