Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.05.2017 23:59:55

Электронная цифровая подпись

Доброго времени!
Прошу совета у людей, у которых есть опыт работы с ЭЦП в веб-приложениях.
Задача стандартная, подписать документ, проверить подпись. Какими инструментами лучше это сделать? В голове много информации, личного эксперта в этом деле нет)) Нет понимания общих нюансов, что нужно для решения это задачи. Да и как вообще эта подпись к файлу подкрепляется, когда файл лежит на диске. Может есть актуальные гайды по этой теме.
Спасибо

Не в сети

#2 17.05.2017 11:59:20

Re: Электронная цифровая подпись

Имеется в виду работа с внешним устройством (токен, HSM и т.д.) или обычная подпись закрытым ключом, проверка открытым? Если второе, то всё делается через функции OpenSSL в PHP (Laravel с какой-то версии 5.х требует openssl, так что расширение должно присутствовать).

Вкратце, есть документ, есть закрытый ключ, есть открытый ключ (ключи тоже генерируются openssl). Есть три варианта: зашифровать, подписать, зашифровать+подписать. Во всех случаях получается несколько строк с разными данными, которые для хранения/передачи могут склеиваться в одну.

Например, при шифровании:

iv || ciphertext

Для шифрования для многих алгоритмов требуется IV (инициализирующий вектор) — в частности, для AES. Его обычно просто ставят в начале зашифрованных данных, так как его длина фиксированная. При расшифровке делают substr($data, 0, 32) (для AES-256, где ключ 32 байта).

Подписывать можно любые данные — либо исходные (когда не стоит задачи их скрыть), либо шифрованные (когда нужно и скрыть, и аутентифицировать). Подпись (как и IV и другие строки) можно хранить в другом месте или вместе с потоком. Текстовые данные (письма и прочее) можно подписывать так, что само сообщение идёт между строчками -----BEGIN MESSAGE----- и -----END MESSAGE-----, а подпись — между -----BEGIN SIGNATURE----- и -----END SIGNATURE-----. Двоичные данные можно склеить в один поток, но сохранив длину подписи в отдельном поле (т.к. она может меняться). В случае с файлами на диске стандартная практика — не менять сам файл, а создавать новый файл с расширением .sig, как, например, здесь.

Не в сети

#3 18.05.2017 14:20:58

Re: Электронная цифровая подпись

Спасибо за развернутый ответ! Правда, у меня задача по подписанию электронных документов посредством ЭЦП с использованием токена.

Не в сети

#4 21.05.2017 16:12:25

Re: Электронная цифровая подпись

С токеном ситуация сложнее, так как нужен интерфейс к нему (в Laravel скорее всего его нет, особенно если это российский токен, который используется в госучреждениях/банках). Если интерфейс есть, то работа в общих чертах не отличается от работы с openssl, с той разницей, что токен выполняет часть действий внутри себя (например, ему передается строка для шифрования, а он выдает зашифрованные данные — ключ не передается, он хранится внутри токена). Детали сильно зависят от интерфейса и типа токена.

Не в сети

#5 24.05.2017 01:27:26

Re: Электронная цифровая подпись

Спасибо, уже кое-что разузнал по этой теме)

Не в сети

#6 08.08.2017 13:08:57

Re: Электронная цифровая подпись

@Fridz, поделишься информацией? Тоже этот вопрос встал.

Изменено DrBlack (08.08.2017 13:09:12)

Не в сети

Подвал раздела