Таблица 4.6.2.12. Процедура формирования цифровой подписи
Шаг | Действие |
1 | Инициализировать тип SignedData, введя код версии, идентификатор алгоритма и тип содержимого, подлежащего подписанию |
2 | Преобразовать информацию, подлежащую подписанию в формат DER |
3 | Использовать результат шага 2 для инициализации компонента content из ContentInfo. |
4 | Инициализировать тип SignerInfo, введя код версии, идентификаторы алгоритмов вычисления и шифрования дайджеста |
5 | Вычислить дайджест сообщения, используя SHA-1 для результата шага 3 |
6 | Инициализировать структуру authenticatedAttributes и занести в структуру атрибуты contentType и messageDigest. Установить компоненты type атрибутов равными идентификаторам этих атрибутов |
7 | Инициализировать компонент values первого атрибута типа кодом содержимого, подлежащего подписанию, а второго атрибута - значением дайджеста, вычисленного на этапе 5 |
8 | Закодировать аутентифицированные атрибуты и зашифровать результат, используя секретный ключ отправителя. Поместить результат в SignedData |
9 | Выбрать соответствующие сертификаты Х.509 и CRL, необходимые для верификации подписи, и включить их в SignedData |
10 | Если тип сообщения требует двух подписей, повторить шаги с 4 по 9 |
Оператор ключевого хэширования HMAC(t,k) соответствует 160-битовому хэшу HMAC-SHA-1 для группы t при использовании секретного ключа k. Эта функция нужна для сокрытия номера счета в сертификате владельца карты. Секретный ключ известен только владельцу карты и эмитенту. Процедура ключевого хэширования представлена в таблице 4.6.2.13.
Таблица 4.6.2.13. Процедура ключевого хэширования
Шаг | Действие |
1 | Установить ipad соответствующим буферу, который содержит 64 байта с кодами 0х36 |
2 | Установить opad равным буферу, содержащему 64 байта с кодами 0х5С |
3 | Добавить нули в конец k, чтобы размер строки стал равным 64 байтам. Например, если длина k равна 20 байт, то следует добавить 44 нуля. |
4 | Осуществить операцию побитового исключающего ИЛИ для результата шага 3 и ipad |
5 | Добавить данные группы t в 64-байтовый буфер, сформированный на этапе 4 |
6 | Вычислить хэш SHA-1 для результата шага 5 с привлечением Hash-оператора |
7 | Осуществить операцию побитового исключающего ИЛИ для результата шага 3 и opad |
8 | Добавить результат SHA-1 шага 6 к 64-байтовому буферу, заполненному в результате шага 7 |
9 | Вычислить хэш SHA-1 для результата шага 8 с привлечением Hash-оператора |
10 | Прислать результат работы шага 9 |