Как подписать xml файл средствами php | PHPClub — клуб разработчиков PHP

Что такое эцп и кто может ее использовать

С развитием новых технологий электронно-цифровая подпись (ЭЦП) находит все более широкое применение. ЭЦП — электронный аналог личной подписи ответственного лица (а в некоторых случаях и печати организации).

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

ЭЦП бывает двух видов: простая и усиленная. Усиленная, в свою очередь, подразделяется на квалифицированную и неквалифицированную.

Простая ЭЦП — подпись, которая включает в себя определенную последовательность кодов или паролей и подтверждает факт подписания электронного документа определенным лицом.

Усиленная неквалифицированная ЭЦП (НЭП) — подпись, полученная в результате криптографического преобразования информации, которая позволяет выявить:

  • ответственное лицо, подписавшее документ;
  • факт изменения документа после его подписания.

Усиленная квалифицированная ЭЦП (КЭП) — подпись, которая обладает всеми свойствами неквалифицированной ЭЦП, но при этом имеет сертификат проверки ключа ЭЦП.

Простая и усиленная НЭП соответствуют автографу подписывающего лица на бумажном носителе, а усиленная КЭП — подписи ответственного лица и печати фирмы-заверителя электронного документа (пп. 2, 3 ст. 6 закона 63-ФЗ «Об электронной цифровой подписи»).

Подробнее о простой и усиленной ЭЦП узнайте в материалах:

ЭЦП можно получить в удостоверяющем центре (УЦ), аккредитованном Минкомсвязью РФ. Выдаваемый центром комплект включает:

  1. Сертификат ключа проверки ЭЦП — как правило, выдается на USB-носителе.
  2. Дистрибутив софта «КриптоПро» с активированной лицензией для использования в течение срока действия ключа проверки ЭЦП.

Ключ проверки ЭЦП действует в течение 12 месяцев, после чего подлежит замене.

Безопасность при использовании кэп


Безопасность КЭП

Статьей 10 Федерального закона от 06.04.2021 №63-ФЗ «Об электронной подписи (далее — Федеральный закон №63-ФЗ) установлена обязанность участников электронного взаимодействия обеспечивать конфиденциальность ключей электронных подписей.

При использовании электронной подписи стоит помнить, что токен в ваших руках — не просто флешка, а важный инструмент с помощью которого недоброжелатели могут вывести деньги со счета организации или даже переоформить ее на себя.

Чтобы не стать участником аферы, не передавайте свой ключ электронной подписи третьим лицам. Примером такой ситуации является случай, когда генеральный директор приобретает УКЭП и передает его бухгалтеру для сдачи отчетности, а бухгалтер выводит средства с расчетного счета компании.

В любом случае, чтобы обезопасить себя и свой бизнес, вам необходимо придерживаться трех простых правил:

  • Максимально бережно относиться к токену, который вы получили в УЦ, не передавать его третьим лицам. Если вашим сотрудникам для работы требуется сертификат ЭП — оформите им собственные КЭП.
  • В случае утери токена с действующим сертификатом ЭП или подозрений на незаконное использование — сразу обращайтесь в в УЦ для прекращения действия сертификата.
  • Если вам необходимо получить квалифицированную подпись – обращайтесь за ней только в проверенный Удостоверяющий Центр.

Спасибо, за внимание! Если у вас остались вопросы, от отвечу в комментариях.

#Электронная_Подпись#ЭЦП#крипто

Генерирование открытого и секретного ключей

Итак, вы решили самостоятельно изготовить усиленную неквалифицированную электронную подпись и научиться подписывать ею свои документы. Начать необходимо, конечно, с генерирования пары ключей, открытого (public key) и секретного (private key).

Существует множество стандартов и алгоритмов асимметричного шифрования. Одной из библиотек, реализующих эти алгоритмы, является PGP (Pretty Good Privacy). Она была выпущена в 1991 году под проприетарной лицензией, поэтому имеются полностью совместимые с ней свободные библиотеки (например, OpenPGP).

Одной из таких свободных библиотек является выпущенная в 1999 году GNU Privacy Guard (GnuPG, или GPG). Утилита GPG традиционно входит в состав почти всех дистрибутивов Линукса; для работы из-под Windows необходимо установить, например, gpg4win. Ниже будет описана работа из-под Линукса.

Сначала сгенерируем собственно ключи, подав (из-под обычного юзера, не из-под root’а) команду

gpg --full-generate-key

В процессе генерирования вам будет предложено ответить на ряд вопросов:

  • тип ключей можно оставить «RSA и RSA (по умолчанию)»;
  • длину ключа можно оставить по умолчанию, но вполне достаточно и 2048 бит;
  • в качестве срока действия ключа для личного использования можно выбрать «не ограничен»;
  • в качестве идентификатора пользователя можно указать свои фамилию, имя и отчество, например, Иван Иванович Иванов; адрес электронной почты можно не указывать;
  • в качестве примечания можно указать город, либо иную дополнительную информацию.

После ввода вами всех запрошенных данных утилита GPG попросит вас указать пароль, необходимый для доступа к секретному ключу. Дело в том, что сгененрированный секретный ключ будет храниться на вашем компьютере, что небезопасно, поэтому GPG дополнительно защищает его паролем.

Сгенерированные ключи (во всяком случае, открытый, но можно также и секретный, на тот случай, если ваш компьютер внезапно сломается) необходимо экспортировать в текстовый формат:

gpg --export -a "Иван Иванович Иванов" > public.key
gpg --export-secret-key -a "Иван Иванович Иванов" > private.key

Понятно, что private.key вы должны хранить в секрете, а вот public.key вы можете открыто публиковать и рассылать всем желающим.

Как на php проверить подпись pkcs7?

С помощью CryproPro Browser Plugin подписываем данные (данные в подпись не включаются) и передаем данные и подпись на сервер. Как на backend’е с помощью PHP проверить подпись?

Тестовый пример:
Подписываемые данные:
MTIz

Подпись:
MIIHrwYJKoZIhvcNAQcCoIIHoDCCB5wCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG9w0BBwGgggWO
MIIFijCCBTmgAwIBAgIKFa5nHQAAAAAAEzAIBgYqhQMCAgMwVzELMAkGA1UEBhMCUlUxSDBGBgNV
BAMTP0NlbnRlci1JbmZvcm0gVGVzdCBHb3N0IENBIGZvciBBdXRvbWF0ZWQgQ2VydGlmaWNhdGlv
biBTZXJ2aWNlczAeFw0xNjA0MjkxMTU2MDBaFw0xNjA1MjkxMjA2MDBaMIICATEYMBYGCCqFAwOB
DQEBEgo3ODI3MDEwMDAwMRYwFAYFKoUDZAMSCzE0MTQ2NTk0NDYwMRgwFgYFKoUDZAESDTEwMzc4
MDAwMDY1MjkxGjAYBggqhQMDgQMBARIMMDAwMDAwMDAwMDAwMSgwJgYJKoZIhvcNAQkBFhlrLnZh
Z25lckBjZW50ZXItaW5mb3JtLnJ1MQswCQYDVQQGEwJSVTEtMCsGA1UECAwkNzgg0LMuINCh0LDQ
vdC60YIt0J/QtdGC0LXRgNCx0YPRgNCzMQowCAYDVQQHDAEwMTMwMQYDVQQKDCrQntCe0J4gIjEy
0KLQtdGB0YLQvtCy0LDRjyDQktCw0LPQvdC10YAxMiIxCjAIBgNVBAsMATAxMzAxBgNVBAMMKtCe
0J7QniAiMTLQotC10YHRgtC 0LLQsNGPINCS0LDQs9C90LXRgDEyIjEKMAgGA1UECQwBMDEwMC4G
CSqGSIb3DQEJAgwhMDAwMDAwMDAwMC03ODA0MDEwMTItNzAxNzA4OTAzMzA3MSwwKgYDVQQMDCPQ
ktC10LTRg9GJ0LjQuSDRgdC/0LXRhtC40LDQu9C40YHRgjEsMCoGA1UEKgwj0JrRgdC10L3QuNGP
INCT0YDQuNCz0L7RgNGM0LXQstC90LAxFTATBgNVBAQMDNCS0LDQs9C90LXRgDBjMBwGBiqFAwIC
EzASBgcqhQMCAiQABgcqhQMCAh4BA0MABEDQ qVSBmQT0pLQktgaiF4eYRhHCkj4dgysTY6yGwqY
f3YO5ErwQEP551bi2cUWSAD56nUtMCmRSVdm/LTwXNgvo4ICNzCCAjMwDgYDVR0PAQH/BAQDAgTw
MFYGA1UdJQRPME0GCCsGAQUFBwMCBggrBgEFBQcDBAYHKoUDAgIiBgYHKoUDAwcIAQYIKoUDAwcB
AQEGBiqFAwMHAQYKKwYBBAGCNxQCAgYHKoUDAwYAATARBgUqhQNkbwQIDAZmZ2JkZmcwJwYDVR0R
BCAwHqQcMBoxGDAWBggqhQMDgQ0BARMKNzgyNzAxMDAwMDAdBgNVHQ4EFgQUcptDmJmnjCYFiHYT
qUV3uzpe154wHwYDVR0jBBgwFoAUu5WQXMfu/Sh KvktbnKGhg UzbowgYQGA1UdHwR9MHsweaB3
oHWGc2ZpbGU6Ly9XSU4tVkgzMDBRUTFPRTEvY2VydGVucm9sbC9DZW50ZXItSW5mb3JtJTIwVGVz
dCUyMEdvc3QlMjBDQSUyMGZvciUyMEF1dG9tYXRlZCUyMENlcnRpZmljYXRpb24lMjBTZXJ2aWNl
cy5jcmwwgaMGCCsGAQUFBwEBBIGWMIGTMIGQBggrBgEFBQcwAoaBg2ZpbGU6Ly9XSU4tVkgzMDBR
UTFPRTEvY2VydGVucm9sbC9XSU4tVkgzMDBRUTFPRTFfQ2VudGVyLUluZm9ybSUyMFRlc3QlMjBH
b3N0JTIwQ0ElMjBmb3IlMjBBdXRvbWF0ZWQlMjBDZXJ0aWZpY2F0aW9uJTIwU2VydmljZXMuY3J0
MCAGBSqFA2RwBBcwFQwEZGZnYgwDZmdiDANmZ2IMA2RmZzAIBgYqhQMCAgMDQQDrI0ZZv4spqkAE
FgMctJ0u/alxpARIoas EykdxXHNhsI qo6dNUvlDcU6iumt2vneS1Roae5JpXxONR0xhCAaMYIB
6DCCAeQCAQEwZTBXMQswCQYDVQQGEwJSVTFIMEYGA1UEAxM/Q2VudGVyLUluZm9ybSBUZXN0IEdv
c3QgQ0EgZm9yIEF1dG9tYXRlZCBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzAgoVrmcdAAAAAAATMAoG
BiqFAwICCQUAoIIBHDAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0x
NjA1MjMxMDU5NTlaMC8GCSqGSIb3DQEJBDEiBCBe8YSJYXui2NLX4No4mqpP8CKtAaOVEqT oajE
XkORSDCBsAYLKoZIhvcNAQkQAi8xgaAwgZ0wgZowgZcwCAYGKoUDAgIJBCAgZs3V6/iQi9GkX/56
BRMSGZJBQzzqS5IumTyjlmWxuTBpMFukWTBXMQswCQYDVQQGEwJSVTFIMEYGA1UEAxM/Q2VudGVy
LUluZm9ybSBUZXN0IEdvc3QgQ0EgZm9yIEF1dG9tYXRlZCBDZXJ0aWZpY2F0aW9uIFNlcnZpY2Vz
AgoVrmcdAAAAAAATMAoGBiqFAwICEwUABED8RT4JumVC2gUtGoMaemycUrRoysXZ7NOw 429MDg
Yj/k8VjwJdqvrNMiWnrEThkiQXLufj5fyADrtv6W5R9p

Как подписать xml файл средствами php

partizan

ссылка просто ужасна.. зашел хромом

:)

dobermann_arb
вот ещё нашлось:
http://www.hostforum.ru/archive/index.php/t-8272.html

-~{}~ 08.06.10 14:27:

а вот ещё нашел :)
Пример скрипта для проверки ЭЦП на PHP:

PHP:

<?
//Секретный ключ в нашей системе
$S_KEYS = '12345';

$ss='';
//Перебор всех полей полученных при передачи мотодом "POST"
foreach ($_POST as $k => $v)
{
$array[$k]=$v;
$ss = "$ss>>$k=$vn";
}
//Функция для кодирования данных($data) ключем($key) методом hmac 
function hmac($key, $data)
{
   $b = 64; // byte length for md5
   if (strlen($key) > $b) {
       $key = pack("H*",md5($key));
   }
   $key  = str_pad($key, $b, chr(0x00));
   $ipad = str_pad('', $b, chr(0x36));
   $opad = str_pad('', $b, chr(0x5c));
   $k_ipad = $key ^ $ipad ;
   $k_opad = $key ^ $opad;

   //Возвращает результат - кодированное слово 
   return md5($k_opad  . pack("H*",md5($k_ipad . $data)));
}
//Список фиксированных полей отправленных системой
//Остальные параметры - это поля поставщика услуг
$s1 = $array['date'];
$s2 = $array['id_pay'];
$s3 = $array['trans_pay'];
$s4 = $array['trans_corr'];
$s5 = $array['keyt'];
$s6 = $array['summ'];
$s7 = $array['curr'];
$s8 = $array['commiss'];
$s9 = $array['itogo'];

//Кодируемая строка (состоит из порядка данных фиксированных полей системы)
$strings = "$s1$s2$s3$s4$s5$s6$s7$s8$s9";

//Результат кодирования
$sign = hmac($S_KEYS, $strings);

$ss = "n$ss=STRING-$stringsnn";
$ss = "n$ss=SIGN-$signnn";

//Запись результатов обработки в файл 'file.txt'
$file=fopen('file.txt',"w ");
$text= "$ss";
fwrite($file,$text);
fclose($file);
?>

-~{}~ 19.07.10 15:34:

у мну результат получился с помощью vbscript :) подписание файла происходит на стороне клиента то бишь.
короче говоря, ищите CAPICOM или что-нить наподобие.

§

partizan

ссылка просто ужасна.. зашел хромом

:)

dobermann_arb
вот ещё нашлось:
http://www.hostforum.ru/archive/index.php/t-8272.html

-~{}~ 08.06.10 14:27:

а вот ещё нашел :)
Пример скрипта для проверки ЭЦП на PHP:

PHP:

<?
//Секретный ключ в нашей системе
$S_KEYS = '12345';

$ss='';
//Перебор всех полей полученных при передачи мотодом "POST"
foreach ($_POST as $k => $v)
{
$array[$k]=$v;
$ss = "$ss>>$k=$vn";
}
//Функция для кодирования данных($data) ключем($key) методом hmac 
function hmac($key, $data)
{
   $b = 64; // byte length for md5
   if (strlen($key) > $b) {
       $key = pack("H*",md5($key));
   }
   $key  = str_pad($key, $b, chr(0x00));
   $ipad = str_pad('', $b, chr(0x36));
   $opad = str_pad('', $b, chr(0x5c));
   $k_ipad = $key ^ $ipad ;
   $k_opad = $key ^ $opad;

   //Возвращает результат - кодированное слово 
   return md5($k_opad  . pack("H*",md5($k_ipad . $data)));
}
//Список фиксированных полей отправленных системой
//Остальные параметры - это поля поставщика услуг
$s1 = $array['date'];
$s2 = $array['id_pay'];
$s3 = $array['trans_pay'];
$s4 = $array['trans_corr'];
$s5 = $array['keyt'];
$s6 = $array['summ'];
$s7 = $array['curr'];
$s8 = $array['commiss'];
$s9 = $array['itogo'];

//Кодируемая строка (состоит из порядка данных фиксированных полей системы)
$strings = "$s1$s2$s3$s4$s5$s6$s7$s8$s9";

//Результат кодирования
$sign = hmac($S_KEYS, $strings);

$ss = "n$ss=STRING-$stringsnn";
$ss = "n$ss=SIGN-$signnn";

//Запись результатов обработки в файл 'file.txt'
$file=fopen('file.txt',"w ");
$text= "$ss";
fwrite($file,$text);
fclose($file);
?>

-~{}~ 19.07.10 15:34:

у мну результат получился с помощью vbscript :) подписание файла происходит на стороне клиента то бишь.
короче говоря, ищите CAPICOM или что-нить наподобие.

Читайте также:  Электронная подпись и закон 63-ФЗ | Такском

Ключевые термины

DSS (Digital Signature Standard) – стандарт США на цифровую подпись. В основе стандарта лежит алгоритм, называемый DSA (Digital Signature Algorithm) и являющийся вариацией подписи Эль-Гамаля.

ГОСТ Р34.10-2001 – новый российский стандарт на алгоритм формирования и проверки ЭЦП. Основан на сложности взятия дискретного логарифма в группе точек эллиптической кривой, а также на стойкости хэш-функции по ГОСТ Р34.11-94. Размер формируемой цифровой подписи – 512 бит.

ГОСТ Р34.10-94 – российский стандарт на алгоритм формирования и проверки ЭЦП, действующий с 1995 года. В стандарте используется модификация схемы шифрования с открытым ключом Эль-Гамаля и алгоритм выработки хэш-функции по ГОСТ Р34.11-94.

Инфраструктура открытых ключей – комплекс программно-аппаратных средств, организационно-технических и административных мероприятий, обеспечивающих абонентам системы связи необходимый сервис для управления их открытыми ключами.

Сертификат открытого ключа – информация, заверенная цифровой подписью центра, и включающая открытый ключ и другие данные об абоненте (идентификатор алгоритма электронной подписи, имя удостоверяющего центра, срок годности сертификата, имя пользователя, которому принадлежит сертификат и др).

Центр сертификации – организация или подразделение организации, которая выпускает сертификаты ключей электронной цифровой подписи и отвечает за управление ключами пользователей. Открытые ключи и другая информация о пользователях хранится удостоверяющими центрами в виде цифровых сертификатов.

Новый отечественный стандарт эцп

В 2001 г. был принят новый отечественный стандарт на алгоритм формирования и проверки ЭЦП. Его полное название следующее: «ГОСТ Р34.10-2001. Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи».

Данный алгоритм был разработан главным управлением безопасности связи Федерального агентства правительственной связи и информации при Президенте Российской Федерации при участии Всероссийского научно-исследовательского института стандартизации. Новый стандарт разрабатывался с целью обеспечения большей стойкости алгоритма генерации ЭЦП.

В основе ГОСТ Р34.10-2001 лежат алгоритмы с использованием операций на эллиптических кривых. Стойкость ГОСТ Р34.10-2001 основывается на сложности взятия дискретного логарифма в группе точек эллиптической кривой, а также на стойкости хэш-функции по ГОСТ Р34.11-94. Размер формируемой цифровой подписи – 512 бит.

В целом алгоритм вычислений по алгоритму ГОСТ Р34.10-2001 аналогичен применяемому в предыдущем стандарте ГОСТ Р34.10-94. Сначала генерируется случайное число k, с его помощью вычисляется компонента r подписи.

Затем на основе компоненты r, числа k, значения секретного ключа и хэш-значения подписываемых данных формируется s-компонента ЭЦП. При проверке же подписи аналогичным образом проверяется соответствие определенным соотношениям r, s, открытого ключа и хэш-значения информации, подпись которой проверяется. Подпись считается неверной, если соотношения неверны.

Старый ГОСТ Р34.10-94 не отменен, и в настоящее время параллельно действуют два отечественных стандарта на ЭЦП. Однако необходимо отметить, что для прежнего ГОСТа принято ограничение: при реализации ЭЦП по стандарту ГОСТ Р34.10-94 разрешено использовать только 1024-битные значения параметра p.

Использование математического аппарата группы точек эллиптической кривой в новом ГОСТ Р34.10-2001 позволяет существенно сократить порядок модуля p без потери криптостойкости. Так, в стандарте указано, что длина числа р может быть 256 или больше бит.

Пример вычисления и проверки цифровой подписи

Пусть абоненты, обменивающиеся через Интернет зашифрованными сообщениями, имеют следующие общие параметры: Р = 11, А = 7.

Один из пользователей этой системы связи хочет подписать свое сообщение m=5 цифровой подписью, сформированной по алгоритму Эль-Гамаля. Вначале он должен выбрать себе закрытый ключ, например, Х1=3 и сформировать открытый ключ Y1 = 73 mod 11 = 2. Открытый ключ может быть передан всем заинтересованным абонентам или помещен в базу данных открытых ключей системы связи.

Затем пользователь выбирает случайное секретное число k, взаимно простое с Р-1. Пусть k=9 ( 9 не имеет общих делителей с 10 ). Далее необходимо вычислить число

После этого с помощью расширенного алгоритма Евклида находится значение b в уравнении:

Решением последнего уравнения будет значение b=9.

Таким образом, пара чисел (8, 9) будет цифровой подписью сообщения m=5.

Если любой другой пользователь сети желает проверить цифровую подпись в сообщении, он должен получить из базы данных открытый ключ первого пользователя (он равен 2 ), вычислить два числа с1 и с2 и сравнить их.

Так как с1 = с2, то цифровая подпись первого пользователя в сообщения m=5 верная.

Пример создания и проверки подписи по стандарту гост р34.10-94

Пусть p = 23, q = 11, a =6 (проверяем: 611 mod 23 = 1 )

Создание подписи.

Предположим, пользователь А выбрал в качестве закрытого ключа число х=8. После этого он вычисляет открытый ключ по формуле y = аx mod p. То есть y = 68 mod 23 = 18.

Для создания подписи пользователь А выбирает случайное число k = 5.

Пусть результат вычисления хеш-функции для сообщения H(m) = 9.

Подпись сообщения состоит из двух чисел (r, s):

Таким образом, подпись сообщения состоит из пары чисел (2, 6).

Проверка подписи.

Получив сообщение вместе с подписью (2, 6), получатель вычисляет

Так как v = r, то подпись считается верной.

Подписи, созданные с использованием стандартов ГОСТ Р34.10 или DSS, так же, как и подписи, полученные по алгоритму Эль-Гамаля, являются рандомизированными, так как для одинаковых сообщений с использованием одного и того же закрытого ключа х каждый раз будут создаваться разные подписи (r,s) благодаря использованию разных случайных значений k.

Принцип создания и проверки подписи

Алгоритм Эль-Гамаля также можно использовать для формирования цифровой подписи. Группа пользователей выбирает общие параметры Р и А. Затем каждый абонент группы выбирает свое секретное число Хi, 1 < Хi< Р-1, и вычисляет соответствующее ему открытое число Y_i : : : Y_i=A^{X_i} : mod : Pпару (закрытый ключ; открытый ключ) = (Хi, Yi). Открытые ключи пользователей могут храниться в общей базе системы распределения ключей и при необходимости предоставляться всем абонентам системы.

Сообщение, предназначенное для подписи, должно быть представлено в виде числа, меньшего модуля Р. При большом размере сообщение разбивается на блоки необходимого размера. В некоторых случаях подписывается не само сообщение, а значение хеш-функции от него.

Пусть пользователь 1 хочет подписать свое сообщение цифровой подписью и передать его пользователю 2. В этом случае алгоритм действий следующий.

  1. Первый пользователь выбирает случайное секретное число k, взаимно простое с Р-1, и вычисляет число a=A^k : mod : P
  2. Затем с помощью расширенного алгоритма Евклида необходимо найти значение b в следующем уравнении:
    Пара чисел (a, b) будет цифровой подписью сообщения m.
  3. Сообщение m вместе с подписью (a, b) отправляется пользователю 2.
  4. Пользователь 2 получает сообщение m и с использованием открытого ключа первого абонента Y1 вычисляет два числа по следующим формулам: c_1=Y_1^a times a^b : mod : P \ c_2=A^m : mod : P Если с1 = с2, то цифровая подпись первого пользователя верная. Для подписывания каждого нового сообщения должно каждый раз выбираться новое значение k.

Подписи, созданные с использованием алгоритма Эль-Гамаля, называются рандомизированными, так как для одного и того же сообщения с использованием одного и того же закрытого ключа каждый раз будут создаваться разные подписи (a,b), поскольку каждый раз будет использоваться новое значение k.

Симметричная или асимметричная криптография?

Однозначного ответа на вопрос о том, какие алгоритмы — симметричные или асимметричные — предпочтительнее, конечно же, нет. Основным достоинством симметричной криптографии является высокая скорость обработки данных. Проблемы криптосистем с закрытым ключом обсуждались подробно в лекции 8. Попробуем теперь оценить особенности алгоритмов шифрования с открытым ключом.

Главным достоинством асимметричной криптографии является отсутствие необходимости в предварительном доверенном обмене ключевыми элементами при организации секретного обмена сообщениями. К основным недостаткам асимметричных криптосистем, мешающим им вытеснить симметричные методы шифрования, относят следующие.

  1. Алгоритмы с открытым ключом работают намного (в сотни раз) медленнее классических алгоритмов с закрытым ключом. Это их самый главный недостаток. Связан он с тем, что основной операцией в системах с открытым ключом является возведение в степень по большому модулю 500-1000 битовых чисел, что при программной реализации производится намного медленнее, чем шифрование того же объема данных классическими способами.
  2. Алгоритмы с открытым ключом требуют обеспечения достоверности открытых ключей, что порой превращается в довольно сложную задачу. То же самое относится и к протоколам цифровой подписи. Для управления открытыми ключами используют специальную инфраструктуру открытых ключей, обеспечивающую функции управления открытыми ключами.
  3. Алгоритмы с открытым ключом чувствительны к атакам по выбранному открытому тексту.
Читайте также:  КриптоПро просмотреть сохраненный пароль (пинкод) на контейнер закрытого ключа ЭЦП

Таким образом, с практической точки зрения системы с открытым ключом и асимметричным шифрованием целесообразно использовать лишь для распределения секретных ключей и организации цифровых подписей, так как для решения этих задач не требуется шифрования больших блоков данных.

Использование асимметричных алгоритмов позволяет создавать сеансовые ключи шифрования, которые удаляются после окончания сеанса связи. Это значительно снижает риск вскрытия зашифрованных сообщений, так как, если каждое передаваемое сообщение шифруется уникальным сеансовым ключом, задача взломщика существенно усложняется.

  1. Пользователь А генерирует случайный сеансовый ключК и зашифровывает им с помощью симметричного алгоритмаFсим свое сообщение M:
  2. Пользователь А получает из базы данных открытый ключ U пользователя Б и зашифровывает им сеансовый ключК:
  3. Пользователь А посылает своему абоненту зашифрованное сообщение и зашифрованный сеансовый ключCk. Для защиты от вскрытия «человек-в-середине» передаваемые данные могут быть дополнены цифровой подписью.
  4. Пользователь Б расшифровывает полученный сеансовый ключCk с помощью своего закрытого ключа R:
  5. Пользователь Б расшифровывает сообщение с помощью сеансового ключа К:

Такая криптографическая система называется смешанной, так как в ней используется и асимметричное, и симметричное шифрование. Смешанные криптосистемы широко применяются на практике: в банковских и платежных сетях передачи данных, в мобильной связи, в системах электронной почты и др.

Для лучшего обеспечения безопасности они могут быть дополнены цифровыми подписями пользователей и удостоверяющего центра, метками времени. Цифровая подпись в сочетании с открытым распределением ключей позволяют организовывать защищенный обмен электронными документами.

Стандарт цифровой подписи dss

Во многих странах сегодня существуют стандарты на электронную (цифровую) подпись. Стандарт цифровой подписи DSS (Digital Signature Standard – DSS) был принят в США в 1991 году и пересмотрен в 1994 году.

В основе стандарта лежит алгоритм, называемый DSA (Digital Signature Algorithm) и являющийся вариацией подписи Эль-Гамаля. В алгоритме используется однонаправленная хеш-функция H(m). В качестве хэш-алгоритма стандарт DSS предусматривает использование алгоритма SHA-1.

Рассмотрим сам алгоритм генерации ЭЦП. Вначале для группы абонентов выбираются три общих (несекретных) параметра р, q и a:

Зная эти числа, каждый абонент системы случайно выбирает число х, удовлетворяющее неравенству 0 < х < q, и вычисляет

Число х будет секретным ключом пользователя, а число у — открытым ключом. Вычислить у по известному х довольно просто. Однако, имея открытый ключ у, вычислительно невозможно определить х, который является дискретным логарифмому по основанию a.

Предполагается, что открытые ключи всех пользователей указываются в некотором несекретном, но «сертифицированном» справочнике, который должен быть у всех, кто собирается проверять подписи. На этом этап выбора параметров заканчивается, и абоненты готовы к тому, чтобы формировать и проверять подписи.

Пусть имеется сообщение m, которое один из пользователей желает подписать. Для генерации подписи пользователь должен выполнить следующие действия:

  1. Вычислить значение хеш-функции h = H(m) для сообщения m. Значение хеш-функции должно лежать в пределах 0 < h < q.
  2. Затем сгенерировать случайное число k, 0 < k < q.
  3. Вычислить r = (ak mod p) mod q.
  4. Определить s = [k-1}(H(m) x * r)] mod q

В результате пользователь получит для сообщения m подпись, состоящую из пары чисел (r,s). Сообщение вместе с подписью может быть послано любому другому абоненту системы. Проверить подпись можно следующим образом:

  1. Вычислить значение хеш-функции h = H(m) для сообщения m.
  2. Проверить выполнение неравенств 0 < r < q, 0 < s < q.
  3. Вычислить w = s-1 mod q ;
  4. Проверить выполнение равенства v = r. Если v = r, то подпись считается подлинной, иначе подпись считается недействительной.

В силу сложности вычисления дискретных логарифмов злоумышленник не может восстановить k из r или х из s, а следовательно, не может подделать подпись.

Стандарт цифровой подписи гост р34.10-94

В России принят стандарт ГОСТ Р34.10-94 «Информационная технология. Криптографическая защита информации. Процедуры выработки и проверки электронной цифровой подписи на базе асимметричного криптографического алгоритма». В этом стандарте используется алгоритм, аналогичный алгоритму, реализованному в стандарте DSS.

Вначале, так же как и по стандарту DSS, для группы абонентов выбираются три общих (несекретных) параметра р, q и a:

Подпись сообщения m состоит из двух чисел (r, s), вычисляемых по следующим формулам:

где H(m) – результат вычисления хеш-функции для сообщения m.

На этом формирование подписи закончено, и сообщение m вместе с ЭЦП (r,s) может быть отправлено получателю. Теперь отметим отличия алгоритма формирования ЭЦП по ГОСТ Р34.10-94 от алгоритма DSS.

1. Перед вычислением подписи исходное сообщение обрабатывается разными функциями хеширования: в ГОСТ Р34.10-94 применяется отечественный стандарт на хеш-функцию ГОСТ Р34.11-94, в DSS используется SHA-1, которые имеют разную длину хеш-кода. Отсюда и разные требования на длину простого числа q: в ГОСТ Р34.

2. По-разному вычисляется компонента s подписи. В ГОСТ Р34.10-94 компонента s
вычисляется по формуле

а в DSS компонента s вычисляется по формуле

Последнее отличие приводит к соответствующим отличиям в формулах для проверки подписи.

В результате процедура проверки подписи по ГОСТ Р34.10-94 заключается в следующем. Получив [m, (r, s)], получатель вычисляет

Затем проверяется равенство вычисленного значения v и полученного в составе ЭЦП параметра r. Подпись считается корректной, если v = r.

В алгоритме создания ЭЦП по ГОСТ Р34.10-94, так же как и в алгоритме DSS, производятся достаточно сложные вычисления, требующие затрат вычислительных ресурсов. Для ускорения процесса генерации подписей по этим алгоритмам можно заранее вычислять некоторое количество значений параметра r, не зависящего от подписываемого сообщения.

Управление открытыми ключами

Благодаря асимметричной криптографии проблема распределения секретных ключей, рассмотренная нами в лекции 8, была решена, вернее, ликвидирована, однако, появилась новая проблема – проблема подтверждения подлинности открытых ключей. Эта проблема заключается в том, что, получая открытый ключ некоторого абонента А, пользователь должен быть уверен, что ключ принадлежит именно абоненту А, а не кому-то другому.

Дело в том, что в исходном виде система распределения ключей, предлагавшаяся Диффи и Хеллманом, давала возможность проведения различного рода атак, основанных на перехвате и подмене открытых ключей абонентов. Так, например, в лекции 11 нами была рассмотрена атака «человек-в-середине», позволявшая злоумышленнику осуществлять полный контроль над передаваемой в системе связи информацией.

Большую роль в решении проблемы сертификации открытых ключей сыграло создание цифровой подписи. В системах связи с большим количеством абонентов, применяющих асимметричные криптосистемы, стали использовать специальные организационные структуры, выполняющие функции управления ключами абонентов и занимающиеся сертификацией открытых ключей.

Эти организационные структуры играют роль доверенной третьей стороны и заверяют открытые ключи абонентов своими цифровыми подписями. Таким образом, в распределенных системах связи, использующих криптосистемы с открытыми ключами, вводится понятие инфраструктуры открытых ключей (Public Key Infrastructure — PKI), включающей комплекс программно-аппаратных средств, а также организационно-технических и административных мероприятий, обеспечивающих абонентам системы связи необходимый сервис для управления их открытыми ключами.

Основным элементом инфраструктуры открытых ключей является центр сертификации ( удостоверяющий центр ) (Certification authority, CA), который обеспечивает контроль за выполнением всех процедур, связанных с изготовлением, регистрацией, хранением и обновлением ключей, сертификатов открытых ключей и списков отозванных сертификатов.

Читайте также:  Электронная подпись для Росреестра - получить ЭЦП для Росреестра для физических лиц в Москве

Сертификат представляет собой информацию, заверенную цифровой подписью центра, и включающую открытый ключ и другие данные об абоненте. Такими данными являются, например, идентификатор алгоритма электронной подписи, имя удостоверяющего центра, срок годности сертификата, имя пользователя, которому принадлежит сертификат. Международный стандартISO X.

Сертификат обладает следующими свойствами:

Так как сертификаты не могут быть подделаны, их можно опубликовать, поместив в общедоступный справочник.

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

В распределенных системах связи с большим числом абонентов может быть создано несколько центров сертификации. Центры сертификации объединяются в древовидную структуру, в корне которой находится главный удостоверяющий центр. Главный центр выдает сертификаты подчиненным ему центрам сертификации, тем самым заверяя открытые ключи этих центров.

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

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

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

При такой организации администратор удостоверяющего центра не имеет доступа к секретным ключам пользователей, а значит, и к защищаемой с их помощью информации. Администратор может лишь подменить в справочнике сертификатов открытые ключи одного из абонентов или включить фиктивного абонента, от его имени войти в контакт и получить предназначенное ему сообщение. Для исключения таких конфликтов может применяться следующая схема подготовки и рассылки ключей.

  1. Администратор удостоверяющего центра генерирует пару (закрытый ключ, открытый ключ) и сообщает свой открытый ключ всем своим абонентам.
  2. Пользователь А выбирает закрытые ключи для выполнения операций шифрования и формирования ЭЦП, а также вычисляет соответствующие открытые ключи.
  3. Открытые ключи шифрования и подписи зашифровываются открытым ключом администратора и предъявляются в удостоверяющий центр для регистрации.
  4. Администратор удостоверяющего центра проверяет (расшифровывает своим закрытым ключом) открытые ключи пользователя А; изготавливает и подписывает сертификаты открытых ключей пользователя А и помещает их в справочники открытых ключей шифрования и открытых ключей подписей. Каждый из справочников предоставляется в распоряжение абонентов удостоверяющего центра.
  5. Любой пользователь системы может извлечь из справочника сертификат необходимого абонента, проверить подпись администратора под сертификатом (расшифровать его открытым ключом администратора) и извлечь открытый ключ.

Такая схема подготовки и распределения открытых ключей выглядит несколько тяжеловесной, однако она защищает абонентов системы связи от разнообразных конфликтных ситуаций. На практике рассмотренная схема дополняется метками времени в цифровых подписях, проверками дополнительных полей в сертификатах (например, срока действия) и другими проверками, повышающими безопасность функционирования всей системы в целом.

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

Цифровая подпись в bitcoin

Помимо прочего, электронная подпись используется в криптовалютах, в частности — в Bitcoin. У каждого пользователя Bitcoin есть пара из секретного и откpытого ключа. Хеш-значение открытого ключа служит основным адресом для передачи монет. Это значение не секретно, и сообщать его можно кому угодно. Но по значению хеша вычислить значение открытого ключа невозможно.

Сама пара ключей будет использована лишь однажды — при передаче прав собственности. На этом жизнь пары ключей заканчивается.

  • PUB1 — публичный ключ;
  • PRIV1 — секретный ключ;
  • HASH1 или HASH(PUB1) — хеш-значение открытого ключа (биткойн-адрес);
  • HASH2 или HASH(PUB2) — хеш открытого ключа следующего владельца.

Вот как устроен сам процесс передачи прав собственности на биткойны.

  1. Владелец монеты открыто сообщает хеш своего публичного ключа HASH(PUB1), это и будет идентифицировать биткойн.
  2. До момента продажи оба ключа PUB1, PRIV1 продавца остаются в секрете. Известен только HASH(PUB1) и соответствующий ему биткойн.
  3. Как только появляется пoкупатель, владелец формирует открытое письмо, в котором указывает адрес биткойна HASH(PUB1) и хеш-значение публичного ключа нового владельца HASH(PUB2). И конечно же, подписывает письмо своим секретным ключом PRIV1, прилагая публичный ключ PUB1.
  4. После этого пара ключей владельца PUB1 и PRIV1 теряют свою актуальность. Публичным ключом можно проверить само письмо, узнать новый адрес монеты.

О втором собственнике ничего не извeстно, кроме HASH(PUB2), до тех пор пока он не передаст права третьему владельцу. И эта цепочка может быть бесконечной.

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

Благодаря HASH(PUB) получается двойная защита. Первая загадка — узнать публичный ключ по его хешу. Вторая загадка — подписаться чужим секретным ключом.

Такая технология построения цепи передачи пpав и называется блокчейном. Благодаря этой технологии можно отследить историю владения до самых истоков, но изменить эту историю никак нельзя.

Краткие итоги

Для формирования электронной цифровой подписи могут быть применены алгоритмы RSA, Эль-Гамаля и другие. Во многих странах сегодня существуют стандарты на электронную цифровую подпись. Так, в Российской Федерации действуют стандарты на алгоритмы формирования и проверки ЭЦП ГОСТ Р34.10-94 и ГОСТ Р34.10-2001.

В системах связи с большим количеством абонентов, применяющих асимметричные криптосистемы, стали использовать специальные организационные структуры, выполняющие функции управления ключами абонентов и занимающиеся сертификацией открытых ключей. Эти организационные структуры играют роль доверенной третьей стороны и заверяют открытые ключи абонентов своими цифровыми подписями.

Основным элементом инфраструктуры открытых ключей является центр сертификации (удостоверяющий центр), который обеспечивает контроль за выполнением всех процедур, связанных с изготовлением, регистрацией, хранением и обновлением ключей, сертификатов открытых ключей и списков отозванных сертификатов.

Сертификат открытого ключа представляет собой информацию, заверенную цифровой подписью центра, и включающую открытый ключ и другие данные об абоненте.

В целом, системы с открытым ключом и асимметричным шифрованием целесообразно использовать лишь для распределения секретных ключей и организации цифровых подписей, так как для решения этих задач не требуется шифрования больших блоков данных. Шифрование больших массивов данных обычно выполняется симметричными алгоритмами, скорость работы которых значительно выше, чем скорость алгоритмов с открытым ключом.

Такие криптографические системы называются смешанными, так как в них используется и асимметричное, и симметричное шифрование. Смешанные криптосистемы широко применяются на практике: в банковских и платежных сетях передачи данных, в мобильной связи, в системах электронной почты и др.

Для лучшего обеспечения безопасности они могут быть дополнены цифровыми подписями пользователей и удостоверяющего центра, метками времени. Цифровая подпись в сочетании с открытым распределением ключей позволяют организовывать защищенный обмен электронными документами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector