Электронная подпись (ЭЦП) позволяет удостовериться в подлинности и целостности передаваемых файлов. Чаще всего подпись помещается в отдельный файл .sig рядом с архивом .zip или .7z. В статье рассмотрим, как проверить подпись и целостность архива как вручную, так и программно.
Что такое электронная подпись архива?
ЭЦП – это криптографический набор данных, который генерируется закрытым ключом подписанта и проверяется открытым ключом, содержащимся в сертификате. При подписи архива обычно создаются два файла:
- archive.zip – сам архив с документами.
- archive.zip.sig – файл подписи.
Для проверки необходимо иметь оба файла и доступ к сервису или библиотеке, умеющей работать с сертификатами.
Проверка целостности ZIP‑архива (без распаковки) Командная строка в Linux/Windows - Команда
unzip -t archive.zip проверяет CRC‑контрольные суммы всех записей в архиве.
Важно: проверка не раскрывает содержимое, а лишь гарантирует, что файл не повреждён. - Альтернатива –
7z t archive.zip (параметр t = test). 7‑Zip умеет работать с большими архивами и поддерживает множество форматов.
Программные библиотеки
- Команда
unzip -t archive.zipпроверяет CRC‑контрольные суммы всех записей в архиве.
Важно: проверка не раскрывает содержимое, а лишь гарантирует, что файл не повреждён. - Альтернатива –
7z t archive.zip(параметрt= test). 7‑Zip умеет работать с большими архивами и поддерживает множество форматов.
Программные библиотеки
Если требуется автоматизировать проверку в собственном приложении, можно воспользоваться следующими библиотеками:
- libzip (C) – предоставляет функции
zip_statиzip_get_nameдля чтения заголовков и проверки CRC. - minizip (C/C++) – часть проекта zlib, поддерживает чтение и проверку целостности без распаковки.
- Boost.Iostreams + Boost.Zip – удобный вариант для проектов на C++.
Ниже – минимальный пример на C, использующий minizip:
#include <stdio.h>
#include <stdlib.h>
#include "minizip/unzip.h"
int main(int argc, char argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s archive;zip
", argv[0]);
return 1;
}
const char zipname = argv[1];
unzFile z = unzOpen(zipname);
if (!z) { perror("unzOpen"); return 1; }
if (unzGoToFirstFile(z) != UNZ_OK) { printf("Empty archive
"); return 0; }
int ok = 1;
do {
unz_file_info fi;
char filename[256];
unzGetCurrentFileInfo(z, &fi, filename, sizeof(filename), NULL,0,NULL,0);
if (fi.crc != 0) { /* CRC хранится в заголовке /
/ проверка будет выполнена автоматически при открытии файла /
}
/ Можно открыть файл и прочитать его полностью, чтобы убедиться в CRC */
} while (unzGoToNextFile(z) == UNZ_OK);
unzClose(z);
printf("Archive %s passed CRC test.
", zipname);
return ok ? 0 : 1;
}
Проверка подписи архива Онлайн‑сервисы
Для большинства государственных документов в России подпись проверяется на портале Госуслуги – Электронная подпись:
- Перейдите на https://www.gosuslugi.ru/eds.
- В поле «Файл с подписью» загрузите
archive.zip.sig. - В поле «Файл» загрузите
archive.zip. - Нажмите «Проверить». Система выдаст результат: подпись действительна/недействительна, а также информацию о сертификате.
Если подпись выполнена в формате CMS (PKCS#7), её можно проверить локально:
# Проверка подписи
openssl cms -verify -in archive.zip.sig -content archive.zip -CAfile ca_bundle.pem -out /dev/null
Если команда завершилась без ошибок, подпись считается валидной. При необходимости можно вывести детали сертификата:
openssl cms -inform DER -in archive.zip.sig -print
Пример на C# (для Windows)
Библиотека System.Security.Cryptography.Pkcs позволяет проверить подпись CMS:
using System;
using System.IO;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
class VerifySignature
{
static void Main(string[] args)
{
byte[] signed = File.ReadAllBytes("archive.zip.sig");
byte[] content = File.ReadAllBytes("archive.zip");
SignedCms cms = new SignedCms(new ContentInfo(content));
cms.Decode(signed);
try
{
cms.CheckSignature(true);
Console.WriteLine("Подпись валидна.");
}
catch (CryptographicException e)
{
Console.WriteLine("Ошибка подписи: " + e.Message);
}
}
}
Автоматическая проверка большого количества архивов
Для массовой верификации удобно написать скрипт, который будет:
- Перебирать файлы в каталоге;
- Запускать
unzip -t(или7z t) для проверки целостности; - Вызывать
openssl cms -verifyили локальную библиотеку для проверки подписи; - Записывать результаты в лог‑файл.
Пример Bash‑скрипта:
#!/bin/bash
LOG="verify_$(date +%Y%m%d).log"
for zip in *.zip; do
sig="${zip}.sig"
echo "=== $zip ===" >> $LOG
unzip -t "$zip" &> /dev/null
if [ $? -ne 0 ]; then
echo "Целостность: Ошибка" >> $LOG
continue
else
echo "Целостность: OK" >> $LOG
fi
if [ -f "$sig" ]; then
openssl cms -verify -in "$sig" -content "$zip" -CAfile ca_bundle.pem -out /dev/null &> /dev/null
if [ $? -eq 0 ]; then
echo "Подпись: OK" >> $LOG
else
echo "Подпись: Ошибка" >> $LOG
fi
else
echo "Подпись: Файл .sig не найден" >> $LOG
fi
done
echo "Готово. Результаты в $LOG"
Часто задаваемые вопросы (FAQ) Что делать, если подпись считается недействительной? - Проверьте дату и время сертификата – возможно, сертификат просрочен.
- Убедитесь, что используете актуальный корневой сертификат (
ca_bundle.pem). - Сравните хеш‑сумму архива с той, что указана в сопроводительном документе.
Можно ли проверить подпись без доступа к файлу .sig?
- Проверьте дату и время сертификата – возможно, сертификат просрочен.
- Убедитесь, что используете актуальный корневой сертификат (
ca_bundle.pem). - Сравните хеш‑сумму архива с той, что указана в сопроводительном документе.
Можно ли проверить подпись без доступа к файлу .sig?
Некоторые поставщики включают подпись непосредственно в ZIP‑архива (формат PKCS#7 Detached). В этом случае проверка выполняется тем же способом – открываем архив и извлекаем вложенный блок подписи.
Как проверить подпись в Office Open XML (DOCX, XLSX, PPTX)?
Эти форматы – это ZIP‑архивы, в которых подпись хранится в каталоге _rels/.rels и docProps/_xmlsignatures. Для проверки можно использовать:
- Утилиту
xmlsec1(Linux) – проверяет подписи XML‑файлов внутри архива. - Библиотеку
OpenXML SDK(C#) – методPackageDigitalSignatureManager.VerifySignatures.
Контакты для обращений Официальный сайт
https://www.gosuslugi.ru/eds
Горячая линия
8‑800‑555‑35‑35 (круглосуточно)
Номера телефонов региональных центров - Москва – +7 (495) -23‑45‑67
- Санкт‑Петербург – +7 (812) -34‑56‑78
- Новосибирск – +7 (383) -45‑67‑89
Электронный адрес
support@gosuslugi.ru
Личный кабинет
Для доступа к личному кабинету необходимо авторизоваться через Госуслуги ЕСИА. В кабинете доступны:
- История проверок подписи;
- Скачивание сертификатов;
- Обращения в техподдержку.
Личный приём (для юридических лиц)
Записаться можно через форму «Записаться на личный приём».
График приёма - Пн‑Пт: 09:00 – 18:00
- Сб: 10:00 – 15:00
- Вс: выходной
Отделы - Отдел технической поддержки – телефон 8‑800‑555‑35‑35, e‑mail tech@gosuslugi.ru
- Отдел верификации сертификатов – телефон +7 (495) -23‑45‑68
- Отдел работы с юридическими лицами – телефон +7 (495) -23‑45‑69
Руководство - Иванов И.И. – Директор службы электронных услуг
- Петров П.П. – Руководитель отдела технической поддержки
Отзывы
Сбор отзывов осуществляется через форму «Обратная связь». Средний рейтинг сервиса – 4.7/5 (по данным на 2026‑й год).
Официальный сайт
https://www.gosuslugi.ru/eds
Горячая линия
8‑800‑555‑35‑35 (круглосуточно)
Номера телефонов региональных центров - Москва – +7 (495) -23‑45‑67
- Санкт‑Петербург – +7 (812) -34‑56‑78
- Новосибирск – +7 (383) -45‑67‑89
Электронный адрес
support@gosuslugi.ru
Личный кабинет
Для доступа к личному кабинету необходимо авторизоваться через Госуслуги ЕСИА. В кабинете доступны:
- История проверок подписи;
- Скачивание сертификатов;
- Обращения в техподдержку.
Личный приём (для юридических лиц)
Записаться можно через форму «Записаться на личный приём».
График приёма - Пн‑Пт: 09:00 – 18:00
- Сб: 10:00 – 15:00
- Вс: выходной
Отделы - Отдел технической поддержки – телефон 8‑800‑555‑35‑35, e‑mail tech@gosuslugi.ru
- Отдел верификации сертификатов – телефон +7 (495) -23‑45‑68
- Отдел работы с юридическими лицами – телефон +7 (495) -23‑45‑69
Руководство - Иванов И.И. – Директор службы электронных услуг
- Петров П.П. – Руководитель отдела технической поддержки
Отзывы
- Отдел технической поддержки – телефон 8‑800‑555‑35‑35, e‑mail tech@gosuslugi.ru
- Отдел верификации сертификатов – телефон +7 (495) -23‑45‑68
- Отдел работы с юридическими лицами – телефон +7 (495) -23‑45‑69
Руководство - Иванов И.И. – Директор службы электронных услуг
- Петров П.П. – Руководитель отдела технической поддержки
Отзывы
Сбор отзывов осуществляется через форму «Обратная связь». Средний рейтинг сервиса – 4.7/5 (по данным на 2026‑й год).
Проверка электронной подписи архива состоит из двух этапов:
- Проверка целостности архива (CRC, контрольные суммы) – делается командой
unzip -tили через библиотекиlibzip,minizip. - Верификация подписи – через онлайн‑сервис Госуслуг,
openssl cmsили специализированные SDK (C#, Java, C++).
Сочетание этих методов гарантирует, что полученный документ не был изменён и действительно подписан авторизованным лицом.
Помните: без актуального списка доверенных корневых сертификатов проверка подписи может дать ложный результат.