---
title: "\"Стандарт платформы цифрового рубля. Спецификация на программный модуль\""
issuer: "Центральный банк Российской Федерации"
status: действует
canonical: "https://bukva.ai/docs/standart-platformy-tsifrovogo-rublya"
---

## "Стандарт платформы цифрового рубля. Спецификация на программный модуль"

# "Стандарт платформы цифрового рубля. Спецификация на программный модуль"

(утв. Банком России)

> [!IMPORTANT]
> Текст документа приведен в соответствии с публикацией на сайте https://www.cbr.ru по состоянию на 03.12.2024.


<div align="right">

<a id="p100001"></a>Утверждаю<br>
Директор Департамента<br>
информационной безопасности<br>
Банка России<br>
В.А.УВАРОВ

<a id="p100002"></a>СТАНДАРТ ПЛАТФОРМЫ ЦИФРОВОГО РУБЛЯ

</div>


<div align="center">

<a id="p100003"></a>**СПЕЦИФИКАЦИЯ НА ПРОГРАММНЫЙ МОДУЛЬ**

</div>



##### <a id="p100005"></a>2 Введение


<a id="p100006"></a>**Документ содержит требования и рекомендации по разработке программного модуля, предназначенного для встраивания в мобильные приложения для организации дистанционных каналов обслуживания клиентов финансовых организаций. Программный модуль обеспечивает хранение криптографических ключей пользователя мобильного приложения и выполнение криптографических преобразований для совершения операций на [Платформе](https://bukva.ai/docs/820-p#p100039) Цифрового Рубля (далее - ПлЦР), а также (при необходимости) других финансовых операций.**
<a id="p100007"></a>**Данный документ является спецификацией, включающей требования и рекомендации к интерфейсам и функциональности программного модуля, используемого в составе СКЗИ, его среде функционирования, а также к процессам разработки и поддержки жизненного цикла. Документ предназначен для использования в качестве руководства при проектировании и разработке программного модуля. Документ не ограничивает функциональность программного модуля, при необходимости и на усмотрение разработчика перечень функций программного модуля может быть расширен.**


### <a id="p100008"></a>2.1 Общие положения



#### <a id="p100009"></a>2.1.1 Полное наименование системы и ее условное обозначение

<a id="p100010"></a>Программный модуль для мобильных финансовых приложений (далее - ПМ).


#### <a id="p100011"></a>2.1.2 Назначение и цели создания ПМ

<a id="p100012"></a>ПМ предназначен для встраивания в мобильные приложения (далее МП) финансовых организаций и должен обеспечивать взаимодействие Клиента с ПлЦР и, при необходимости, с другими информационными системами, выполняя криптографические преобразования.
<a id="p100013"></a>ПМ должен предоставлять прикладной программный интерфейс для организации взаимодействия с МП и его компонентами.
<a id="p100014"></a>В рамках настоящего документа рассматривается разработка ПМ для использования в операционных системах из списка:
<a id="p100015"></a>**- Google Android,**
<a id="p100016"></a>**- Apple iOS,**
<a id="p100017"></a>**- Аврора (Aurora),**
- <a id="p100018"></a>HarmonyOS.
<a id="p100019"></a>ПМ предназначен для выполнения следующих криптографических операций:
- <a id="p100020"></a>формирование и хранение криптографических ключей;
<a id="p100021"></a>**- формирование запроса на выпуск сертификата, организация хранения сертификатов и списка отозванных сертификатов;**
<a id="p100022"></a>**- подписание электронных сообщений (далее - ЭС) с использованием криптографических алгоритмов в соответствии с ГОСТ Р 34.10-2012/34.10-2018;**
<a id="p100023"></a>**- зашифрование ЭС с использованием криптографических алгоритмов в соответствии с ГОСТ Р 34.12-2015/34.12-2018/ГОСТ Р 34.13-2015/34.13-2018;**
- <a id="p100024"></a>проверка подписи ЭС с использованием криптографических алгоритмов в соответствии с ГОСТ Р 34.10-2012/34.10-2018;
- <a id="p100025"></a>расшифрование ЭС с использованием криптографических алгоритмов в соответствии с ГОСТ Р 34.12-2015/34.12-2018/ГОСТ Р 34.13-2015/34.13-2018;
- <a id="p100026"></a>организация односторонне и двусторонне аутентифицированного защищенного канала между МП и его сервисами, обеспечивающего целостность и конфиденциальность передаваемых данных, по протоколу TLS с использованием криптографических алгоритмов в соответствии с Р 1323565.1.020-2020/Р 1323565.1.030-2020.
<a id="p100027"></a>Полный список функций, которые реализует ПМ, приведен в [разделе 2.3](#p100214).
<a id="p100028"></a>Цель создания ПМ - предоставить российское программное обеспечение для выполнения криптографических операций в МП для различных операционных систем.
<a id="p100029"></a>Криптографические операции в ПМ должны выполняться посредством вызова в ПМ функций сертифицированного средства криптографической защиты информации (далее - СКЗИ). СКЗИ должен включаться в состав ПМ или ПМ должен сам являться сертифицированным СКЗИ.
<a id="p100030"></a>Корректность выполнения криптографических преобразований должна обеспечиваться использованием сертифицированного СКЗИ и, если это необходимо, подтверждаться оценкой влияния в соответствии с документом [[9]](#p100043).
<a id="p100031"></a>ПМ, разработанный по данной спецификации, может быть внесен в Единый реестр российских программ для электронных вычислительных машин и баз данных (далее - Реестр).
<a id="p100032"></a>МП, содержащее в своем составе ПМ, при необходимости может пройти оценку соответствия требованиям к оценочному уровню доверия (далее - ОУД) не ниже, чем ОУД 4, согласно требованиям национального стандарта Российской Федерации ГОСТ Р ИСО/15408-3-2013, или иметь возможность пройти сертификацию в системе сертификации Федеральной службы по техническому и экспортному контролю.


#### <a id="p100033"></a>2.1.3 Перечень нормативно-технических документов и методических материалов, использованных при разработке Спецификации

<a id="p100034"></a>Спецификация разработана с использованием следующих документов:

1. <a id="p100035"></a>ГОСТ 19.201.78, Единая система программной документации. Техническое задание. Требования к содержанию и оформлению.
2. <a id="p100036"></a>ГОСТ Р 34.10-2012, Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.
3. <a id="p100037"></a>ГОСТ 34.12-2018, Информационная технология. Криптографическая защита информации. Блочные шифры.
4. <a id="p100038"></a>Рекомендации по стандартизации, Р 1323565.1.030-2020, Информационная технология. Криптографическая защита информации. Использование российских криптографических алгоритмов в протоколе безопасности транспортного уровня (TLS 1.3).
5. <a id="p100039"></a>Рекомендации по стандартизации, Р 1323565.1.020-2020, Информационная технология. Криптографическая защита информации. Использование российских криптографических алгоритмов в протоколе безопасности транспортного уровня (TLS 1.2).
6. <a id="p100040"></a>ГОСТ Р ИСО/МЭК 15408-1-2012, Информационная технология. Методы и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. Часть 1: Введение и общая модель.
7. <a id="p100041"></a>ГОСТ Р ИСО/МЭК 15408-2-2013, Информационная технология. Методы и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. Часть 2: Функциональные компоненты безопасности.
8. <a id="p100042"></a>ГОСТ Р ИСО/МЭК 15408-3-2013, Информационная технология. Методы и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. Часть 3: Компоненты доверия к безопасности.
9. <a id="p100043"></a>[Приказ](https://bukva.ai/docs/prikaz-66-2005) ФСБ России от 9 февраля 2005 г. N 66 "Положение о разработке, производстве, реализации и эксплуатации шифровальных (криптографических) средств защиты информации (Положение ПКЗ-2005)".
10. <a id="p100044"></a>Банк России "Платформа Цифрового рубля. Правила заполнения полей сертификатов" <1>.
   <a id="p100045"></a>--------------------------------
   <a id="p100046"></a><1> При необходимости использования данного документа необходимо обратиться в Банк России путем формирования официального запроса.
11. <a id="p100047"></a>Банк России. Альбом электронных сообщений, используемых для взаимодействия Участников Платформы Цифрового рубля в актуальной редакции. - URL: https://www.cbr.ru/fintech/dr/doc_dr/albums_r/
12. <a id="p100048"></a>Стандарт Банка России [СТО БР БФБО-1.7-2023](https://bukva.ai/docs/prikaz-sto-br-bfbo-1-7-2023) "Безопасность финансовых (банковских) операций. Обеспечение безопасности финансовых сервисов с использованием технологии цифровых отпечатков".
13. <a id="p100049"></a>[Постановление](https://bukva.ai/docs/postanovlenie-1236-2015) Правительства РФ от 16 ноября 2015 г. N 1236 "Об установлении запрета на допуск программного обеспечения, происходящего из иностранных государств, для целей осуществления закупок для обеспечения государственных и муниципальных нужд".
14. <a id="p100050"></a>[Постановление](https://bukva.ai/docs/postanovlenie-325-2017) Правительства РФ от 23 марта 2017 г. N 325 "Об утверждении дополнительных требований к программам для электронных вычислительных машин и базам данных, сведения о которых включены в реестр российского программного обеспечения, и внесении изменений в Правила формирования и ведения единого реестра российских программ для электронных вычислительных машин и баз данных".
15. <a id="p100051"></a>[Приказ](https://bukva.ai/docs/prikaz-62-2019-minkomsvyaz-rossii) Минкомсвязи России N 62 "Об утверждении административного регламента предоставления Министерством цифрового развития, связи и массовых коммуникаций Российской Федерации государственной услуги по формированию и ведению единого реестра российских программ для электронных вычислительных машин и баз данных и единого реестра евразийских программ для электронных вычислительных машин и баз данных".
16. <a id="p100052"></a>Министерство цифрового развития, связи и массовых коммуникаций РФ "Методические рекомендации по работе с Федеральной государственной информационной системой "Реестры программ для электронных вычислительных машин и баз данных" (ФГИС Реестры ПО)".
17. <a id="p100053"></a>ГОСТ Р 56939-2016, Защита информации. Разработка безопасного программного обеспечения. Общие требования.
18. <a id="p100054"></a>[Постановление](https://bukva.ai/docs/postanovlenie-313-2012) Правительства РФ от 16 апреля 2012 г. N 313 "Об утверждении Положения о лицензировании деятельности по разработке, производству, распространению шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств, выполнению работ, оказанию услуг в области шифрования информации, техническому обслуживанию шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств (за исключением случая, если техническое обслуживание шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств, осуществляется для обеспечения собственных нужд юридического лица или индивидуального предпринимателя)".
19. <a id="p100055"></a>ГОСТ Р 59792-2021, Информационные технологии. Комплекс стандартов на автоматизированные системы. Виды испытаний автоматизированных систем.
20. <a id="p100056"></a>ГОСТ 34.10-2018, Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.
21. <a id="p100057"></a>ГОСТ Р 34.13-2015, Информационная технология (ИТ). Криптографическая защита информации. Режимы работы блочных шифров.
22. <a id="p100058"></a>ГОСТ 34.13-2018, Информационная технология (ИТ). Криптографическая защита информации. Режимы работы блочных шифров.
23. <a id="p100059"></a>ГОСТ Р 34.12-2015, Информационная технология. Криптографическая защита информации. Блочные шифры.
24. <a id="p100060"></a>Р 1323565.1.012-2017, "Информационная технология. Криптографическая защита информации. Принципы разработки и модернизации шифровальных (криптографических) средств защиты информации.
25. <a id="p100061"></a>[Положение](https://bukva.ai/docs/683-p) Банка России от 17.04.2019 N 683-П "Об установлении обязательных для кредитных организаций требований к обеспечению защиты информации при осуществлении банковской деятельности в целях противодействия осуществлению переводов денежных средств без согласия клиента".
26. <a id="p100062"></a>Банк России "Методический документ "Профиль защиты прикладного программного обеспечения автоматизированных систем и приложений кредитных организаций и некредитных финансовых организаций" - URL: https://www.cbr.ru/content/document/file/132666/inf_note_feb_0422.pdf.
27. <a id="p100063"></a>ГОСТ Р ИСО/МЭК 12207-2010 "Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств".
28. <a id="p100064"></a>Стандарт платформы цифрового рубля "Требования операционно-технологического взаимодействия на платформе цифрового рубля" - URL: https://www.cbr.ru/fintech/dr/doc_dr/standarts.
29. <a id="p100065"></a>[Положение](https://bukva.ai/docs/833-p) Банка России от 07.12.2023 N 833-П "О требованиях к обеспечению защиты информации для участников платформы цифрового рубля".
30. <a id="p100066"></a>ГОСТ Р 34.11-2012, "Информационная технология. Криптографическая защита информации. Функция хэширования".
31. <a id="p100067"></a>Банк России 25 декабря 2023 г. "Временные требования по обеспечению информационной безопасности для автоматизации выпуска сертификатов пользователя платформы цифрового рубля" <2>.
   <a id="p100068"></a>--------------------------------
   <a id="p100069"></a><2> При необходимости использования данного документа необходимо обратиться в Банк России путем формирования официального запроса.
32. <a id="p100070"></a>Федеральный [закон](https://bukva.ai/docs/federalnyy-zakon-63-fz-2011/statya-1) от 06.04.2011 N 63-ФЗ "Об электронной подписи".
33. <a id="p100071"></a>Стандарт платформы цифрового рубля "Требования и рекомендации к пользовательским интерфейсам при совершении операций с цифровым рублем" - URL: https://www.cbr.ru/fintech/dr/doc_dr/standarts/.
34. <a id="p100072"></a>Стандарт платформы цифрового рубля "Порядок проведения работ по оценке влияния аппаратных, программно-аппаратных и программных средств сети (системы) конфиденциальной связи, совместно с которыми предполагается штатное функционирование программного модуля Банка России, на выполнение предъявленных к входящему в его состав средству криптографической защиты информации требований" - URL: https://www.cbr.ru/fintech/dr/doc_dr/standarts/.
35. <a id="p100073"></a>[Приказ](https://bukva.ai/docs/prikaz-796-2011-fsb-rossii-federalnaya) ФСБ России от 27 декабря 2011 г. N 796 "Об утверждении Требований к средствам электронной подписи и Требований к средствам удостоверяющего центра".


#### <a id="p100074"></a>2.1.4 Определения, обозначения и сокращения

<a id="p100075"></a>В спецификации используется список обозначений и сокращений, используемый в документах [[11]](#p100047). Список сокращений приведен в Таблице 1.

<a id="p100076"></a>Таблица 1 - Принятые сокращения


| <a id="p100077"></a>Сокращение | <a id="p100078"></a>Расшифровка |
| --- | --- |
| <a id="p100079"></a>ППИ | <a id="p100080"></a>Прикладной программный интерфейс |
| <a id="p100081"></a>HTTP | <a id="p100082"></a>Hypertext Transfer Protocol |
| <a id="p100083"></a>SDK | <a id="p100084"></a>Software development kit |
| <a id="p100085"></a>TLS | <a id="p100086"></a>Transport layer security - протокол защиты транспортного уровня |
| <a id="p100087"></a>CMS | <a id="p100088"></a>Cryptographic Message Syntax - синтаксис криптографических сообщений |
| <a id="p100089"></a>БДСЧ | <a id="p100090"></a>Биологический датчик случайных чисел |
| <a id="p100091"></a>ГОСТ TLS | <a id="p100092"></a>Протокол TLS, адаптированный для использования с российскими криптографическими стандартами ГОСТ [[4]](#p100038), [[5]](#p100039), обеспечивающий безопасность передачи данных с использованием национальных алгоритмов шифрования, хэширования и цифровой подписи. |
| <a id="p100093"></a>ЕБС | <a id="p100094"></a>Единая биометрическая система |
| <a id="p100095"></a>ЕСИА | <a id="p100096"></a>Единая система идентификации и аутентификации |
| <a id="p100097"></a>ИС | <a id="p100098"></a>Информационная система |
| <a id="p100099"></a>КК | <a id="p100100"></a>Контур контроля |
| <a id="p100101"></a>КО | <a id="p100102"></a>Контур обработки |
| <a id="p100103"></a>МП | <a id="p100104"></a>Мобильное приложение |
| <a id="p100105"></a>ОП | <a id="p100106"></a>Оператор Платформы Цифрового рубля |
| <a id="p100107"></a>ОС | <a id="p100108"></a>Операционная система |
| <a id="p100109"></a>ПДСЧ | <a id="p100110"></a>Программный датчик случайных чисел |
| <a id="p100111"></a>ПО | <a id="p100112"></a>Программное обеспечение |
| <a id="p100113"></a>ПлЦР | <a id="p100114"></a>Платформа Цифрового рубля |
| <a id="p100115"></a>ПМ | <a id="p100116"></a>Программный модуль для мобильных финансовых приложений |
| <a id="p100117"></a>ПУЦ | <a id="p100118"></a>Подчиненный удостоверяющий центр |
| <a id="p100119"></a>РОРД | <a id="p100120"></a>Регистрационный, операционный и расчетный депозитарий |
| <a id="p100121"></a>CAC, CRL | <a id="p100122"></a>Список отозванных сертификатов |
| <a id="p100123"></a>СКЗИ | <a id="p100124"></a>Средство криптографической защиты информации |
| <a id="p100125"></a>СКПЭП | <a id="p100126"></a>Сертификат ключа проверки электронный подписи |
| <a id="p100127"></a>СФ | <a id="p100128"></a>Среда функционирования |
| <a id="p100129"></a>ТЗ | <a id="p100130"></a>Техническое задание на проведение исследований по оценке влияния специального программного обеспечения ПМ |
| <a id="p100131"></a>УЦ | <a id="p100132"></a>Удостоверяющий центр |
| <a id="p100133"></a>УНЭП | <a id="p100134"></a>Усиленная неквалифицированная электронная подпись |
| <a id="p100135"></a>УЦ БР | <a id="p100136"></a>Корневой Удостоверяющий центр ПлЦР Банка России |
| <a id="p100137"></a>УЦ Безопасности | <a id="p100138"></a>Удостоверяющий центр на стороне участница ПлЦР, используемый для выдачи TLS-сертификатов |
| <a id="p100139"></a>ПУЦ УНЭП | <a id="p100140"></a>Подчиненный Удостоверяющий центр на стороне участника ПлЦР, являющийся подчиненным к корневому УЦ БР, используемый для выдачи сертификатов УНЭП пользователям ПлЦР |
| <a id="p100141"></a>ХПМ | <a id="p100142"></a>Хранилище ПМ |
| <a id="p100143"></a>ХМП | <a id="p100144"></a>Хранилище МП |
| <a id="p100145"></a>ХСКЗИ | <a id="p100146"></a>Хранилище СКЗИ |
| <a id="p100147"></a>ЦО | <a id="p100148"></a>Цифровой отпечаток устройства |
| <a id="p100149"></a>ЦР | <a id="p100150"></a>Цифровой рубль |
| <a id="p100151"></a>ЭП | <a id="p100152"></a>Электронная подпись |
| <a id="p100153"></a>ЭС | <a id="p100154"></a>Электронное сообщение |


<a id="p100155"></a>Список терминов и их определений, используемых в документе, приведен в Таблице 2.

<a id="p100156"></a>Таблица 2 - Определения


| <a id="p100157"></a>Термин | <a id="p100158"></a>Определение |
| --- | --- |
| <a id="p100159"></a>Биологический датчик случайных чисел | <a id="p100160"></a>Датчик, который формирует случайную последовательность чисел на основе случайных испытаний. Испытания основаны на случайном характере многократного взаимодействия человека с СКЗИ и средой функционирования СКЗИ. |
| <a id="p100161"></a>Криптографический провайдер | <a id="p100162"></a>ПО, предоставляющее реализацию криптографических алгоритмов и функций для обеспечения безопасности данных и операций с ними. |
| <a id="p100163"></a>Мобильное приложение | <a id="p100164"></a>ПО для мобильного устройства, которое используется клиентами финансовой организации для дистанционного доступа к финансовым услугам и сервисам, в том числе для осуществления операций с ЦР. |
| <a id="p100165"></a>Пароль | <a id="p100166"></a>Криптографический ключ, принимающий значения из множества малой мощности. Как правило, представляется в виде конечной последовательности символов из фиксированного алфавита и используется для аутентификации субъекта доступа. |
| <a id="p100167"></a>Пользователь ПлЦР | <a id="p100168"></a>Пользователи Платформы ЦР - физические и юридические лица, индивидуальные предприниматели, а также физические лица, применяющие специальный налоговый режим "Налог на профессиональный доход". |
| <a id="p100169"></a>Платформа ЦР | <a id="p100170"></a>Информационная система, посредством которой взаимодействуют Оператор, Участники ПлЦР и Пользователи ПлЦР в соответствии с правилами ПлЦР. |
| <a id="p100171"></a>Программный модуль | <a id="p100172"></a>Программное обеспечение, имеющее в своем составе сертифицированное СКЗИ для осуществления криптографических преобразований, встраиваемое в мобильное финансовое приложение. |
| <a id="p100173"></a>Программный датчик случайных чисел | <a id="p100174"></a>Датчик, вырабатывающий псевдослучайную последовательность путем детерминированного преобразования инициализирующей последовательности (исходной ключевой информации). |
| <a id="p100175"></a>Сбор энтропии | <a id="p100176"></a>Механизм выработки последовательности случайных чисел для генерации пары криптографических ключей с использованием биометрического датчика случайных чисел (БДСЧ). |
| <a id="p100177"></a>Участник ПлЦР | <a id="p100178"></a>Клиент Банка России (кредитная организация, некредитная финансовая организация), предоставляющий доступ к сервисам Платформы ЦР своим Клиентам, либо использующий сервисы Платформы ЦР для выполнения операций с ЦР. |
| <a id="p100179"></a>Хранилище СКЗИ (Защищенное хранилище) | <a id="p100180"></a>Область памяти для хранения криптографических ключей, доступ к которой защищен паролем и имеет защиту от подбора пароля. |
| <a id="p100181"></a>Хранилище ПМ (Внутреннее хранилище) | <a id="p100182"></a>Область памяти, которая выделяется для обеспечения работы ПМ. |
| <a id="p100183"></a>Хранилище МП | <a id="p100184"></a>Область памяти, которая выделяется мобильной ОС для обеспечения работы МП. |
| <a id="p100185"></a>Хранилище сертификатов СКЗИ | <a id="p100186"></a>Защищенная область памяти, предназначенная для хранения сертификатов, которые используются для криптографических операций. |
| <a id="p100187"></a>Цифровой отпечаток устройства (device fingerprint) | <a id="p100188"></a>Уникальный идентификатор, который формируется в виде производного значения из значений параметров устройства, и позволяет идентифицировать устройство пользователя при получении им финансовых услуг. |
| <a id="p100189"></a>Электронное сообщение | <a id="p100190"></a>Совокупность информации, имеющая криптографическую защиту и передаваемая между субъектами взаимодействия при выполнении бизнес-процессов. |
| <a id="p100191"></a>CMScert | <a id="p100192"></a>Подпись типа CMS (Cryptographic Message Syntax) содержит сертификат открытого ключа, соответствующего закрытому ключу, на котором произведено формирование ЭП. |
| <a id="p100193"></a>CMSid | <a id="p100194"></a>Подпись типа CMS (Cryptographic Message Syntax) содержит идентификатор открытого ключа, соответствующего закрытому ключу, на котором произведено формирование ЭП. |
| <a id="p100195"></a>RAW | <a id="p100196"></a>ЭП, представленная в виде массива байт без сертификата или идентификатора ключа |
| <a id="p100197"></a>Big-endian | <a id="p100198"></a>Формат хранения и передачи последовательности байтов в порядке от старшего к младшему. |
| <a id="p100199"></a>Little-endian | <a id="p100200"></a>Формат хранения и передачи последовательности байтов в порядке от младшего к старшему. |



### <a id="p100201"></a>2.2 Структурная схема решения

<a id="p100202"></a>Раздел содержит высокоуровневое описание структуры решения, включающее основные компоненты и взаимосвязи между ними. Схема решения приведена на [Рисунке 1](#p100213).
<a id="p100203"></a>На схеме Мобильное устройство включает в себя несколько ключевых компонентов. Мобильное финансовое приложение (МП) представляет собой программное обеспечение, используемое для дистанционного доступа к финансовым услугам и сервисам, включая операции с цифровыми рублями (ЦР). Ядро ОС мобильного устройства управляет аппаратными ресурсами для функционирования мобильного приложения.
<a id="p100204"></a>В МП на схеме выделены следующие архитектурные слои:
- <a id="p100205"></a>Графический пользовательский интерфейс;
- <a id="p100206"></a>Доменный уровень, в котором реализована основная функциональность приложения, а именно: бизнес-логика, обработка данных и управление взаимодействием между различными частями приложения;
- <a id="p100207"></a>Слой данных, который обеспечивает взаимодействие доменного уровня и хранилища данных, гарантируя целостность и безопасность при обработке и хранении информации. В этом слое также расположен ПМ, отвечающий за предоставление доступа к криптографическим функциям и обеспечение дополнительной защиты данных.
<a id="p100208"></a>ПМ реализует интерфейсы для выполнения криптографических операций и для установления защищенного канала связи с внешними сервисами, обеспечивая таким образом защиту данных при передаче. Доменный уровень МП при необходимости вызывает эти интерфейсы, а ПМ использует интерфейсы встроенного в него СКЗИ для обеспечения защиты информации.
<a id="p100209"></a>При передаче данных во внешние системы Доменный уровень МП обращается к интерфейсам ГОСТ TLS ПМ для установления защищенного канала связи с внешними сервисами в сети интернет.
<a id="p100210"></a>Во время установки МП создается хранилище МП, которое содержит данные для приложения и его компонентов, в том числе ПМ и СКЗИ. МП не может получить прямой доступ к системным файлам и каталогам, а также файлам других приложений.
<a id="p100211"></a>Хранилище ПМ используется для хранения служебных данных, необходимых для работы ПМ. Хранилище СКЗИ предназначено для хранения криптографических ключей и других конфиденциальных данных в защищенном виде. Управление этими хранилищами осуществляется через ядро ОС, которое отвечает за сохранность и безопасность всех данных мобильного устройства.

<a id="p100212"></a> ![2.2 Структурная схема решения](https://i.bukva.ai/NT1GUrMC5/img_0.jpg) 

<a id="p100213"></a>**Рисунок 1 - Структурная схема решения**


### <a id="p100214"></a>2.3 Обзор функций ПМ

<a id="p100215"></a>ПМ должен предоставлять интерфейс для взаимодействия с МП и его компонентами. В Таблице 3 перечислен набор функций ПМ. Подробное описание методов МП, реализующих функции ПМ, содержится в [пункте 3.2](#p100674).

<a id="p100216"></a>**Таблица 3 - Функции ПМ**


<table>
<colgroup><col width="11%"><col width="32%"><col width="4%"><col width="29%"><col width="24%"></colgroup>
<tr><td><a id="p100217"></a>Номер функции</td><td><a id="p100218"></a>Краткое описание функции</td><td colspan="2"><a id="p100219"></a>Доступность</td><td><a id="p100220"></a>Раздел, описывающий требования к реализации метода, соответствующего функции</td></tr>
<tr><td><a id="p100221"></a>FN-1.1</td><td><a id="p100222"></a>Инициализация ПМ</td><td colspan="2"><a id="p100223"></a>Всегда</td><td><a id="p100224"></a><a href="#p100683">Пункт 3.2.1.1</a></td></tr>
<tr><td><a id="p100225"></a>FN-1.2</td><td><a id="p100226"></a>Инициализация работы с хранилищем СКЗИ</td><td colspan="2"><a id="p100227"></a>Должен быть выполнен метод "Инициализация ПМ"</td><td><a id="p100228"></a><a href="#p100708">Пункт 3.2.1.2</a></td></tr>
<tr><td><a id="p100229"></a>FN-1.3</td><td><a id="p100230"></a>Проверка контроля целостности</td><td colspan="2"><a id="p100231"></a>Всегда</td><td><a id="p100232"></a><a href="#p100729">Пункт 3.2.1.3</a></td></tr>
<tr><td rowspan="3"><a id="p100233"></a>FN-1.4</td><td rowspan="3"><a id="p100234"></a>Получение времени, оставшегося до окончания блокировки вызовов криптографических функций</td><td colspan="2"><a id="p100235"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100236"></a><a href="#p100743">Пункт 3.2.1.4</a></td></tr>
<tr><td><a id="p100237"></a>-</td><td><a id="p100238"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100239"></a>-</td><td><a id="p100240"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100241"></a>FN-1.5</td><td rowspan="3"><a id="p100242"></a>Получение даты и времени срока истечения действия пароля</td><td colspan="2"><a id="p100243"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100244"></a><a href="#p100756">Пункт 3.2.1.5</a></td></tr>
<tr><td><a id="p100245"></a>-</td><td><a id="p100246"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100247"></a>-</td><td><a id="p100248"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100249"></a>FN-1.6</td><td rowspan="3"><a id="p100250"></a>Смена пароля хранилища</td><td colspan="2"><a id="p100251"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100252"></a><a href="#p100768">Пункт 3.2.1.6</a></td></tr>
<tr><td><a id="p100253"></a>-</td><td><a id="p100254"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100255"></a>-</td><td><a id="p100256"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100257"></a>FN-1.7</td><td rowspan="3"><a id="p100258"></a>Деинициализация хранилища</td><td colspan="2"><a id="p100259"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100260"></a><a href="#p100778">Пункт 3.2.1.7</a></td></tr>
<tr><td><a id="p100261"></a>-</td><td><a id="p100262"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100263"></a>-</td><td><a id="p100264"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td><a id="p100265"></a>FN-1.8</td><td><a id="p100266"></a>Получение журнала использования ПМ</td><td colspan="2"><a id="p100267"></a>Должны быть выполнены методы: "Инициализация ПМ".</td><td><a id="p100268"></a><a href="#p100789">Пункт 3.2.1.8</a></td></tr>
<tr><td><a id="p100269"></a>FN-1.9</td><td><a id="p100270"></a>Регистрация установки СКЗИ</td><td colspan="2"><a id="p100271"></a>Должны быть выполнены методы: "Инициализация ПМ".</td><td><a id="p100272"></a><a href="#p100812">Пункт 3.2.1.9</a></td></tr>
<tr><td><a id="p100273"></a>FN-1.10</td><td><a id="p100274"></a>Настройка интерфейса работы с БДСЧ</td><td colspan="2"><a id="p100275"></a>Должны быть выполнены методы: "Инициализация ПМ".</td><td><a id="p100276"></a><a href="#p100825">Пункт 3.2.2.1</a></td></tr>
<tr><td rowspan="3"><a id="p100277"></a>FN-1.11</td><td rowspan="3"><a id="p100278"></a>Сохранение сертификатов криптографических ключей</td><td colspan="2"><a id="p100279"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100280"></a><a href="#p100868">Пункт 3.2.3.5</a></td></tr>
<tr><td><a id="p100281"></a>-</td><td><a id="p100282"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100283"></a>-</td><td><a id="p100284"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100285"></a>FN-1.12</td><td rowspan="3"><a id="p100286"></a>Сохранение CAC</td><td colspan="2"><a id="p100287"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100288"></a><a href="#p100883">Пункт 3.2.3.6</a></td></tr>
<tr><td><a id="p100289"></a>-</td><td><a id="p100290"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100291"></a>-</td><td><a id="p100292"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100293"></a>FN-1.13</td><td rowspan="3"><a id="p100294"></a>Формирование и хранение криптографических ключей пользователя</td><td colspan="2"><a id="p100295"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100296"></a><a href="#p100896">Пункт 3.2.3.7</a></td></tr>
<tr><td><a id="p100297"></a>-</td><td><a id="p100298"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100299"></a>-</td><td><a id="p100300"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100301"></a>FN-1.14</td><td rowspan="3"><a id="p100302"></a>Формирование и хранение транспортных криптографических ключей</td><td colspan="2"><a id="p100303"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100304"></a><a href="#p100912">Пункт 3.2.3.8</a></td></tr>
<tr><td><a id="p100305"></a>-</td><td><a id="p100306"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100307"></a>-</td><td><a id="p100308"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="4"><a id="p100309"></a>FN-1.15</td><td rowspan="4"><a id="p100310"></a>Создание запроса на СКПЭП пользователя</td><td colspan="2"><a id="p100311"></a>Должны быть выполнены методы:</td><td rowspan="4"><a id="p100312"></a><a href="#p100928">Пункт 3.2.3.9</a></td></tr>
<tr><td><a id="p100313"></a>-</td><td><a id="p100314"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100315"></a>-</td><td><a id="p100316"></a>"Формирование и хранение криптографических ключей пользователя".</td></tr>
<tr><td><a id="p100317"></a>-</td><td><a id="p100318"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="4"><a id="p100319"></a>FN-1.16</td><td rowspan="4"><a id="p100320"></a>Создание запроса на сертификат транспортного криптографического ключа</td><td colspan="2"><a id="p100321"></a>Должны быть выполнены методы:</td><td rowspan="4"><a id="p100322"></a><a href="#p100942">Пункт 3.2.3.10</a></td></tr>
<tr><td><a id="p100323"></a>-</td><td><a id="p100324"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100325"></a>-</td><td><a id="p100326"></a>"Формирование и хранение криптографических ключей пользователя".</td></tr>
<tr><td><a id="p100327"></a>-</td><td><a id="p100328"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100329"></a>FN-1.17</td><td rowspan="3"><a id="p100330"></a>Единый метод формирования ключей и создания запроса на СКПЭП</td><td colspan="2"><a id="p100331"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100332"></a><a href="#p100955">Пункт 3.2.3.11</a></td></tr>
<tr><td><a id="p100333"></a>-</td><td><a id="p100334"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100335"></a>-</td><td><a id="p100336"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100337"></a>FN-1.18</td><td rowspan="3"><a id="p100338"></a>Единый метод формирования транспортных ключей и создания запроса на сертификат</td><td colspan="2"><a id="p100339"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100340"></a><a href="#p100972">Пункт 3.2.3.12</a></td></tr>
<tr><td><a id="p100341"></a>-</td><td><a id="p100342"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100343"></a>-</td><td><a id="p100344"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="4"><a id="p100345"></a>FN-1.19</td><td rowspan="4"><a id="p100346"></a>Подписание исходящих ЭС</td><td colspan="2"><a id="p100347"></a>Должны быть выполнены методы:</td><td rowspan="4"><a id="p100348"></a><a href="#p100989">Пункт 3.2.3.13</a></td></tr>
<tr><td><a id="p100349"></a>-</td><td><a id="p100350"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100351"></a>-</td><td><a id="p100352"></a>"Метод формирования криптографических ключей пользователя и создания запроса на СКПЭП пользователя".</td></tr>
<tr><td><a id="p100353"></a>-</td><td><a id="p100354"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="4"><a id="p100355"></a>FN-1.20</td><td rowspan="4"><a id="p100356"></a>Подписание транзакционного сообщения</td><td colspan="2"><a id="p100357"></a>Должны быть выполнены методы:</td><td rowspan="4"><a id="p100358"></a><a href="#p101005">Пункт 3.2.3.14</a></td></tr>
<tr><td><a id="p100359"></a>-</td><td><a id="p100360"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100361"></a>-</td><td><a id="p100362"></a>"Метод формирования криптографических ключей пользователя и создания запроса на СКПЭП пользователя".</td></tr>
<tr><td><a id="p100363"></a>-</td><td><a id="p100364"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100365"></a>FN-1.21</td><td rowspan="3"><a id="p100366"></a>Зашифрование исходящих ЭС</td><td colspan="2"><a id="p100367"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100368"></a><a href="#p101021">Пункт 3.2.3.15</a></td></tr>
<tr><td><a id="p100369"></a>-</td><td><a id="p100370"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100371"></a>-</td><td><a id="p100372"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100373"></a>FN-1.22</td><td rowspan="3"><a id="p100374"></a>Проверка подписи RAW</td><td colspan="2"><a id="p100375"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100376"></a><a href="#p101041">Пункт 3.2.3.16</a></td></tr>
<tr><td><a id="p100377"></a>-</td><td><a id="p100378"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100379"></a>-</td><td><a id="p100380"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100381"></a>FN-1.23</td><td rowspan="3"><a id="p100382"></a>Проверка подписи входящих ЭС</td><td colspan="2"><a id="p100383"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100384"></a><a href="#p101057">Пункт 3.2.3.17</a></td></tr>
<tr><td><a id="p100385"></a>-</td><td><a id="p100386"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100387"></a>-</td><td><a id="p100388"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="4"><a id="p100389"></a>FN-1.24</td><td rowspan="4"><a id="p100390"></a>Расшифрование входящих ЭС</td><td colspan="2"><a id="p100391"></a>Должны быть выполнены методы:</td><td rowspan="4"><a id="p100392"></a><a href="#p101078">Пункт 3.2.3.18</a></td></tr>
<tr><td><a id="p100393"></a>-</td><td><a id="p100394"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100395"></a>-</td><td><a id="p100396"></a>"Формирование и хранение криптографических ключей пользователя".</td></tr>
<tr><td><a id="p100397"></a>-</td><td><a id="p100398"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="4"><a id="p100399"></a>FN-1.25</td><td rowspan="4"><a id="p100400"></a>Единый метод проверки ЭС</td><td colspan="2"><a id="p100401"></a>Должны быть выполнены методы:</td><td rowspan="4"><a id="p100402"></a><a href="#p101092">Пункт 3.2.3.19</a></td></tr>
<tr><td><a id="p100403"></a>-</td><td><a id="p100404"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100405"></a>-</td><td><a id="p100406"></a>"Формирование и хранение криптографических ключей пользователя".</td></tr>
<tr><td><a id="p100407"></a>-</td><td><a id="p100408"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="4"><a id="p100409"></a>FN-1.26</td><td rowspan="4"><a id="p100410"></a>Единый метод формирования ЭС</td><td colspan="2"><a id="p100411"></a>Должны быть выполнены методы:</td><td rowspan="4"><a id="p100412"></a><a href="#p101111">Пункт 3.2.3.20</a></td></tr>
<tr><td><a id="p100413"></a>-</td><td><a id="p100414"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100415"></a>-</td><td><a id="p100416"></a>"Метод формирования криптографических ключей пользователя и создания запроса на СКПЭП пользователя".</td></tr>
<tr><td><a id="p100417"></a>-</td><td><a id="p100418"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100419"></a>FN-1.27</td><td rowspan="3"><a id="p100420"></a>Удаление данных из хранилища СКЗИ</td><td colspan="2"><a id="p100421"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100422"></a><a href="#p101134">Пункт 3.2.3.21</a></td></tr>
<tr><td><a id="p100423"></a>-</td><td><a id="p100424"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100425"></a>-</td><td><a id="p100426"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100427"></a>FN-1.28</td><td rowspan="3"><a id="p100428"></a>Удаление сертификатов ключей пользователя</td><td colspan="2"><a id="p100429"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100430"></a><a href="#p101145">Пункт 3.2.3.22</a></td></tr>
<tr><td><a id="p100431"></a>-</td><td><a id="p100432"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100433"></a>-</td><td><a id="p100434"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100435"></a>FN-1.29</td><td rowspan="3"><a id="p100436"></a>Извлечение сертификата ключей пользователя</td><td colspan="2"><a id="p100437"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100438"></a><a href="#p101157">Пункт 3.2.3.23</a></td></tr>
<tr><td><a id="p100439"></a>-</td><td><a id="p100440"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100441"></a>-</td><td><a id="p100442"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="3"><a id="p100443"></a>FN-1.30</td><td rowspan="3"><a id="p100444"></a>Просмотр срока действия сертификата</td><td colspan="2"><a id="p100445"></a>Должны быть выполнены методы:</td><td rowspan="3"><a id="p100446"></a><a href="#p101170">Пункт 3.2.3.24</a></td></tr>
<tr><td><a id="p100447"></a>-</td><td><a id="p100448"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100449"></a>-</td><td><a id="p100450"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
<tr><td rowspan="4"><a id="p100451"></a>FN-1.31</td><td rowspan="4"><a id="p100452"></a>Установка защищенного соединения по протоколу TLS</td><td colspan="2"><a id="p100453"></a>Должны быть выполнены методы:</td><td rowspan="4"><a id="p100454"></a><a href="#p101181">Пункт 3.2.4</a></td></tr>
<tr><td><a id="p100455"></a>-</td><td><a id="p100456"></a>"Инициализация ПМ".</td></tr>
<tr><td><a id="p100457"></a>-</td><td><a id="p100458"></a>"Метод формирования криптографических ключей пользователя и создания запроса на транспортный сертификат".</td></tr>
<tr><td><a id="p100459"></a>-</td><td><a id="p100460"></a>"Инициализация работы с хранилищем СКЗИ".</td></tr>
</table>


<a id="p100461"></a>**Приведенный список рекомендуется для реализации, но не является исчерпывающим. Он может быть изменен по усмотрению разработчика ПМ.**


### <a id="p100462"></a>2.4 Требования к среде функционирования ПМ

<a id="p100463"></a>В документе описан ПМ, функционирующий по крайней мере в одной из следующих сред:
- <a id="p100464"></a>ОС Google Android не ниже версии 8;
- <a id="p100465"></a>ОС Apple iOS не ниже версии 12;
<a id="p100466"></a>**- ОС Аврора (Aurora) не ниже версии 4.0;**
<a id="p100467"></a>**- ОС HarmonyOS не ниже версии 2.0.**
<a id="p100468"></a>**Перечень ОС, в которых функционирует ПМ, должен соответствовать эксплуатационной документации на СКЗИ.**
<a id="p100469"></a>Минимальные требования архитектуры процессоров:
- <a id="p100470"></a>ПМ в составе МП для ОС Google Android и ОС HarmonyOS должен поддерживать архитектуры процессоров x86_64, ARM 32-bit и 64-bit.
- <a id="p100471"></a>ПМ в составе МП для ОС Apple iOS должен поддерживать архитектуры процессоров на физическом устройстве (ARM 64-bit) и на эмуляторе (x86_64 и ARM 64-bit).
- <a id="p100472"></a>ПМ в составе МП для ОС Аврора должен поддерживать архитектуры процессоров ARM 64-bit и x86_64.


### <a id="p100473"></a>2.5 Требования к интерфейсам ПМ



#### <a id="p100474"></a>2.5.1 Пользовательские интерфейсы

<a id="p100475"></a>Требования к пользовательским интерфейсам ПМ определяются разработчиком. Требования к программным интерфейсам СКЗИ определены в [п. 3.4.4](#p101753).


#### <a id="p100476"></a>2.5.2 Программные интерфейсы

<a id="p100477"></a>ПМ должен предоставлять набор программных интерфейсов для взаимодействия с МП.
<a id="p100478"></a>ПМ может представлять собой единый функциональный модуль для интеграции в МП без необходимости подключения дополнительных пакетов и настроек. Допустимо использование транзитивных зависимостей, которые разрешаются в автоматическом режиме.
<a id="p100479"></a>Для подключения к ПлЦР ПМ должен обеспечивать выполнение требований, предъявляемых в документах [[11]](#p100047) в части криптографической защиты информации.
<a id="p100480"></a>Для подключения к ПлЦР интерфейсы ПМ и МП должны обеспечивать МП выполнение требований документа [[33]](#p100071).
<a id="p100481"></a>**Рекомендации по разработке функций ПМ приведены в [разделе 3.2](#p100674).**
<a id="p100482"></a>В ПМ для МП для ОС Apple iOS должны быть определены интерфейсные классы на языке Swift или другом языке программирования для ОС Apple iOS.
<a id="p100483"></a>В ПМ для МП для ОС Google Android и HarmonyOS должны быть определены интерфейсные классы на языке Java, Kotlin или другом языке программирования для данных ОС.
<a id="p100484"></a>В ПМ для МП для ОС Аврора должны быть определены интерфейсные классы на языке C++ или другом языке программирования для данной ОС.


## <a id="p100485"></a>3 Функциональные требования


<a id="p100486"></a>Раздел содержит детальное описание функций ПМ, представленных в [п. 2.3](#p100214) документа, а также рекомендации и требования по их реализации.


### <a id="p100487"></a>3.1 Функциональная схема

<a id="p100488"></a>На Рисунке 2 представлена схема решения с указанием функциональных взаимодействий между компонентами системы и типов этих взаимодействий.

<a id="p100489"></a> ![3.1 Функциональная схема](https://i.bukva.ai/NT1GUrMC5/img_1.jpg) 

<a id="p100490"></a>**Рисунок 2 - Функциональная схема решения**


#### <a id="p100491"></a>3.1.1 Правила формирования названия потока

<a id="p100492"></a>На [Рисунке 2](#p100490) обозначены информационные потоки. Название потока формируется по шаблону: <S>.<sup>d</sup>. Обозначение кодов в шаблоне представлено в [Таблице 4](#p100494).
<a id="p100493"></a>Сокращения, используемые при формировании шаблона, представлены в [Таблице 5](#p100506).

<a id="p100494"></a>**Таблица 4 - Описание кодов шаблона подписи потоков**


| <a id="p100495"></a>Код | <a id="p100496"></a>Название | <a id="p100497"></a>Описание |
| --- | --- | --- |
| <a id="p100498"></a>S | <a id="p100499"></a>Source<br>Источник | <a id="p100500"></a>Перечень компонентов указан ниже |
| <a id="p100501"></a>D | <a id="p100502"></a>Destination<br>Получатель | <a id="p100503"></a>Перечень компонентов указан ниже |



#### <a id="p100504"></a>3.1.2 Список компонентов

<a id="p100505"></a>В Таблице 5 представлено описание компонентов, отображенных на [Рисунке 2](#p100490).

<a id="p100506"></a>**Таблица 5 - Описание компонентов функциональной схемы решения**


| <a id="p100507"></a>Компонент | <a id="p100508"></a>Описание |
| --- | --- |
| <a id="p100509"></a>TLS сервер | <a id="p100510"></a>Сервер, обеспечивающий безопасную передачу данных посредством протокола TLS. |
| <a id="p100511"></a>UI | <a id="p100512"></a>Пользовательский интерфейс МП, с которым взаимодействует пользователь. |
| <a id="p100513"></a>Внешние сервисы | <a id="p100514"></a>Внешние сервисы, с которыми взаимодействует мобильное приложение, в том числе: сервисы участника ЦР, сервисы финансовых организаций, сервисы ЕСИА, сервисы ЕБС. |
| <a id="p100515"></a>Логика МП | <a id="p100516"></a>Основная функциональность МП, реализующая бизнес-логику, обработку данных и управление взаимодействиями между частями МП. |
| <a id="p100517"></a>МП | <a id="p100518"></a>Мобильное финансовое приложение, используемое при осуществлении дистанционного доступа к финансовым услугам и сервисам, в том числе при выполнении операций с ЦР. |
| <a id="p100519"></a>ОС | <a id="p100520"></a>Операционная система (Android, iOS, Аврора, HarmonyOS). |
| <a id="p100521"></a>ПМ | <a id="p100522"></a>Программный модуль, имеющий в своем составе сертифицированное СКЗИ для осуществления криптографических преобразований. |
| <a id="p100523"></a>ППИAPI<br>ПМ | <a id="p100524"></a>Набор функций и процедур, предоставляемый ПМ, для взаимодействия с МП и его компонентами. |
| <a id="p100525"></a>СКЗИ | <a id="p100526"></a>Средство криптографической защиты информации. |
| <a id="p100527"></a>ХМП | <a id="p100528"></a>Область памяти, которая выделяется мобильной ОС для обеспечения работы МП. |
| <a id="p100529"></a>ХПМ | <a id="p100530"></a>Внутреннее хранилище ПМ. |
| <a id="p100531"></a>ХСКЗИ | <a id="p100532"></a>Защищенное хранилище СКЗИ. |



#### <a id="p100533"></a>3.1.3 Функции по информационным потокам

<a id="p100534"></a>В Таблице 6 представлена связь информационных потоков с соответствующими им функциями.

<a id="p100535"></a>**Таблица 6 - Связь потоков с функциями ПМ**


<table>
<colgroup><col width="17%"><col width="7%"><col width="6%"><col width="70%"></colgroup>
<tr><td><a id="p100536"></a>Название потока</td><td colspan="3"><a id="p100537"></a>Функции</td></tr>
<tr><td rowspan="30"><a id="p100538"></a>МП.ПМ</td><td><a id="p100539"></a>1.</td><td colspan="2"><a id="p100540"></a>Инициализация ПМ.</td></tr>
<tr><td><a id="p100541"></a>2.</td><td colspan="2"><a id="p100542"></a>Инициализация защищенного хранилища.</td></tr>
<tr><td><a id="p100543"></a>3.</td><td colspan="2"><a id="p100544"></a>Деинициализация защищенного хранилища.</td></tr>
<tr><td><a id="p100545"></a>4.</td><td colspan="2"><a id="p100546"></a>Проверка контроля целостности.</td></tr>
<tr><td><a id="p100547"></a>5.</td><td colspan="2"><a id="p100548"></a>Сохранение сертификатов криптографических ключей.</td></tr>
<tr><td><a id="p100549"></a>6.</td><td colspan="2"><a id="p100550"></a>Сохранение CAC.</td></tr>
<tr><td><a id="p100551"></a>7.</td><td colspan="2"><a id="p100552"></a>Формирование и хранение криптографических ключей пользователя.</td></tr>
<tr><td><a id="p100553"></a>8.</td><td colspan="2"><a id="p100554"></a>Формирование и хранение транспортных криптографических ключей.</td></tr>
<tr><td><a id="p100555"></a>9.</td><td colspan="2"><a id="p100556"></a>Создание запроса на СКПЭП пользователя.</td></tr>
<tr><td><a id="p100557"></a>10.</td><td colspan="2"><a id="p100558"></a>Создание запроса на сертификат транспортного криптографического ключа.</td></tr>
<tr><td><a id="p100559"></a>11.</td><td colspan="2"><a id="p100560"></a>Единый метод формирования ключей и создания запроса на СКПЭП.</td></tr>
<tr><td><a id="p100561"></a>12.</td><td colspan="2"><a id="p100562"></a>Единый метод формирования транспортных ключей и создания запроса на сертификат.</td></tr>
<tr><td><a id="p100563"></a>13.</td><td colspan="2"><a id="p100564"></a>Подписание исходящих ЭС.</td></tr>
<tr><td><a id="p100565"></a>14.</td><td colspan="2"><a id="p100566"></a>Подписание транзакционного сообщения.</td></tr>
<tr><td><a id="p100567"></a>15.</td><td colspan="2"><a id="p100568"></a>Зашифрование исходящих ЭС.</td></tr>
<tr><td><a id="p100569"></a>16.</td><td colspan="2"><a id="p100570"></a>Проверка подписи входящих ЭС.</td></tr>
<tr><td><a id="p100571"></a>17.</td><td colspan="2"><a id="p100572"></a>Расшифрование входящих ЭС.</td></tr>
<tr><td><a id="p100573"></a>18.</td><td colspan="2"><a id="p100574"></a>Проверка входящих ЭС.</td></tr>
<tr><td><a id="p100575"></a>19.</td><td colspan="2"><a id="p100576"></a>Формирование исходящих ЭС.</td></tr>
<tr><td><a id="p100577"></a>20.</td><td colspan="2"><a id="p100578"></a>Установка защищенного канала связи.</td></tr>
<tr><td><a id="p100579"></a>21.</td><td colspan="2"><a id="p100580"></a>Получение времени, оставшегося до окончания блокировки вызовов криптографических функций.</td></tr>
<tr><td><a id="p100581"></a>22.</td><td colspan="2"><a id="p100582"></a>Удаление защищенного хранилища.</td></tr>
<tr><td><a id="p100583"></a>23.</td><td colspan="2"><a id="p100584"></a>Удаление сертификата.</td></tr>
<tr><td><a id="p100585"></a>24.</td><td colspan="2"><a id="p100586"></a>Извлечение сертификата криптографических ключей.</td></tr>
<tr><td><a id="p100587"></a>25.</td><td colspan="2"><a id="p100588"></a>Получение срока действия сертификата.</td></tr>
<tr><td><a id="p100589"></a>26.</td><td colspan="2"><a id="p100590"></a>Смена пароля.</td></tr>
<tr><td><a id="p100591"></a>27.</td><td colspan="2"><a id="p100592"></a>Получение даты и времени истечения срока действия пароля.</td></tr>
<tr><td><a id="p100593"></a>28.</td><td colspan="2"><a id="p100594"></a>Настройка интерфейса работы с БДСЧ.</td></tr>
<tr><td><a id="p100595"></a>29.</td><td colspan="2"><a id="p100596"></a>Получение журнала использования ПМ.</td></tr>
<tr><td><a id="p100597"></a>30.</td><td colspan="2"><a id="p100598"></a>Регистрация установки СКЗИ.</td></tr>
<tr><td rowspan="22"><a id="p100599"></a>ПМ.СКЗИ</td><td><a id="p100600"></a>1.</td><td colspan="2"><a id="p100601"></a>Инициализация СКЗИ.</td></tr>
<tr><td><a id="p100602"></a>2.</td><td colspan="2"><a id="p100603"></a>Инициализация защищенного хранилища.</td></tr>
<tr><td><a id="p100604"></a>3.</td><td colspan="2"><a id="p100605"></a>Удаление защищенного хранилища.</td></tr>
<tr><td><a id="p100606"></a>4.</td><td colspan="2"><a id="p100607"></a>Проверка контроля целостности.</td></tr>
<tr><td><a id="p100608"></a>5.</td><td colspan="2"><a id="p100609"></a>Сохранение сертификатов криптографических ключей.</td></tr>
<tr><td><a id="p100610"></a>6.</td><td colspan="2"><a id="p100611"></a>Сохранение CAC.</td></tr>
<tr><td><a id="p100612"></a>7.</td><td colspan="2"><a id="p100613"></a>Получение CAC.</td></tr>
<tr><td><a id="p100614"></a>8.</td><td colspan="2"><a id="p100615"></a>Формирование пары криптографических ключей.</td></tr>
<tr><td><a id="p100616"></a>9.</td><td colspan="2"><a id="p100617"></a>Сохранение пары криптографических ключей.</td></tr>
<tr><td><a id="p100618"></a>10.</td><td colspan="2"><a id="p100619"></a>Формирование запроса на сертификат криптографических ключей.</td></tr>
<tr><td><a id="p100620"></a>11.</td><td colspan="2"><a id="p100621"></a>Подписание ЭС определенного типа.</td></tr>
<tr><td><a id="p100622"></a>12.</td><td colspan="2"><a id="p100623"></a>Зашифрование ЭС.</td></tr>
<tr><td><a id="p100624"></a>13.</td><td colspan="2"><a id="p100625"></a>Расшифрование ЭС.</td></tr>
<tr><td><a id="p100626"></a>14.</td><td colspan="2"><a id="p100627"></a>Проверка ЭП определенного типа.</td></tr>
<tr><td><a id="p100628"></a>15.</td><td colspan="2"><a id="p100629"></a>Поиск сертификата по шаблону.</td></tr>
<tr><td><a id="p100630"></a>16.</td><td colspan="2"><a id="p100631"></a>Удаление сертификата.</td></tr>
<tr><td><a id="p100632"></a>17.</td><td colspan="2"><a id="p100633"></a>Извлечение сертификата.</td></tr>
<tr><td><a id="p100634"></a>18.</td><td colspan="2"><a id="p100635"></a>Установка одностороннего и двухстороннего ГОСТ-TLS соединения</td></tr>
<tr><td><a id="p100636"></a>19.</td><td colspan="2"><a id="p100637"></a>Получение срока действия сертификата.</td></tr>
<tr><td><a id="p100638"></a>20.</td><td colspan="2"><a id="p100639"></a>Получение времени истечения срока действия пароля.</td></tr>
<tr><td><a id="p100640"></a>21.</td><td colspan="2"><a id="p100641"></a>Настройка интерфейса работы с БДСЧ.</td></tr>
<tr><td><a id="p100642"></a>22.</td><td colspan="2"><a id="p100643"></a>Смена пароля защищенного хранилища.</td></tr>
<tr><td rowspan="5"><a id="p100644"></a>ПМ.ХПМ</td><td><a id="p100645"></a>1.</td><td colspan="2"><a id="p100646"></a>Сохранение журнала использования ПМ.</td></tr>
<tr><td><a id="p100647"></a>2.</td><td colspan="2"><a id="p100648"></a>Получение журнала использования ПМ.</td></tr>
<tr><td><a id="p100649"></a>3.</td><td colspan="2"><a id="p100650"></a>Сохранение времени блокировки хранилища.</td></tr>
<tr><td><a id="p100651"></a>4.</td><td colspan="2"><a id="p100652"></a>Получение времени блокировки защищенного хранилища.</td></tr>
<tr><td><a id="p100653"></a>5.</td><td colspan="2"><a id="p100654"></a>Удаление данных из хранилища ПМ.</td></tr>
<tr><td><a id="p100655"></a>СКЗИ.ХСКЗИ</td><td><a id="p100656"></a>1.</td><td colspan="2"><a id="p100657"></a>Функции СКЗИ, для корректной работы которых необходимо взаимодействие с хранилищем СКЗИ.</td></tr>
<tr><td rowspan="4"><a id="p100658"></a>СКЗИ.ОС</td><td><a id="p100659"></a>1.</td><td colspan="2"><a id="p100660"></a>Функции СКЗИ, для корректной работы которых необходимо взаимодействие с ОС:</td></tr>
<tr><td></td><td><a id="p100661"></a>a)</td><td><a id="p100662"></a>сбор энтропии;</td></tr>
<tr><td></td><td><a id="p100663"></a>b)</td><td><a id="p100664"></a>запрос ввода пароля от сегмента хранилища;</td></tr>
<tr><td></td><td><a id="p100665"></a>c)</td><td><a id="p100666"></a>запрос смены пароля от сегмента хранилища.</td></tr>
<tr><td rowspan="3"><a id="p100667"></a>ПМ.ВС</td><td><a id="p100668"></a>1.</td><td colspan="2"><a id="p100669"></a>Одностороннее и двустороннее ГОСТ-TLS соединение для осуществления взаимодействия с сервисами финансовых организаций.</td></tr>
<tr><td><a id="p100670"></a>2.</td><td colspan="2"><a id="p100671"></a>При взаимодействии с ЕСИА одностороннее ГОСТ-TLS-соединение для осуществления функции аутентификации пользователя в соответствии с документом [[31]](#p100067).</td></tr>
<tr><td><a id="p100672"></a>3.</td><td colspan="2"><a id="p100673"></a>При взаимодействии с ЕБС одностороннее ГОСТ-TLS-соединение для осуществления функции аутентификации пользователя.</td></tr>
</table>



### <a id="p100674"></a>3.2 Описание классов и методов ПМ

<a id="p100675"></a>ПМ должен обеспечивать корректную обработку аварийных ситуаций, вызванных неверным форматом, размером или недопустимыми значениями входных данных. В случае возникновения ошибок при выполнении функций ПМ должен вернуть негативный результат с кодом и описанием причины. Ошибки не должны приводить к нештатным ситуациям, ПМ должен оставаться в рабочем состоянии. Описание кодов и возможных причин ошибок приведено в [разделе 3.2.6](#p101296).
<a id="p100676"></a>Необходимость вывода ошибок и отображаемая пользователю информация в интерфейсе МП должны определяться разработчиком МП.
<a id="p100677"></a>Передача параметров при вызове функций СКЗИ должна быть реализована в соответствии с рекомендациями производителей ОС.
<a id="p100678"></a>**Не рекомендуется использовать пустые значения входных параметров функций.**
<a id="p100679"></a>**Все методы должны прерывать выполнение и возвращать код ошибки "Требуется инициализация ПМ", если не был вызван метод инициализации ПМ.**
<a id="p100680"></a>**Если вызов метода произошел во время выполнения метода инициализации, ПМ не должен прерывать выполнение метода. Ранее вызванная инициализация должна завершиться, после чего выполняется обработка вызова.**


#### <a id="p100681"></a>3.2.1 Класс Core

<a id="p100682"></a>Класс Core содержит основные методы ПМ.


##### <a id="p100683"></a>3.2.1.1 Метод init (filesWithCheckSums)

<a id="p100684"></a>Метод инициализации ПМ и СКЗИ.


###### <a id="p100685"></a>Входные данные

<a id="p100686"></a>**- filesWithCheckSums - массив пар строк. Массив содержит эталонные значения хэшей, рассчитанные от файлов и ресурсов МП, целостность которых необходимо проверить, и пути к ним. Хэши должны быть рассчитаны в соответствии с документом [[30]](#p100066).**


###### <a id="p100687"></a>Выходные данные

- <a id="p100688"></a>result - строка, в случае успеха возвращает "ОК".


###### <a id="p100689"></a>Требования

<a id="p100690"></a>**Выполнение проверок.**
<a id="p100691"></a>**1. В случае повторного вызова метода инициализации вернуть код ошибки "Инициализация ПМ уже выполнена".**
2. <a id="p100692"></a>Проверить:
<a id="p100693"></a>а) наличие root-доступа для Google Android, HarmonyOS и Аврора или jailbreak для Apple iOS;
<a id="p100694"></a>b) маскировку наличия у пользователя прав суперпользователя (Root Cloaking Detection);
<a id="p100695"></a>c) использование устройством модифицированной (неофициальной) прошивки (Custom Firmware Detection);
<a id="p100696"></a>d) запуск приложения на эмуляторе устройства (Emulator Detection);
<a id="p100697"></a>e) использование функций отладчика при запуске приложения (Debug Detection);
<a id="p100698"></a>f) наличие программных средств, позволяющих изменять поведение приложений или ОС за счет перехвата вызовов и других способов воздействия на программную среду (Hooks Detection).
<a id="p100699"></a>**3. При наличии хотя бы одного признака небезопасной работы из перечисленных в [пункте 2](#p100692), прервать выполнение функции и вернуть код, соответствующий ошибке "Невозможно вызвать криптографические функции" (см. [раздел 3.2.6](#p101296)).**
<a id="p100700"></a>**4. Инициализировать СКЗИ для обеспечения корректной работы функций криптографической защиты, инициализировать область памяти в СКЗИ.**
<a id="p100701"></a>**5. При получении уведомления от СКЗИ об отсутствии или недостаточном количестве информационной энтропии выполнение метода инициализации должно приостанавливаться, а после сбора достаточного количества энтропии корректного возобновляться.**
6. <a id="p100702"></a>Вызвать метод checkIntegrity (filesWithCheckSums). На вход передать значения, полученные во входных параметрах метода инициализации.
7. <a id="p100703"></a>Установить в хранилище СКЗИ серверный ГОСТ-TLS-сертификат и связанную с ним цепочку сертификатов, включающую все промежуточные сертификаты, сертификат промежуточного УЦ и сертификат корневого УЦ:
<a id="p100704"></a>a) корневые (самоподписанные) сертификаты УЦ БР и УЦ Безопасности, промежуточный сертификат ПУЦ УНЭП должны быть включены в ресурс МП;
<a id="p100705"></a>b) в МП должен быть реализован механизм ротации сертификатов в случае окончания срока действия сертификата или при его компрометации.
8. <a id="p100706"></a>Вернуть "ОК".
9. <a id="p100707"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


##### <a id="p100708"></a>3.2.1.2 Метод initCryptContext (storeId, userId)

<a id="p100709"></a>Метод инициализации контейнера криптографических ключей.

<a id="p100710"></a>**Входные данные <3>**

<a id="p100711"></a>

---

<a id="p100712"></a>**<3> Список входных данных может быть расширен в зависимости от особенностей реализации СКЗИ.**

- <a id="p100713"></a>storeId - строка, уникальный идентификатор сегмента хранилища СКЗИ;
- <a id="p100714"></a>userId - строка, уникальный идентификатор пользователя МП. Необязательный параметр.

<a id="p100715"></a>Выходные данные
- <a id="p100716"></a>cryptContext - структура данных, полученная от СКЗИ и содержащая информацию о состоянии и параметрах работы с криптографическим провайдером.

<a id="p100717"></a>Требования
<a id="p100718"></a>Для каждого пользователя может быть создано несколько защищенных хранилищ с доступом по паролю. Идентификаторы хранилищ должны быть уникальными для уникальных пользователей и формироваться на стороне МП (требования к идентификатору хранилища СКЗИ и идентификатору пользователя МП см. в [пунктах 3.2.3.2](#p100846) и [3.3.2](#p101446)).
1. <a id="p100719"></a>Если идентификатор пользователя не передан, то перейти к [шагу 6](#p100724) и выполнить инициализацию контекста для корневого хранилища.
2. <a id="p100720"></a>Проверить, был ли ранее сохранен идентификатор пользователя МП во внутреннем хранилище ПМ.
3. <a id="p100721"></a>Если идентификатор пользователя найден, то перейти к [шагу 6](#p100724).
4. <a id="p100722"></a>Если идентификатор пользователя не найден, то вызвать метод удаления найденных сегментов хранилища СКЗИ и всей ключевой информации - deleteStore (storeId).
5. <a id="p100723"></a>Сохранить идентификатор пользователя и идентификатор хранилища СКЗИ во внутреннем хранилище ПМ, если они не были ранее сохранены во внутреннем хранилище ПМ.
<a id="p100724"></a>**6. Вызвать метод инициализации контекста криптографического провайдера в СКЗИ в соответствии с уникальным идентификатором хранилища:**
<a id="p100725"></a>**a) если защищенный ключевой контейнер не был создан ранее, необходимо его создать и установить пароль;**
<a id="p100726"></a>**b) в ответ СКЗИ должно возвращать объект cryptContext, содержащий структуру данных с информацией о криптопровайдере, для выполнения последующих криптографических операций и управления криптографическими ресурсами.**
7. <a id="p100727"></a>Вернуть полученный объект cryptContext.
8. <a id="p100728"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100729"></a>3.2.1.3 Метод checkIntegrity (filesWithCheckSums)

<a id="p100730"></a>Метод проверки, который используется для обнаружения изменений в данных или программном обеспечении, и позволяет определить факт несанкционированного вмешательства.


###### <a id="p100731"></a>Входные данные

<a id="p100732"></a>**- filesWithCheckSums - массив, содержащий эталонные значения хэшей, рассчитанных от файлов и ресурсов МП, целостность которых необходимо проверить, и пути к ним (структура элементов массива может определяться разработчиком ПМ в зависимости от особенностей ОС).**


###### <a id="p100733"></a>Выходные данные

- <a id="p100734"></a>result - строка. В случае успеха возвращает код "ОК", в случае неуспеха - код "INVALID".


###### <a id="p100735"></a>Требования

1. <a id="p100736"></a>Рассчитать контрольные значения хэшей для каждого файла из filesWithCheckSums. Для этого:
<a id="p100737"></a>a) инициировать вызов в СКЗИ функции вычисления хэшей необходимого файла;
<a id="p100738"></a>b) хэши должны рассчитываться в соответствии с документом [[30]](#p100066).
2. <a id="p100739"></a>Сравнить вычисленные хэши и значения контрольных сумм из filesWithCheckSums для проверяемого файла.
3. <a id="p100740"></a>В случае совпадения всех вычисленных хэшей с эталонными значениями вернуть код "ОК".
4. <a id="p100741"></a>В случае хотя бы одного не совпадения - вернуть код "INVALID".
5. <a id="p100742"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ необходимо прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100743"></a>3.2.1.4 Метод getAccessTime (storeId)

<a id="p100744"></a>**Метод используется для получения времени, оставшегося до окончания блокировки вызовов криптографических функций.**


###### <a id="p100745"></a>Входные данные

- <a id="p100746"></a>storeId - строка, идентификатор хранилища СКЗИ.


###### <a id="p100747"></a>Выходные данные

<a id="p100748"></a>**- accessTime - время в секундах, оставшееся до конца блокировки.**


###### <a id="p100749"></a>Требования

1. <a id="p100750"></a>Извлечь из внутреннего хранилища ПМ значение времени окончания блокировки по идентификатору защищенного хранилища СЗКИ.
2. <a id="p100751"></a>Вычислить время, оставшееся до окончания блокировки вызовов криптографических функций, как дельту между временем окончания блокировки и текущим временем. При расчете дельты привести время к единому часовому поясу по стандарту UTC:
<a id="p100752"></a>a) если время окончания блокировки для хранилища не найдено, то вернуть 0;
<a id="p100753"></a>b) если в результате вычисления дельты получено отрицательное значение, то вернуть 0.
3. <a id="p100754"></a>В случае успешного вычисления вернуть время с точностью до секунды.
4. <a id="p100755"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий необходимо прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100756"></a>3.2.1.5 Метод getPasswordExpirationTime (storeId, timeZone)

<a id="p100757"></a>**Метод получения времени действия пароля к хранилищу СКЗИ.**


###### <a id="p100758"></a>Входные данные

- <a id="p100759"></a>storeId - строка, идентификатор хранилища СКЗИ;
- <a id="p100760"></a>timeZone - строка, часовой пояс, в котором необходимо вернуть дату и время истечения срока действия пароля.


###### <a id="p100761"></a>Выходные данные

<a id="p100762"></a>**- expirationTime - datatime, дата и время срока истечения действия пароля в часовом поясе из timeZone.**


###### <a id="p100763"></a>Требования

1. <a id="p100764"></a>Вызвать функцию СКЗИ для получения времени истечения срока действия пароля для полученного идентификатора хранилища СКЗИ.
2. <a id="p100765"></a>Привести полученное временное значение к часовому поясу, полученному в параметре timeZone.
3. <a id="p100766"></a>Вернуть дату и время истечения срока действия пароля.
<a id="p100767"></a>**4. В случае неуспешного выполнения какого-либо из перечисленных выше действий необходимо прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).**


###### <a id="p100768"></a>3.2.1.6 Метод changePassword (storeId)

<a id="p100769"></a>Метод изменения пароля к хранилищу СКЗИ.


###### <a id="p100770"></a>Входные данные

<a id="p100771"></a>**- storeId - строка, идентификатор хранилища СКЗИ.**


###### <a id="p100772"></a>Выходные данные

- <a id="p100773"></a>result - строка, в случае успеха возвращает код "ОК".


###### <a id="p100774"></a>Требования

1. <a id="p100775"></a>Вызвать метод СКЗИ для изменения пароля защищенного хранилища. Интерфейс для смены пароля сегмента хранилища должен вызываться с помощью СКЗИ.
2. <a id="p100776"></a>После успешного выполнения функции вернуть "ОК".
3. <a id="p100777"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100778"></a>3.2.1.7 Метод releaseContext (cryptoContext)

<a id="p100779"></a>**Метод деинициализации работы с защищенным хранилищем.**


###### <a id="p100780"></a>Входные данные

- <a id="p100781"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере.


###### <a id="p100782"></a>Выходные данные

<a id="p100783"></a>**- result - строка, в случае успеха возвращает код "ОК"**


###### <a id="p100784"></a>Требования

1. <a id="p100785"></a>Вызвать функцию СКЗИ для деинициализации cryptContext.
2. <a id="p100786"></a>Если установлено одностороннее или двустороннее ГОСТ-TLS соединение, то при завершении работы с хранилищем соединение необходимо разрывать.
3. <a id="p100787"></a>После успешного выполнения функции вернуть "ОК".
<a id="p100788"></a>**4. В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ необходимо прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).**


###### <a id="p100789"></a>3.2.1.8 Метод getAuditLog (timeBegin, timeEnd)

<a id="p100790"></a>Метод получения журнала аудита. <4>

<a id="p100791"></a>

---

<a id="p100792"></a><4> Журнал формируется за период времени по всем хранилищам в рамках одного мобильного устройства. При вызове функции необходимо дополнительно применять фильтрацию при выводе логов пользователю.


###### <a id="p100793"></a>Входные данные

<a id="p100794"></a>**- timeBegin - Unix Timestamp, дата начала фиксации событий;**
<a id="p100795"></a>**- timeEnd - Unix Timestamp, дата окончания фиксации событий.**


###### <a id="p100796"></a>Выходные данные

- <a id="p100797"></a>auditLog - массив структур данных, содержащих следующие элементы:
- <a id="p100798"></a>id - строка, уникальный идентификатор действия;
- <a id="p100799"></a>createdAt - Unix Timestamp, дата и время действия;
- <a id="p100800"></a>functionName - строка, название вызванного метода;
- <a id="p100801"></a>result - строка, результат выполнения функции (SUCCESS, FAIL);
- <a id="p100802"></a>inputData - строка, список входных данных, может быть пустым;
- <a id="p100803"></a>outputData - строка, список выходных данных, может быть пустым;
- <a id="p100804"></a>storeId - строка, идентификатор хранилища, может быть пустым;
- <a id="p100805"></a>errorCode - целое число, код ошибки, может быть пустым;
- <a id="p100806"></a>errorMessage - строка, описание ошибки, может быть пустым.


###### <a id="p100807"></a>Требования

1. <a id="p100808"></a>Получить из внутреннего хранилища ПМ журнал взаимодействия с ПМ, отфильтрованный по полученному временному периоду. Требования к хранению данных описаны в [пункте 3.4](#p101586).
<a id="p100809"></a>**2. Отсортировать извлеченные данные по возрастанию даты и времени действия (createdAt).**
<a id="p100810"></a>**3. Вернуть извлеченный отсортированный список.**
<a id="p100811"></a>**4. В случае неуспешного выполнения какого-либо из перечисленных выше действий прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).**


###### <a id="p100812"></a>3.2.1.9 Метод registerInstallation()

<a id="p100813"></a>Метод регистрации установки и учета СКЗИ.


###### <a id="p100814"></a>Входные данные

<a id="p100815"></a>**- отсутствуют**


###### <a id="p100816"></a>Выходные данные

- <a id="p100817"></a>id - строка, уникальный идентификатор установки СКЗИ;
- <a id="p100818"></a>date - datatime, дата и время установки СКЗИ в UTC.


###### <a id="p100819"></a>Требования

1. <a id="p100820"></a>Метод должен выполнять действия по регистрации экземпляра СКЗИ с учетом имеющихся механизмов СКЗИ.
2. <a id="p100821"></a>Разработчик ПМ должен самостоятельно продумать алгоритм регистрации, если используемое СКЗИ не предоставляет механизм поэкземплярного учета.
3. <a id="p100822"></a>В результате успешного выполнения метода вернуть уникальный идентификатор установки экземпляра СКЗИ и дату и время установки в UTC.
4. <a id="p100823"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ необходимо прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


##### <a id="p100824"></a>3.2.2 Класс Rng



###### <a id="p100825"></a>3.2.2.1 Метод customizeEntropyScreen (textLabels, backgroundColor, controlColor)

<a id="p100826"></a>Метод предназначен для адаптации дизайна экрана работы с БДСЧ к стилю МП. Реализация работы БДСЧ и возможность адаптации дизайна экрана работы с БДСЧ должны соответствовать эксплуатационной документации на СКЗИ.

<a id="p100827"></a>Входные данные <5>

<a id="p100828"></a>

---

<a id="p100829"></a><5> Список входных данных может быть расширен в зависимости от возможностей СКЗИ по изменению дизайна экрана сбора энтропии.

- <a id="p100830"></a>textLabels - массив строк, содержащий тексты для замены надписей;
- <a id="p100831"></a>backgroundColor - строка, содержащая шестнадцатеричный код цвета замены для фона;
- <a id="p100832"></a>controlColor - строка, содержащая шестнадцатеричный код цвета замены для элементов управления.

<a id="p100833"></a>**Выходные данные**
<a id="p100834"></a>**- result - строка, в случае успеха возвращает код "ОК".**

<a id="p100835"></a>Требования
1. <a id="p100836"></a>Вызвать соответствующую функцию СКЗИ для адаптации дизайна экрана работы с БДСЧ. На вход передать полученные параметры.
2. <a id="p100837"></a>Вернуть "ОК".
3. <a id="p100838"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


##### <a id="p100839"></a>3.2.3 Класс Operations

<a id="p100840"></a>**Класс Operations содержит криптографические методы ПМ.**


###### <a id="p100841"></a>3.2.3.1 Общие требования к криптографическим методам

<a id="p100842"></a>Все методы должны прерывать выполнение и возвращать код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296), если:
- <a id="p100843"></a>отсутствует инициализированное хранилище СКЗИ для полученного cryptContext;
- <a id="p100844"></a>пароль хранилища неверный;
- <a id="p100845"></a>целостность файлов или ресурсов МП нарушена.


###### <a id="p100846"></a>3.2.3.2 Доступ к криптографическим функциям и защищенному хранилищу в СКЗИ

<a id="p100847"></a>**1. Защищенное хранилище СКЗИ должно быть сегментировано для возможности хранения различных пар криптографических ключей.**
<a id="p100848"></a>**2. СКЗИ должно иметь возможность создания отдельного защищенного хранилища с доступом по паролю.**
3. <a id="p100849"></a>Доступ к определенному сегменту хранилища СКЗИ должен выполняться в соответствии с уникальным идентификатором хранилища и паролем.
4. <a id="p100850"></a>Пароль к хранилищу устанавливается при создании хранилища.
5. <a id="p100851"></a>В рамках одной сессии пользователя после первой инициализации хранилища по идентификатору и паролю доступ к хранилищу криптографических ключей осуществляется по полученному от СКЗИ объекту cryptContext.
6. <a id="p100852"></a>При инициализации хранилища необходимо проверять срок действия пароля при помощи функции СКЗИ. Если срок действия пароля истек, то необходимо вернуть код, соответствующий ошибке "Истек срок действия пароля" (см. [раздел 3.2.6](#p101296)). Доступ к криптографическим функциям не должен предоставляться до тех пор, пока пароль не будет изменен.


###### <a id="p100853"></a>3.2.3.3 Блокировка доступа

<a id="p100854"></a>**Если вызов любого метода СКЗИ для заданного идентификатора хранилища завершается ошибкой, связанной с неверно введенным паролем, ПМ должен:**
<a id="p100855"></a>**1. Прервать выполнение метода.**
2. <a id="p100856"></a>Обновить во внутреннем хранилище информацию о том, сколько раз подряд пароль был введен неверно.
3. <a id="p100857"></a>При достижении 5 неудачных попыток аутентификации необходимо сохранить во внутреннем хранилище время окончания блокировки для данного экземпляра хранилища в UTC, рассчитанное как текущее время + 30 минут. Если ранее время окончания блокировки уже сохранялось, необходимо сохранить новое значение.
4. <a id="p100858"></a>Вернуть код, соответствующий ошибкам "Истек срок действия пароля" или "Неверный пароль" (см. [раздел 3.2.6](#p101296)).
<a id="p100859"></a>Если пароль введен корректно и выполнен вызов метода СКЗИ, то счетчик неуспешных попыток должен сбрасываться.
<a id="p100860"></a>Контроль неудачных попыток и блокировка доступа могут быть реализованы на стороне СКЗИ, если СКЗИ предоставляет такую возможность.
<a id="p100861"></a>Количество неудачных попыток и время блокировки доступа должны настраиваться константами на этапе сборки, храниться в неизменяемых ресурсах и соответствовать правилам использования СКЗИ. Значения параметров могут быть уточнены на этапе разработки ПМ.
<a id="p100862"></a>**Значения по умолчанию:**
<a id="p100863"></a>**- количество неудачных попыток - 5;**
<a id="p100864"></a>**- время блокировки доступа к криптографическим функциям - 30 минут.**


###### <a id="p100865"></a>3.2.3.4 Проверка сертификатов и криптографических ключей

<a id="p100866"></a>При использовании закрытого криптографического ключа СКЗИ должно выполнять проверки срока действия закрытого ключа. Если срок действия ключа истек, необходимо прервать выполнение метода и вернуть соответствующую ошибку.
<a id="p100867"></a>При использовании сертификатов криптографических ключей необходимо получить доступ к ранее сохраненному CAC посредством СКЗИ и проверить наличие сертификата в списке. Если сертификат недействителен, необходимо прервать выполнение метода и вернуть соответствующую ошибку.


###### <a id="p100868"></a>3.2.3.5 Метод saveCertificates (cryptContext, certDate, certStoreType, certFormat)

<a id="p100869"></a>**Метод, сохраняющий сертификаты криптографических ключей.**


###### <a id="p100870"></a>Входные данные

- <a id="p100871"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p100872"></a>certData - структура данных, содержащая массивы байт и псевдонимы, под которыми сертификаты сохраняются в хранилище СКЗИ;
- <a id="p100873"></a>certStoreType - строка, содержащая тип хранилища сертификатов. Перечень возможных значений определяется функциональностью предоставляемой СКЗИ;
<a id="p100874"></a>**- certFormat - строка, содержащая формат сертификатов.**


###### <a id="p100875"></a>Выходные данные

- <a id="p100876"></a>result - строка, в случае успеха возвращается "ОК".


###### <a id="p100877"></a>Требования

1. <a id="p100878"></a>Вызвать функцию СКЗИ для сохранения полученных сертификатов в указанное хранилище:
<a id="p100879"></a>a) если не удалось сохранить сертификат, прервать выполнение метода и вернуть соответствующую причину ошибки;
<a id="p100880"></a>b) при необходимости преобразовать сертификаты в нужный формат.
2. <a id="p100881"></a>Вернуть "ОК".
3. <a id="p100882"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100883"></a>3.2.3.6 Метод saveCrl (crlData, crlFormat)

<a id="p100884"></a>**Метод, сохраняющий CAC.**


###### <a id="p100885"></a>Входные данные

- <a id="p100886"></a>crlData - массив байт, содержащий CAC;
- <a id="p100887"></a>crlFormat - строка, содержащая формат CAC.


###### <a id="p100888"></a>Выходные данные

<a id="p100889"></a>**- result - строка, в случае успеха возвращается "ОК".**


###### <a id="p100890"></a>Требования

1. <a id="p100891"></a>Вызвать функцию СКЗИ для сохранения CAC в хранилище сертификатов СКЗИ:
<a id="p100892"></a>a) если не удалось сохранить CAC, прервать выполнение метода и вернуть соответствующую причину ошибки;
<a id="p100893"></a>b) при необходимости преобразовать CAC в нужный формат.
2. <a id="p100894"></a>Вернуть "ОК".
3. <a id="p100895"></a>В случае других непредвиденных ошибок прервать выполнение метода и вернуть соответствующую причину ошибки.


###### <a id="p100896"></a>3.2.3.7 Метод genKeyPair (cryptContext, lenghtKey)

<a id="p100897"></a>**Метод формирования и сохранения криптографических ключей пользователя.**


###### <a id="p100898"></a>Входные данные

- <a id="p100899"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p100900"></a>lenghtKey - целое число, длина закрытого ключа в битах.


###### <a id="p100901"></a>Выходные данные

<a id="p100902"></a>**- result - строка, в случае успеха возвращается "ОК".**


###### <a id="p100903"></a>Требования

1. <a id="p100904"></a>Вызвать метод СКЗИ для формирования криптографических ключей пользователя:
<a id="p100905"></a>a) в соответствии с указанной длиной;
<a id="p100906"></a>b) ключи должны формироваться в соответствии с [[2]](#p100036), [[20]](#p100056).
2. <a id="p100907"></a>Вызвать метод СКЗИ для сохранения сформированных криптографических ключей пользователя в соответствии с полученным cryptContext:
<a id="p100908"></a>a) пара ключей должна сохраняться в соответствующем защищенном хранилище;
<a id="p100909"></a>b) закрытый ключ должен быть неэкспортируемым.
3. <a id="p100910"></a>Если ключи успешно созданы и сохранены, необходимо возвращать код "ОК".
4. <a id="p100911"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100912"></a>3.2.3.8 Метод genTlsKeyPair (cryptContext, lenghtKey)

<a id="p100913"></a>**Метод формирования и сохранения транспортных криптографических ключей.**


###### <a id="p100914"></a>Входные данные

- <a id="p100915"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p100916"></a>lenghtKey - целое число, длина закрытого ключа в битах.


###### <a id="p100917"></a>Выходные данные

<a id="p100918"></a>**- result - строка, в случае успеха возвращается "ОК".**


###### <a id="p100919"></a>Требования

1. <a id="p100920"></a>Вызвать метод СКЗИ для формирования криптографических ключей:
<a id="p100921"></a>a) в соответствии с указанной длиной;
<a id="p100922"></a>b) ключи должны формироваться в соответствии с документами [[2]](#p100036), [[20]](#p100056).
2. <a id="p100923"></a>Вызвать метод СКЗИ для сохранения сформированных криптографических ключей в соответствии с полученным cryptContext:
<a id="p100924"></a>a) пара ключей должна сохраняться в соответствующем защищенном хранилище;
<a id="p100925"></a>**b) закрытый ключ должен быть неэкспортируемым.**
<a id="p100926"></a>**3. Если ключи успешно созданы и сохранены, необходимо вернуть код "ОК".**
<a id="p100927"></a>**4. В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).**


###### <a id="p100928"></a>3.2.3.9 Метод createCertRequest (cryptContext, certRequestParams, isSubstitution)

<a id="p100929"></a>Метод создания запроса на СКПЭП пользователя.


###### <a id="p100930"></a>Входные данные

<a id="p100931"></a>**- cryptContext - структура данных, содержащая информацию о криптографическом провайдере;**
<a id="p100932"></a>**- certRequestParams - структура данных, содержащая атрибуты и поля для включения в СКПЭП. В случае формирования запроса на СКПЭП с целью его использования для операций с ЦР структура certRequsetParams должна соответствовать документу [[10]](#p100044);**
<a id="p100933"></a>**- isSubstitution - флаг замены существующего сертификата. Значение false, если запрос на сертификат создается первый раз; значение true для запроса на обновление существующего сертификата.**


###### <a id="p100934"></a>Выходные данные

- <a id="p100935"></a>request - массив байт, содержащий созданный запрос в формате PKCS#10/PKCS#7.


###### <a id="p100936"></a>Требования

1. <a id="p100937"></a>Вызвать функции СКЗИ для формирования запроса на СКПЭП пользователя МП:
<a id="p100938"></a>a) в соответствии с полученными входными данными. Криптографическая пара ключей определяется исходя из полученного cryptContext;
<a id="p100939"></a>b) если isSubstitution=true, сформированный запрос подписать старым криптографическим ключом.
2. <a id="p100940"></a>В случае успеха при первом запросе на сертификат вернуть результат в формате PKCS#10. При обновлении сертификата вернуть результат в формате PKCS#7.
3. <a id="p100941"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100942"></a>3.2.3.10 Метод createTlsCertRequest (cryptContext, certRequestParams, isSubstitution)

<a id="p100943"></a>**Метод создания запроса на сертификат транспортного криптографического ключа.**


###### <a id="p100944"></a>Входные данные

- <a id="p100945"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p100946"></a>certRequestParams - структура данных, содержащая атрибуты и поля для включения в сертификат транспортного криптографического ключа. В случае формирования запроса на транспортный сертификат с целью его использования для операций с ЦР структура certRequsetParams должна соответствовать корневому УЦ Безопасности участника ПлЦР и документу [[10]](#p100044);
- <a id="p100947"></a>isSubstitution - флаг замены существующего сертификата. Значение false, если запрос на сертификат создается первый раз; значение true для запроса на обновление существующего сертификата.


###### <a id="p100948"></a>Выходные данные

<a id="p100949"></a>**- request - массив байт, содержащий созданный запрос в формате PKCS#10/PKCS#7.**


###### <a id="p100950"></a>Требования

1. <a id="p100951"></a>Вызвать функции СКЗИ для формирования запроса на сертификат:
<a id="p100952"></a>a) если isSubstitution=true, сформированный запрос подписать старым криптографическим ключом.
2. <a id="p100953"></a>В случае успеха при первом запросе на сертификат вернуть результат в формате PKCS#10. При обновлении сертификата вернуть результат в формате PKCS#7.
3. <a id="p100954"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100955"></a>3.2.3.11 Метод genKeyPairAndRequest (cryptContext, certRequestParams, lenghtKey, isSubstitution)

<a id="p100956"></a>**Единый метод формирования ключей и создания запроса на СКПЭП.**


###### <a id="p100957"></a>Входные данные

- <a id="p100958"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p100959"></a>certRequestParams - структура данных, содержащая атрибуты и поля для включения в СКПЭП. В случае формирования запроса на СКПЭП с целью его использования для операций с ЦР структура certRequsetParams должна соответствовать документу [[10]](#p100044);
- <a id="p100960"></a>lenghtKey - целое число, длина закрытого ключа в битах;
<a id="p100961"></a>**- isSubstitution - флаг замены существующего сертификата. Значение false, если запрос на сертификат создается первый раз; значение true для запроса на обновление существующего сертификата.**


###### <a id="p100962"></a>Выходные данные

- <a id="p100963"></a>request - массив байт, содержащий созданный запрос в формате PKCS#10/PKCS#7.


###### <a id="p100964"></a>Требования

1. <a id="p100965"></a>Последовательно вызвать методы:
<a id="p100966"></a>a) genKeyPair (cryptContext, lenghtKey):
<a id="p100967"></a>i. На вход передать контекст хранилища и длину ключа.
<a id="p100968"></a>b) createCertRequest (cryptContext, certRequestParams, isSubstituion):
<a id="p100969"></a>**i. На вход передать контекст хранилища, набор атрибутов для включения в СКПЭП и флаг замены сертификата.**
2. <a id="p100970"></a>Вернуть сформированный запрос на сертификат в формате PKCS#10 при создании запроса на сертификат впервые или в формате PKCS#7 при обновлении сертификата.
3. <a id="p100971"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций ПМ или СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100972"></a>3.2.3.12 Метод genTlsKeyPairAndRequest (cryptContext, certRequestParams, lenghtKey, isSubstituion)

<a id="p100973"></a>**Единый метод формирования транспортных ключей и создания запроса на сертификат.**


###### <a id="p100974"></a>Входные данные

- <a id="p100975"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p100976"></a>certRequestParams - структура данных, содержащая атрибуты и поля для включения в транспортный сертификат. В случае формирования запроса на транспортный сертификат с целью его использования для операций с ЦР структура certRequsetParams должна соответствовать корневому УЦ Безопасности участника ПлЦР и документу [[10]](#p100044);
- <a id="p100977"></a>lenghtKey - целое число, длина закрытого ключа в битах;
<a id="p100978"></a>**- isSubstitution - флаг замены существующего сертификата. Значение false, если запрос на сертификат создается первый раз; значение true для запроса на обновление существующего сертификата.**


###### <a id="p100979"></a>Выходные данные

- <a id="p100980"></a>request - массив байт, содержащий созданный запрос в формате PKCS#10/PKCS#7.


###### <a id="p100981"></a>Требования

1. <a id="p100982"></a>Последовательно вызвать методы:
<a id="p100983"></a>a) genTlsKeyPair (cryptContext, lenghtKey):
<a id="p100984"></a>i. На вход передать контекст хранилища и длину ключа.
<a id="p100985"></a>b) createTlsCertRequest (cryptContext, certRequestParams, isSubstituion):
<a id="p100986"></a>i. На вход передать контекст хранилища, набор атрибутов для включения в СКПЭП и флаг замены сертификата.
2. <a id="p100987"></a>В случае успеха при первом запросе на сертификат вернуть результат в формате PKCS#10. При обновлении сертификата вернуть результат в формате PKCS#7.
3. <a id="p100988"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций ПМ или СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p100989"></a>3.2.3.13 Метод createSignature (cryptContext, data, certId, signatureType)

<a id="p100990"></a>Метод подписания исходящих ЭС.


###### <a id="p100991"></a>Входные данные

- <a id="p100992"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p100993"></a>data - массив байт, содержащий ЭС;
- <a id="p100994"></a>certId - строка, идентификатор сертификата подписи;
- <a id="p100995"></a>signatureType - строка, тип операции (возможные типы: CMScert, CMSid).


###### <a id="p100996"></a>Выходные данные

<a id="p100997"></a>**- signature - ЭП типа CMScert либо CMSid, закодированная в base64. Сертификат или идентификатор сертификата включен в структуру подписи.**


###### <a id="p100998"></a>Требования

1. <a id="p100999"></a>Вызвать функцию СКЗИ по формированию ЭП с передачей массива байтов, содержащего ЭС:
<a id="p101000"></a>a) ЭП должна формироваться в соответствии с указанным типом операции и идентификатором сертификата подписи;
<a id="p101001"></a>b) алгоритмы, использующиеся при формировании ЭП, должны соответствовать [[2]](#p100036), [[20]](#p100056).
2. <a id="p101002"></a>Закодировать ЭП по алгоритму base64. В случае формирования ЭП целью ее использования для операций с ЦР алгоритмы кодирования должны соответствовать документам [[11]](#p100047).
3. <a id="p101003"></a>В случае успешного выполнения вызова метода вернуть сформированную ЭП.
4. <a id="p101004"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101005"></a>3.2.3.14 Метод createRawSignature (cryptContext, data, certId)

<a id="p101006"></a>**Метод подписания транзакционного сообщения.**


###### <a id="p101007"></a>Входные данные

- <a id="p101008"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p101009"></a>data - массив байт, содержащий ЭС;
- <a id="p101010"></a>certId - строка, идентификатор сертификата подписи.


###### <a id="p101011"></a>Выходные данные

<a id="p101012"></a>**- signature - массив байт, который содержит подпись ЭС сообщения типа RAW, закодированную в base64.**


###### <a id="p101013"></a>Требования

1. <a id="p101014"></a>Вызвать функцию СКЗИ по формированию ЭП с передачей массива байтов, содержащего ЭС:
<a id="p101015"></a>a) ЭП должна формироваться в соответствии с указанным типом операции и идентификатором сертификата подписи;
<a id="p101016"></a>b) алгоритмы, использующиеся при формировании ЭП, должны соответствовать [[2]](#p100036), [[20]](#p100056).
2. <a id="p101017"></a>Если функции СКЗИ возвращают ЭП в формате big-endian, то данный массив байт инвертировать в формат little-endian.
3. <a id="p101018"></a>Закодировать ЭП по алгоритму base64. В случае формирования ЭП целью ее использования для операций с ЦР алгоритмы кодирования должны соответствовать документам [[11]](#p100047).
4. <a id="p101019"></a>В случае успешного выполнения вызова метода вернуть ЭП типа RAW.
5. <a id="p101020"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101021"></a>3.2.3.15 Метод encryptData (cryptContext, data, certIds, certFormat, certPattern)

<a id="p101022"></a>Метод зашифрования исходящих ЭС.


###### <a id="p101023"></a>Входные данные

<a id="p101024"></a>**- cryptContext - структура данных, содержащая информацию о криптографическом провайдере;**
<a id="p101025"></a>**- data - массив байт, содержащий ЭС;**
- <a id="p101026"></a>certIds - массив сертификатов получателя в формате X509 (необязательный параметр);
- <a id="p101027"></a>certFomat - строка, формат сертификатов (необязательный параметр);
- <a id="p101028"></a>certPattern - шаблон поиска сертификата, содержащий массив пар ключ - значение. В качестве ключа необходимо указать название поля, по которому будет осуществляться поиск, в качестве значения - содержимое поля (необязательный параметр).

<a id="p101029"></a>**Выходные данные:**
<a id="p101030"></a>**- encryptedData - строка, содержащая массив байт зашифрованных сообщений.**

<a id="p101031"></a>Требования
1. <a id="p101032"></a>Во входных данных передать массив и формат сертификатов, или шаблон для поиска сертификатов.
2. <a id="p101033"></a>Выполнить сжатие полученного массива байт ЭС. В случае использования ЭП для операций с ЦР алгоритмы сжатия должны соответствовать документам [[11]](#p100047).
3. <a id="p101034"></a>Вызвать функцию СКЗИ по зашифрованию ЭС с передачей массива байтов, содержащего ЭС:
<a id="p101035"></a>a) зашифрование должно выполняться с использованием полученных сертификатов получателя;
<a id="p101036"></a>**b) если получен шаблон для поиска сертификата, извлечь сертификат с использованием соответствующей функции СКЗИ по заданному шаблону поиска;**
<a id="p101037"></a>c) алгоритмы, использующиеся при зашифровывании, должны соответствовать [[3]](#p100037), [[21]](#p100057), [[22]](#p100058), [[23]](#p100059).
4. <a id="p101038"></a>Закодировать зашифрованное сжатое ЭС по алгоритму base64. В случае формирования ЭП с целью ее использования для операций с ЦР алгоритмы кодирования должны соответствовать документам [[11]](#p100047).
5. <a id="p101039"></a>В случае успешного выполнения вызова метода вернуть массив байт зашифрованного сообщения.
6. <a id="p101040"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101041"></a>3.2.3.16 Метод verifyRawSignature (cryptContext, data, signature, certRawId)

<a id="p101042"></a>**Метод проверки подписи с типом RAW.**

<a id="p101043"></a>Входные данные
- <a id="p101044"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p101045"></a>data - массив байт, содержащий сообщение;
- <a id="p101046"></a>signature - массив байт, содержащий ЭП типа RAW для сообщения из data;
- <a id="p101047"></a>certRawId - строка, содержащая идентификатор сертификата для проверки ЭП типа RAW.


###### <a id="p101048"></a>Выходные данные

- <a id="p101049"></a>result - строка, в случае успеха возвращает код "ОК", в случае неуспеха возвращает код "INVALID".


###### <a id="p101050"></a>Требования

<a id="p101051"></a>**1. С помощью функции СКЗИ найти сертификат в хранилище СКЗИ в соответствии с полученным cryptContext и certRawId.**
<a id="p101052"></a>**2. Вызвать функцию СКЗИ для проверки ЭП:**
<a id="p101053"></a>a) проверку необходимо выполнять в соответствии с типом подписи RAW и извлеченным сертификатом;
<a id="p101054"></a>b) алгоритмы, использующиеся при вычислении значения ЭП, должны соответствовать [[2]](#p100036), [[20]](#p100056).
3. <a id="p101055"></a>В случае успешной проверки ЭП вернуть код "ОК". Если ЭП неверная, вернуть код "INVALID".
4. <a id="p101056"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или если получены ошибки при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101057"></a>3.2.3.17 Метод verifySignature (cryptContext, data, signature, signatureType)

<a id="p101058"></a>**Метод проверки подписи входящих ЭС.**


###### <a id="p101059"></a>Входные данные

- <a id="p101060"></a>cryptContext - массив объектов, содержащий информацию о используемых криптографических провайдерах;
- <a id="p101061"></a>signature - массив строк, содержащий массивы байт ЭП, закодированные в base64. Может быть передано несколько ЭП;
- <a id="p101062"></a>data - массив байт, содержащий расшифрованное, декодированное и разжатое ЭС;
- <a id="p101063"></a>signatureType - массив строк, содержащий типы подписей (возможные значения: CMScert, CMSid).


###### <a id="p101064"></a>Выходные данные

<a id="p101065"></a>**- result - строка, в случае успеха возвращает код "ОК", в случае неуспеха возвращает код "INVALID";**
<a id="p101066"></a>**- certIds - массив строк, содержащий идентификаторы сертификатов, с помощью которых была выполнена проверка ЭП. Необязательный параметр.**


###### <a id="p101067"></a>Требования

1. <a id="p101068"></a>Декодировать полученные ЭП по алгоритму base64. В случае использования ЭП для операций с ЦР алгоритмы декодирования должны соответствовать документам [[11]](#p100047).
2. <a id="p101069"></a>Если передано несколько ЭП, проверить все полученные ЭП.
<a id="p101070"></a>**3. Для типа CMScert из входящего сообщения извлечь сертификат отправителя, содержащий открытый ключ и данные.**
4. <a id="p101071"></a>Для типа CMSid из входящего сообщения извлечь данные и идентификатор сертификата открытого ключа. Посредством функции СКЗИ выполнить поиск сертификата в хранилище СКЗИ в соответствии с полученным cryptContext.
5. <a id="p101072"></a>Вызвать функцию СКЗИ для проверки каждой ЭП по отдельности:
<a id="p101073"></a>a) проверку выполнить в соответствии с указанным типом подписи и извлеченным открытым ключом;
<a id="p101074"></a>b) алгоритмы, использующиеся при вычислении значения ЭП, должны соответствовать [[2]](#p100036), [[20]](#p100056).
7. <a id="p101075"></a>В случае успешного выполнения проверки всех ЭП вернуть код "ОК". Если хотя бы одна ЭП неверная, вернуть код "INVALID".
8. <a id="p101076"></a>Если реализаций функций СКЗИ возвращает id сертификатов проверки ЭП, то вернуть их в параметре certIds.
9. <a id="p101077"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий, а также если число ЭП не соответствует количеству переданных типов ЭП или получены ошибки при вызове функций СКЗИ, прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101078"></a>3.2.3.18 Метод decryptData (cryptContext, data)

<a id="p101079"></a>Метод расшифрования входящих ЭС.


###### <a id="p101080"></a>Входные данные

<a id="p101081"></a>**- cryptContext - структура данных, содержащая информацию о криптографическом провайдере;**
<a id="p101082"></a>**- data - строка, содержащая зашифрованный массив байт.**


###### <a id="p101083"></a>Выходные данные

- <a id="p101084"></a>decryptedData - строка, содержащая массив байт расшифрованного ЭС.


###### <a id="p101085"></a>Требования

<a id="p101086"></a>**1. Декодировать полученное ЭС по алгоритму base64 в соответствии с [[11]](#p100047).**
2. <a id="p101087"></a>Вызвать методы СКЗИ для расшифровки полученного массива байт:
<a id="p101088"></a>a) алгоритмы, использующиеся для зашифрования, должны соответствовать [[3]](#p100037), [[21]](#p100057), [[22]](#p100058), [[23]](#p100059).
3. <a id="p101089"></a>Восстановить исходный объем байт, расшифрованный на [шаге 2](#p101087). В случае использования ЭП для операций с ЦР используемые алгоритмы должны соответствовать документам [[11]](#p100047).
4. <a id="p101090"></a>В случае успешного вызова метода вернуть массив байт расшифрованного сообщения.
5. <a id="p101091"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101092"></a>3.2.3.19 Метод decryptAndVerifyData (cryptContext, data, signature, signatureType)

<a id="p101093"></a>**Единый метод проверки ЭС.**


###### <a id="p101094"></a>Входные данные

- <a id="p101095"></a>cryptContext - массив объектов, содержащий информацию о используемых криптографических провайдерах;
<a id="p101096"></a>**- data - строка, содержащая массив байт зашифрованного, закодированного, сжатого ЭС;**
<a id="p101097"></a>**- signature - массив строк, содержащий массивы байт ЭП;**
<a id="p101098"></a>**- signatureType - массив строк, содержащий типы подписей (возможные значения: CMScert, CMSid).**

<a id="p101099"></a>Выходные данные:
- <a id="p101100"></a>result - строка, в случае успеха возвращает "ОК", в случае неуспеха возвращает "INVALID";
- <a id="p101101"></a>decryptedData - строка, содержащая массив байт расшифрованного ЭС. Возвращается только в случае успешной проверки ЭП.

<a id="p101102"></a>Требования
1. <a id="p101103"></a>Последовательно вызвать методы:
<a id="p101104"></a>a) decryptData (cryptContext, data):
<a id="p101105"></a>**i. На вход передать контекст хранилища и массив байт зашифрованного сообщения.**
<a id="p101106"></a>**b) verifySignature (cryptContext, data, signature, signatureType):**
<a id="p101107"></a>i. На вход передать массив контекстов хранилищ, разжатое ЭС, набор ЭП, типы подписей.
2. <a id="p101108"></a>Если при выполнении метода verifySignature получен код "INVALID", вернуть код "INVALID".
3. <a id="p101109"></a>Если при выполнении метода verifySignature получен код "OK", вернуть код "OK" и расшифрованное разжатое ЭС в параметре decryptedData.
4. <a id="p101110"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101111"></a>3.2.3.20 Метод signatureAndEncryptData (cryptContext, data, certId, signatureType, certIds, certFormat, certPattern)

<a id="p101112"></a>**Единый метод формирования ЭС.**

<a id="p101113"></a>Входные данные
- <a id="p101114"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p101115"></a>data - массив байт, содержащий ЭС;
- <a id="p101116"></a>certId - строка, идентификатор сертификата подписи;
- <a id="p101117"></a>signatureType - строка, тип подписи (возможные значения: CMScert, CMSid);
<a id="p101118"></a>**- certIds - массив байт, содержащий сертификаты получателя в формате X.509 (необязательный параметр);**
<a id="p101119"></a>**- certFormat - строка формат сертификатов (необязательный параметр);**
<a id="p101120"></a>**- certPattern - шаблон поиска сертификата получателя, содержащий массив пар ключ - значение. В ключе указать название поля, по которому будет осуществляться поиск, в значении - содержимое поля (необязательный параметр).**


###### <a id="p101121"></a>Выходные данные

- <a id="p101122"></a>result - массив байт, содержащий зашифрованное ЭС, закодированное по алгоритму base64.
- <a id="p101123"></a>signature - массив байт, содержащий сформированную ЭП, закодированную по алгоритму base64.


###### <a id="p101124"></a>Требования

1. <a id="p101125"></a>Необходимо последовательно вызвать методы:
<a id="p101126"></a>a) createSignature (cryptContext, data, certId, signatureType):
<a id="p101127"></a>i. На вход передать контекст хранилища, массив байт ЭС, тип подписи, идентификатор сертификата подписи.
<a id="p101128"></a>a) encryptData (cryptContext, data, certIds, certFormat, certPattern):
<a id="p101129"></a>i. На вход передать контекст хранилища, массив байт сжатого ЭС, сертификат получателя и формат сертификата либо шаблон для поиска сертификата.
2. <a id="p101130"></a>При успешном выполнении методов вернуть:
- <a id="p101131"></a>массив байт, содержащий зашифрованное сообщение, закодированное по алгоритму base64;
- <a id="p101132"></a>массив байт, содержащий ЭП, закодированную по алгоритму base64.
3. <a id="p101133"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101134"></a>3.2.3.21 Метод deleteStore (storeId)

<a id="p101135"></a>**Метод удаления данных сегмента хранилища СКЗИ.**


###### <a id="p101136"></a>Входные данные

- <a id="p101137"></a>storeId - строка, идентификатор хранилища СКЗИ.


###### <a id="p101138"></a>Выходные данные

<a id="p101139"></a>**- result - строка, в случае успеха возвращает "ОК".**


###### <a id="p101140"></a>Требования

1. <a id="p101141"></a>Вызвать функции СКЗИ, отвечающие за гарантированное удаление сегмента хранилища СКЗИ и всех сохраненных в ней данных. Уничтожение ключевой информации должно осуществляться в соответствии с документом [[32]](#p100070).
2. <a id="p101142"></a>После успешного выполнения функций удалить данные из внутреннего хранилища.
3. <a id="p101143"></a>Вернуть "ОК".
4. <a id="p101144"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101145"></a>3.2.3.22 Метод deleteCert (cryptoContext, certPattern)

<a id="p101146"></a>Метод удаления сертификатов ключей пользователя.


###### <a id="p101147"></a>Входные данные

- <a id="p101148"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p101149"></a>certPattern - шаблон поиска сертификатов, содержащий массив пар ключ - значение.


###### <a id="p101150"></a>Выходные данные

<a id="p101151"></a>**- result - строка, в случае успеха возвращает "ОК".**


###### <a id="p101152"></a>Требования

1. <a id="p101153"></a>Вызвать функцию СКЗИ для получения сертификатов в соответствии с полученным шаблоном поиска и контекстом хранилища.
2. <a id="p101154"></a>Вызвать функцию СКЗИ для удаления найденных сертификатов.
<a id="p101155"></a>**3. После успешного выполнения функций вернуть "ОК".**
<a id="p101156"></a>**4. В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).**


###### <a id="p101157"></a>3.2.3.23 Метод getCert (cryptoContext, certPattern, certFormat)

<a id="p101158"></a>Метод извлечения сертификатов ключей пользователя.


###### <a id="p101159"></a>Входные данные

- <a id="p101160"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p101161"></a>certPattern - шаблон поиска сертификатов, содержащий массив пар ключ - значение;
- <a id="p101162"></a>certFormat - формат сертификатов.


###### <a id="p101163"></a>Выходные данные

- <a id="p101164"></a>certs - массив байт, содержащий найденные сертификаты в требуемом формате.


###### <a id="p101165"></a>Требования

1. <a id="p101166"></a>Вызвать функцию СКЗИ для получения сертификатов в соответствии с полученным шаблоном поиска и контекстом хранилища.
2. <a id="p101167"></a>Вызвать функцию СКЗИ для извлечения найденных сертификатов.
3. <a id="p101168"></a>После успешного выполнения функций вернуть массив байт, содержащий извлеченные сертификаты, при необходимости преобразованные в нужный формат.
4. <a id="p101169"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101170"></a>3.2.3.24 Метод getExpirationTimeCert (cryptoContext, certId)

<a id="p101171"></a>**Метод получения срока действия сертификата.**


###### <a id="p101172"></a>Входные данные

- <a id="p101173"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p101174"></a>certId - строка, идентификатор сертификата.


###### <a id="p101175"></a>Выходные данные

<a id="p101176"></a>**- time - datatime, дата и время истечения срока действия найденного сертификата.**


###### <a id="p101177"></a>Требования

1. <a id="p101178"></a>Вызвать функцию СКЗИ для получения времени истечения срока действия сертификата в соответствии с полученным идентификатором и контекстом хранилища.
2. <a id="p101179"></a>После успешного выполнения функции вернуть полученную дату и время истечения срока действия сертификата.
3. <a id="p101180"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


##### <a id="p101181"></a>3.2.4 Класс GostTlsSocket

<a id="p101182"></a>**Класс содержит методы для работы с сокетами, предназначенными для создания соединений для передачи данных, защищенных по протоколу ГОСТ TLS.**
<a id="p101183"></a>**Реализация методов класса может различаться в зависимости от особенностей среды функционирования ПМ и СКЗИ входящего в состав ПМ.**


###### <a id="p101184"></a>3.2.4.1 Метод getGostTlsSocket (cryptoContext, clientGostTlsCertId, result)

<a id="p101185"></a>Метод создания сокета, предназначенного для установки защищенного по протоколу ГОСТ TLS соединения.


###### <a id="p101186"></a>Входные данные

- <a id="p101187"></a>cryptContext - структура данных, содержащая информацию о криптографическом провайдере;
- <a id="p101188"></a>clientGostTlsCertId - строка, идентификатор клиентского ГОСТ TLS сертификата. Опционально. Передается если необходимо установить двухстороннее ГОСТ TLS соединение;
- <a id="p101189"></a>result - ссылка на строку для возврата результата исполнения метода.


###### <a id="p101190"></a>Выходные данные

<a id="p101191"></a>**- В случае успеха метод возвращает ссылку на экземпляр класса GostTlsSocket.**
<a id="p101192"></a>**- В случае ошибки возвращается null и код ошибки в строке result.**


###### <a id="p101193"></a>Требования

1. <a id="p101194"></a>Создать экземпляр класса GostTlsSocket. Объект должен содержать:
- <a id="p101195"></a>cryptContext;
<a id="p101196"></a>**- ссылку на хранилище корневых сертификатов;**
<a id="p101197"></a>**- clientGostTlsCertId (опционально, если передан во входных данных).**
<a id="p101198"></a>**2. Если при создании объекта возникла ошибка, освободить все ресурсы, задействованные выполнением данного запроса, вернуть null и записать в строку result код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).**


###### <a id="p101199"></a>3.2.4.2 Метод GostTlsSocket connect (host, port, waitForConnected)

<a id="p101200"></a>Метод экземпляра класса GostTlsSocket. Метод используется для открытия защищенного подключения по адресу и порту, указанным в параметрах вызова метода.


###### <a id="p101201"></a>Входные данные

<a id="p101202"></a>**- host - строка, host для подключения сокета;**
<a id="p101203"></a>**- port - натуральное число, порт для подключения сокета;**
<a id="p101204"></a>**- waitForConnected - натуральное число, время ожидания подключения сокета в мс. Передается опционально, значение по умолчанию - 30000 мс.**


###### <a id="p101205"></a>Выходные данные

- <a id="p101206"></a>result - строка, в случае успеха возвращает "ОК".


###### <a id="p101207"></a>Требования

<a id="p101208"></a>**1. Если для данного сокета существует не закрытое соединение, прервать обработку вызова, вернуть код ошибки "Сокет уже используется".**
<a id="p101209"></a>**2. Получить IP-адрес по хосту. В случае ошибки прервать обработку вызова, вернуть код ошибки "Хост неизвестен".**
3. <a id="p101210"></a>При открытии подключения ПМ должен выполнить взаимодействие с сервером по указанным в параметрах вызова адресу и порту по протоколу handshake согласно требованиям документов [[4]](#p100038) или [[5]](#p100039).
4. <a id="p101211"></a>Для выполнения проверки статуса отзыва сертификата транспортного (TLS) криптографического ключа, генерации эфемерной ключевой пары и создания сессионного ключа ПМ должен вызвать соответствующие функции СКЗИ.
5. <a id="p101212"></a>Если ПМ не поддерживает версию протокола ГОСТ TLS сервера, вернуть код ошибки "Не поддерживаемая версия протокола TLS".
6. <a id="p101213"></a>Если при получении сессионного ключа возникла ошибка, вернуть код ошибки "Ошибка получения сессионного ключа".
7. <a id="p101214"></a>В случае превышения времени ожидания подключения сокета значения входящего параметра waitForConnected вернуть код ошибки "Превышен таймаут ожидания подключения".
8. <a id="p101215"></a>В случае неуспешного выполнения какого-либо из перечисленных выше действий или получения ошибок при вызове функций СКЗИ прервать выполнение метода и вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101216"></a>3.2.4.3 Метод GostTlsSocket close (waitForDisconnected)

<a id="p101217"></a>**Метод экземпляра класса GostTlsSocket. Метод предназначен для закрытия защищенного подключения.**


###### <a id="p101218"></a>Входные данные

- <a id="p101219"></a>waitForDisconnected - натуральное число, время ожидания закрытия соединения в мс. Передается опционально, значение по умолчанию - 30000 мс.


###### <a id="p101220"></a>Выходные данные

<a id="p101221"></a>**- result - строка, в случае успеха возвращает "ОК".**


###### <a id="p101222"></a>Требования

1. <a id="p101223"></a>Выполнить закрытие соединения в соответствии с требованиями документов [[4]](#p100038) или [[5]](#p100039).
2. <a id="p101224"></a>В случае превышения времени ожидания закрытия соединения значения входящего параметра waitForDisconnected вернуть код ошибки "Превышен таймаут закрытия соединения".
3. <a id="p101225"></a>Освободить все задействованные данным соединением ресурсы.
4. <a id="p101226"></a>В случае возникновения ошибок при выполнении каких-либо из перечисленных выше действий прервать выполнение метода, вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).


###### <a id="p101227"></a>3.2.4.4 Метод GostTlsSocket write (data, waitForByteWritten)

<a id="p101228"></a>**Метод экземпляра класса GostTlsSocket. Метод предназначен для передачи данных в открытое защищенное по протоколу ГОСТ TLS соединение.**


###### <a id="p101229"></a>Входные данные

- <a id="p101230"></a>data - массив байт, передаваемых в сокет;
- <a id="p101231"></a>waitForByteWritten - натуральное число, время ожидания записи в соединение минимум 1 байта в мс. Передается опционально, значение по умолчанию - 30000 мс.


###### <a id="p101232"></a>Выходные данные

<a id="p101233"></a>**- result - строка, в случае успеха возвращает "ОК".**


###### <a id="p101234"></a>Требования

<a id="p101235"></a>Метод должен поддерживать режим асинхронной записи.
1. <a id="p101236"></a>Выполнить передачу массива данных data с использованием методов криптографической защиты, предоставляемых СКЗИ в составе ПМ, в соответствии с требованиями документов [[4]](#p100038) или [[5]](#p100039).
2. <a id="p101237"></a>В случае превышения времени записи блока передаваемых данных параметра waitForByteWritten, вернуть код ошибки "Превышен таймаут записи данных".
3. <a id="p101238"></a>В случае возникновения ошибок при выполнении каких-либо из перечисленных выше действий прервать выполнение метода, вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).
4. <a id="p101239"></a>В случае разрыва соединения вернуть код ошибки "Соединение потеряно".


###### <a id="p101240"></a>3.2.4.5 Метод GostTlsSocket read (buf, bufSize, waitForByteRead)

<a id="p101241"></a>**Метод вызывается для экземпляра класса GostTlsSocket и используется для чтения данных из защищенного ГОСТ TLS соединения.**


###### <a id="p101242"></a>Входные данные

<a id="p101243"></a>**- buf - буфер для данных, получаемых из защищенного ГОСТ TLS соединения.**
<a id="p101244"></a>**- bufSize - натуральное число, размер буфера buf в байтах.**
<a id="p101245"></a>**- waitForByteRead - натуральное число, время ожидания чтения данных из соединения в мс. Передается опционально, значение по умолчанию - 30000 мс.**


###### <a id="p101246"></a>Выходные данные

- <a id="p101247"></a>result - строка, в случае успеха возвращает "ОК".


###### <a id="p101248"></a>Требования

<a id="p101249"></a>**Метод должен поддерживать режим асинхронного чтения.**
<a id="p101250"></a>**1. Выполнить прием блока данных в массив buf с использованием методов криптографической защиты, предоставляемых СКЗИ в составе ПМ, в соответствии с требованиями документов [[4]](#p100038) или [[5]](#p100039).**
2. <a id="p101251"></a>В случае превышения времени ожидания данных для чтения параметра waitForByteRead, вернуть код ошибки "Превышен таймаут ожидания данных".
3. <a id="p101252"></a>В случае возникновения ошибок при выполнении каких-либо из перечисленных выше действий прервать выполнение метода, вернуть код ошибки в соответствии с описанием в [разделе 3.2.6](#p101296).
4. <a id="p101253"></a>В случае разрыва соединения вернуть код ошибки "Соединение потеряно".


###### <a id="p101254"></a>3.2.4.6 Метод GostTlsSocket getStatus ()

<a id="p101255"></a>**Метод вызывается для экземпляра класса GostTlsSocket и используется для получения сведения о его состоянии.**

<a id="p101256"></a>Выходные данные
- <a id="p101257"></a>result - строка, возможные значения:
- <a id="p101258"></a>"Готов к использованию";
- <a id="p101259"></a>"Соединен с <host>:<port>".

<a id="p101260"></a>**Требования**
<a id="p101261"></a>**Метод должен вернуть состояние сокета на основании данных ПМ без попытки отправки запроса проверки соединения к серверу.**


###### <a id="p101262"></a>3.2.4.7 Метод GostTlsSocket getConnectionStatus (waitForConnected)

<a id="p101263"></a>Метод вызывается для экземпляра класса GostTlsSocket и используется для уточнения статуса соединения сокетов в состоянии "Соединен с <host>:<port>".


###### <a id="p101264"></a>Входные данные

<a id="p101265"></a>**- waitForConnected - натуральное число, время ожидания ответа от сервиса в мс. Передается опционально, значение по умолчанию - 30000 мс.**


###### <a id="p101266"></a>Выходные данные

- <a id="p101267"></a>result - строка, возможные значения:
- <a id="p101268"></a>"Соединен";
<a id="p101269"></a>**- "Не соединен";**
<a id="p101270"></a>**- "Превышен таймаут ожидания ответа от сервера";**
<a id="p101271"></a>**- "Отсутствует техническая возможность проверки соединения".**


###### <a id="p101272"></a>Требования

1. <a id="p101273"></a>В случае если метод вызывается для сокета, находящегося в состоянии "Готов к использованию", вернуть "Не соединен".
2. <a id="p101274"></a>В случае если на основании данных ПМ сокет находится в состоянии "Соединен" и имеется техническая возможность проверки статуса соединения, метод должен инициировать проверку состояния соединения и вернуть ее результат в строке result. В случае если при проверке состояния соединения превышен лимит ожидания ответа сервера, вернуть "Превышен таймаут ожидания ответа от сервера" в строке result.
3. <a id="p101275"></a>В случае если на основании данных ПМ сокет находится в состоянии "Соединен" и отсутствует техническая возможность проверки статуса соединения, вернуть "Отсутствует техническая возможность проверки соединения" в строке result.
<a id="p101276"></a>Сведения, полученные в результате проверки соединения с сервером, носят информативный характер и не влияют на статус сокета. При получении ответа "Не соединен" МП должно вызвать метод GostTlsSocket close (waitForDisconnected) для освобождения ресурсов, которые были использованы ранее открытым соединением, и (при необходимости) повторного использования сокета.


##### <a id="p101277"></a>3.2.4.8 Уничтожение экземпляра класса

<a id="p101278"></a>**Класс должен содержать метод, вызываемый автоматически в момент уничтожения экземпляра класса. Данный метод должен выполнять проверку наличия и инициировать закрытие открытого ГОСТ TLS соединения.**


#### <a id="p101279"></a>3.2.5 Сервисные функции

<a id="p101280"></a>В ПМ должен быть реализован класс, содержащий сервисные функции. Требования к функциям этого класса приведены в данном разделе.


##### <a id="p101281"></a>3.2.5.1 Удаление данных из хранилища ПМ

<a id="p101282"></a>**Метод должен удалять сохраненные данные ПМ на уровне файловой системы ОС в пределах пространства, выделенного для МП.**


##### <a id="p101283"></a>3.2.5.2 Сбор информации о взаимодействии с ПМ

<a id="p101284"></a>При внешнем вызове функций ПМ необходимо сохранять соответствующую информацию во внутреннее хранилище. В том числе если результат вызова функции был неуспешным.
<a id="p101285"></a>Список данных, которые необходимо сохранять:
- <a id="p101286"></a>id - строка, уникальный идентификатор действия;
- <a id="p101287"></a>createdAt - Unix Timestamp, дата и время действия;
- <a id="p101288"></a>functionName - строка, название вызванного метода;
- <a id="p101289"></a>result - строка, результат выполнения функции (SUCCESS, FAIL);
<a id="p101290"></a>**- inputData - строка, список входных данных, может быть пустым;**
<a id="p101291"></a>**- outputData - строка, список выходных данных, может быть пустым;**
<a id="p101292"></a>**- storeId - строка, идентификатор хранилища СКЗИ, может быть пустым;**
- <a id="p101293"></a>errorCode - целое число, код ошибки, может быть пустым;
- <a id="p101294"></a>errorMessage - строка, описание ошибки, может быть пустым
<a id="p101295"></a>Значение cryptContext, входные и выходные данные для криптографических функций не сохраняются. Описание требований к хранению данных см. в пункте 3.4.


#### <a id="p101296"></a>3.2.6 Список ошибок

<a id="p101297"></a>**В Таблице 7 приведен минимальный список исключений, при получении которых необходимо прерывать выполнение метода, возвращать код и описание ошибки.**

<a id="p101298"></a>Таблица 7 - Список ошибок


| <a id="p101299"></a>Код ошибки | <a id="p101300"></a>Описание ошибки |
| --- | --- |
| <a id="p101301"></a>1 | <a id="p101302"></a>Не удалось проверить целостность МП/ПМ |
| <a id="p101303"></a>2 | <a id="p101304"></a>Не удалось успешно инициализировать ПМ |
| <a id="p101305"></a>3 | <a id="p101306"></a>Не удалось успешно инициализировать СКЗИ |
| <a id="p101307"></a>4 | <a id="p101308"></a>Не удалось удалить экземпляр хранилища в СКЗИ |
| <a id="p101309"></a>5 | <a id="p101310"></a>Не удалось изменить пароль |
| <a id="p101311"></a>6 | <a id="p101312"></a>Не удалось удалить хранилище |
| <a id="p101313"></a>7 | <a id="p101314"></a>Не удалось создать хранилище |
| <a id="p101315"></a>8 | <a id="p101316"></a>Не удалось выполнить вызов метода СКЗИ |
| <a id="p101317"></a>9 | <a id="p101318"></a>Непредвиденная ошибка в работе СКЗИ |
| <a id="p101319"></a>10 | <a id="p101320"></a>Истек срок действия сертификата пользователя |
| <a id="p101321"></a>11 | <a id="p101322"></a>Не удалось обработать входящие параметры |
| <a id="p101323"></a>12 | <a id="p101324"></a>Недопустимые значения входных данных |
| <a id="p101325"></a>13 | <a id="p101326"></a>Не удалось сохранить сертификат пользователя |
| <a id="p101327"></a>14 | <a id="p101328"></a>Не удалось сохранить САС |
| <a id="p101329"></a>15 | <a id="p101330"></a>Хранилище не найдено |
| <a id="p101331"></a>16 | <a id="p101332"></a>Неверный пароль |
| <a id="p101333"></a>17 | <a id="p101334"></a>Время действия сессии истекло |
| <a id="p101335"></a>18 | <a id="p101336"></a>Требуется инициализация ПМ |
| <a id="p101337"></a>19 | <a id="p101338"></a>Хранилище заблокировано |
| <a id="p101339"></a>20 | <a id="p101340"></a>Срок действия криптографического ключа истек |
| <a id="p101341"></a>21 | <a id="p101342"></a>Сертификат пользователя аннулирован |
| <a id="p101343"></a>22 | <a id="p101344"></a>Отсутствует пара криптографических ключей |
| <a id="p101345"></a>23 | <a id="p101346"></a>Отсутствует пара транспортных криптографических ключей |
| <a id="p101347"></a>24 | <a id="p101348"></a>Не удалось сформировать запрос на сертификат |
| <a id="p101349"></a>25 | <a id="p101350"></a>Не удалось сформировать запрос на транспортный сертификат |
| <a id="p101351"></a>26 | <a id="p101352"></a>Неверный пароль от хранилища |
| <a id="p101353"></a>27 | <a id="p101354"></a>Не удалось сформировать ЭП |
| <a id="p101355"></a>28 | <a id="p101356"></a>Не удалось найти сертификат пользователя |
| <a id="p101357"></a>29 | <a id="p101358"></a>Не удалось проверить ЭП |
| <a id="p101359"></a>30 | <a id="p101360"></a>Не удалось расшифровать ЭС |
| <a id="p101361"></a>31 | <a id="p101362"></a>Не удалось зашифровать ЭС |
| <a id="p101363"></a>32 | <a id="p101364"></a>Транспортный сертификат аннулирован |
| <a id="p101365"></a>33 | <a id="p101366"></a>Не удалось найти сертификат для расшифрования |
| <a id="p101367"></a>34 | <a id="p101368"></a>Не удалось удалить сертификат пользователя |
| <a id="p101369"></a>35 | <a id="p101370"></a>Серверный сертификат недействителен |
| <a id="p101371"></a>36 | <a id="p101372"></a>Истек срок действия транспортного сертификата |
| <a id="p101373"></a>37 | <a id="p101374"></a>Не удалось установить соединение |
| <a id="p101375"></a>38 | <a id="p101376"></a>Невозможно вызвать криптографические функции |
| <a id="p101377"></a>39 | <a id="p101378"></a>Истек срок действия пароля |
| <a id="p101379"></a>40 | <a id="p101380"></a>Не удалось найти лог взаимодействия с ПМ за указанный период |
| <a id="p101381"></a>41 | <a id="p101382"></a>Не удалось сохранить данные |
| <a id="p101383"></a>42 | <a id="p101384"></a>Не удалось сформировать криптографические ключи |
| <a id="p101385"></a>43 | <a id="p101386"></a>Не удалось сохранить криптографические ключи |
| <a id="p101387"></a>44 | <a id="p101388"></a>Проблема с сетевым подключением |
| <a id="p101389"></a>45 | <a id="p101390"></a>Неизвестный сбой |
| <a id="p101391"></a>46 | <a id="p101392"></a>Целостность МП/ПМ нарушена |
| <a id="p101393"></a>47 | <a id="p101394"></a>Не удалось выполнить сбор энтропии |
| <a id="p101395"></a>48 | <a id="p101396"></a>Не удалось получить доступ к хранилищу корневых сертификатов |
| <a id="p101397"></a>49 | <a id="p101398"></a>Не удалось найти транспортный сертификат |
| <a id="p101399"></a>50 | <a id="p101400"></a>Не удалось сохранить транспортный сертификат |
| <a id="p101401"></a>51 | <a id="p101402"></a>Не удалось удалить транспортный сертификат |
| <a id="p101403"></a>52 | <a id="p101404"></a>Ошибка при создании сокета |
| <a id="p101405"></a>53 | <a id="p101406"></a>Хост не известен |
| <a id="p101407"></a>54 | <a id="p101408"></a>Значение параметра port находится вне допустимого диапазона значений |
| <a id="p101409"></a>55 | <a id="p101410"></a>Превышен таймаут ожидания подключения |
| <a id="p101411"></a>56 | <a id="p101412"></a>Соединение потеряно |
| <a id="p101413"></a>57 | <a id="p101414"></a>Превышен таймаут закрытия соединения |
| <a id="p101415"></a>58 | <a id="p101416"></a>Превышен таймаут записи данных |
| <a id="p101417"></a>59 | <a id="p101418"></a>Превышен таймаут ожидания данных |
| <a id="p101419"></a>60 | <a id="p101420"></a>Транспортный сертификат сервера не прошел проверку подлинности |
| <a id="p101421"></a>61 | <a id="p101422"></a>Не поддерживаемая версия протокола TLS |
| <a id="p101423"></a>62 | <a id="p101424"></a>Ошибка получения сессионного ключа |
| <a id="p101425"></a>63 | <a id="p101426"></a>Ошибка подключения к серверу |
| <a id="p101427"></a>64 | <a id="p101428"></a>Ошибка записи данных в сокет |
| <a id="p101429"></a>65 | <a id="p101430"></a>Ошибка чтения данных из сокета |
| <a id="p101431"></a>66 | <a id="p101432"></a>Ошибка зашифрования данных перед записью в сокет |
| <a id="p101433"></a>67 | <a id="p101434"></a>Ошибка дешифрования данных, считанных из сокета |
| <a id="p101435"></a>68 | <a id="p101436"></a>Ошибка проверки целостности данных |
| <a id="p101437"></a>69 | <a id="p101438"></a>Сокет уже используется |
| <a id="p101439"></a>70 | <a id="p101440"></a>Инициализация ПМ уже выполнена |



### <a id="p101441"></a>3.3 Порядок использования ПМ



#### <a id="p101442"></a>3.3.1 Инициализация ПМ

<a id="p101443"></a>Для инициализации ПМ, СКЗИ и выполнения проверки целостности файлов и ресурсов МП необходимо вызывать метод init (filesWithCheckSums). filesWithCheckSums должен содержать эталонные значения хэшей, рассчитанные от файлов и ресурсов МП, целостность которых необходимо проверить, и пути к ним. Хэши должны быть рассчитаны в соответствии с документом [[30]](#p100066).
<a id="p101444"></a>Рекомендуется вызывать данный метод после каждой перезагрузки приложения однократно до выполнения любых вызовов ПМ.
<a id="p101445"></a>Список файлов и ресурсов МП, для которых будет выполнятся контроль целостности, определяется разработчиком МП.


#### <a id="p101446"></a>3.3.2 Работа с криптографическими функциями

<a id="p101447"></a>Для работы с криптографическими функциями:
1. <a id="p101448"></a>МП должно вызвать метод init (filesWithCheckSums).
2. <a id="p101449"></a>МП должно вызвать метод initCryptoContext (storeId, userId):
<a id="p101450"></a>a) МП должно передать уникальный идентификатор хранилища СКЗИ и уникальный идентификатор пользователя МП во входных параметрах функции ПМ;
<a id="p101451"></a>b) требования к формированию идентификаторов зависят от особенностей реализации СКЗИ и ПМ;
<a id="p101452"></a>c) при работе с хранилищем СКЗИ будет запрошена установка/ввод пароля;
<a id="p101453"></a>**d) для каждого пользователя может быть создано несколько защищенных хранилищ с доступом по паролю. Необходимость использования дополнительного усложненного пароля определяется МП в зависимости от вида выполняемой операции;**
<a id="p101454"></a>**e) идентификаторы хранилищ СКЗИ должны быть уникальными для различных пользователей МП и различных сегментов хранилищ одного пользователя;**
<a id="p101455"></a>**f) идентификатор пользователя МП должен быть уникальным;**
<a id="p101456"></a>g) МП определяет какой сегмент хранилища СКЗИ необходимо использовать для выполнения криптографической операции, а также формирует и хранит уникальный идентификатор сегмента хранилища;
<a id="p101457"></a>h) сегмент хранилища СКЗИ для хранения транспортных сертификатов и сертификатов для проверки ЭП определяется разработчиком исходя из особенностей реализации СКЗИ и особенностей ПМ.
3. <a id="p101458"></a>В случае использования МП и ПМ новым пользователем криптографические ключи, не принадлежащие ему, должны удаляться с использованием механизмов СКЗИ по гарантированному уничтожению ключей (подробнее см. в [разделе 3.2.3.22](#p101145)).
<a id="p101459"></a>**4. После успешного создания защищенного сегмента хранилища МП получит от СКЗИ объект cryptContext, который будет использоваться для вызова криптографических функций в рамках одной сессии пользователя.**
<a id="p101460"></a>**5. Объект cryptContext формируется на стороне СКЗИ и содержит информацию о состоянии и параметрах работы с криптографическим провайдером для выполнения операций криптографии и управления криптографическими ресурсами.**
<a id="p101461"></a>**6. В случае завершения сессии пользователя или аварийного завершения работы МП или ПМ МП должно вызвать метод releaseContext (cryptoContext) и деинициализировать работу с хранилищем СКЗИ. Для продолжения работы с криптографическими функциями необходимо заново инициализировать хранилище СКЗИ.**


#### <a id="p101462"></a>3.3.3 Загрузка САС

<a id="p101463"></a>Возможны следующие взаимодействия с САС:
<a id="p101464"></a>**1. В ПМ передается пустой САС:**
<a id="p101465"></a>**a) при вызове функции saveCrl на вход будет передан пустой САС. СКЗИ должно обновить и обнулить ранее загруженный САС. В таком случае при проверке наличия в САС сертификат никогда не будет аннулированным.**
<a id="p101466"></a>**2. САС не передается в ПМ:**
<a id="p101467"></a>a) функция saveCrl не вызывается. САС загружен не будет. Проверка наличия сертификатов в САС в таком случае не выполняется.
3. <a id="p101468"></a>САС передается в ПМ:
<a id="p101469"></a>a) передать в функции saveCrl САС, содержащий непустой список аннулированных сертификатов.


#### <a id="p101470"></a>3.3.4 Смена пароля для доступа к хранилищу

1. <a id="p101471"></a>Для получения срока истечения действия пароля МП может вызывать функцию getPasswordExpirationTime (storeId, timeZone).
2. <a id="p101472"></a>Срок действия пароля определяется политикой использования СКЗИ.
3. <a id="p101473"></a>При приближении времени смены пароля или в случае получения кода ошибки 16 МП должно вызвать метод changePassword (storeId):
<a id="p101474"></a>a) в результате вызова метода запрашивается ввод старого и нового пароля. При выполнении требований к паролям устанавливается новый пароль и обновляется его срок действия.


#### <a id="p101475"></a>3.3.5 Смена криптографических ключей пользователя

<a id="p101476"></a>При получении уведомления об истечении срока действия криптографических ключей пользователя МП должно инициировать формирование новых криптографических ключей пользователя и формирование запроса на СКПЭП в соответствии с требованиями из [[11]](#p100047).


#### <a id="p101477"></a>3.3.6 Сбор ЦО

<a id="p101478"></a>Сбор информации о системном окружении для последующего использования и формирования ЭС рекомендуется реализовать на стороне МП для снижения рисков и зависимостей в МП.
<a id="p101479"></a>В зависимости от целей использования рекомендуется собирать ЦО одним из следующих способов:
1. <a id="p101480"></a>Формировать ЦО в соответствии с требованиями, указанными в стандарте [[12]](#p100048);
2. <a id="p101481"></a>В случае использования ЦО для операций с ЦР формировать ЦО в соответствии с требованиями, описанными ниже.
<a id="p101482"></a>Требования к сбору ЦО для использования в операциях с ЦР:
<a id="p101483"></a>**1. Собрать информацию о системном окружении. Параметры, включаемые в ЦО, зависят от ОС устройства. Обязательный список параметров зависит от ОС устройства и перечислен в [Таблице 8](#p101489).**
<a id="p101484"></a>**2. ЦО формируется следующим образом:**
<a id="p101485"></a>**a) собранная информация об устройстве должна быть объединена в одну строку формата XML, как указано в таблице, с применением функции trim ко всем собранным значениям и названиям параметров. Названия параметров с точностью до символа должны соответствовать указанным в [Таблице 8](#p101489) из этой Спецификации;**
<a id="p101486"></a>b) если какой-либо параметр не удалось получить, необходимо указать его пустое значение в виде <параметр></параметр>.
3. <a id="p101487"></a>Если для получения параметра требуется дополнительное разрешение пользователя, то МП должно его запрашивать.
<a id="p101488"></a>Требования к передаче ЦО для операций с ЦР определены в документе [[11]](#p100047).

<a id="p101489"></a>Таблица 8 - Требования к параметрам ЦО


<table>
<colgroup><col width="14%"><col width="26%"><col width="36%"><col width="23%"></colgroup>
<tr><td><a id="p101490"></a>Платформа</td><td><a id="p101491"></a>Параметр</td><td><a id="p101492"></a>Описание</td><td><a id="p101493"></a>Формат данных<br>(Длина/Тип данных/Значения)</td></tr>
<tr><td rowspan="10"><a id="p101494"></a>ОС Apple iOS</td><td rowspan="2"><a id="p101495"></a>DeviceModel</td><td rowspan="2"><a id="p101496"></a>Производитель и модель мобильного устройства</td><td><a id="p101497"></a>Длина: 32 символа</td></tr>
<tr><td><a id="p101498"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101499"></a>DeviceID</td><td rowspan="2"><a id="p101500"></a>Идентификатор устройства</td><td><a id="p101501"></a>Длина: 15 символов</td></tr>
<tr><td><a id="p101502"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101503"></a>OSName</td><td rowspan="2"><a id="p101504"></a>Название ОС</td><td><a id="p101505"></a>Длина: 10 символов</td></tr>
<tr><td><a id="p101506"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101507"></a>SerialNumber</td><td rowspan="2"><a id="p101508"></a>Серийный номер устройства</td><td><a id="p101509"></a>Длина: 16 символов</td></tr>
<tr><td><a id="p101510"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101511"></a>IdentifierForVendor</td><td rowspan="2"><a id="p101512"></a>Буквенно-цифровая строка, которая однозначно идентифицирует устройство для разработчиков приложений</td><td><a id="p101513"></a>Длина: 16 символов</td></tr>
<tr><td><a id="p101514"></a>Тип данных: строка</td></tr>
<tr><td rowspan="14"><a id="p101515"></a>ОС Google Android</td><td rowspan="2"><a id="p101516"></a>DeviceModel</td><td rowspan="2"><a id="p101517"></a>Производитель и модель мобильного устройства</td><td><a id="p101518"></a>Длина: 32 символа</td></tr>
<tr><td><a id="p101519"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101520"></a>DeviceID</td><td rowspan="2"><a id="p101521"></a>Идентификатор устройства</td><td><a id="p101522"></a>Длина: 15 символов</td></tr>
<tr><td><a id="p101523"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101524"></a>OSName</td><td rowspan="2"><a id="p101525"></a>Название ОС</td><td><a id="p101526"></a>Длина: 10 символов</td></tr>
<tr><td><a id="p101527"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101528"></a>SerialNumber</td><td rowspan="2"><a id="p101529"></a>Серийный номер устройства</td><td><a id="p101530"></a>Длина: 16 символов</td></tr>
<tr><td><a id="p101531"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101532"></a>Build.FINGERPRINT</td><td rowspan="2"><a id="p101533"></a>Строка, которая однозначно идентифицирует сборку</td><td><a id="p101534"></a>Длина: 100 символов</td></tr>
<tr><td><a id="p101535"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101536"></a>Build.MANUFACTURER</td><td rowspan="2"><a id="p101537"></a>Производитель сборки</td><td><a id="p101538"></a>Длина: 16 символов</td></tr>
<tr><td><a id="p101539"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101540"></a>Build.BOOTLOADER</td><td rowspan="2"><a id="p101541"></a>Номер версии системного загрузчика</td><td><a id="p101542"></a>Длина: 16 символов</td></tr>
<tr><td><a id="p101543"></a>Тип данных: строка</td></tr>
<tr><td rowspan="8"><a id="p101544"></a>ОС Аврора</td><td rowspan="2"><a id="p101545"></a>DeviceModel</td><td rowspan="2"><a id="p101546"></a>Производитель и модель мобильного устройства</td><td><a id="p101547"></a>Длина: 32 символа</td></tr>
<tr><td><a id="p101548"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101549"></a>DeviceID</td><td rowspan="2"><a id="p101550"></a>Идентификатор устройства</td><td><a id="p101551"></a>Длина: 15 символов</td></tr>
<tr><td><a id="p101552"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101553"></a>OSName</td><td rowspan="2"><a id="p101554"></a>Название ОС</td><td><a id="p101555"></a>Длина: 10 символов</td></tr>
<tr><td><a id="p101556"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101557"></a>SerialNumber</td><td rowspan="2"><a id="p101558"></a>Серийный номер устройства</td><td><a id="p101559"></a>Длина: 16 символов</td></tr>
<tr><td><a id="p101560"></a>Тип данных: строка</td></tr>
<tr><td rowspan="8"><a id="p101561"></a>ОС HarmonyOS</td><td rowspan="2"><a id="p101562"></a>DeviceModel</td><td rowspan="2"><a id="p101563"></a>Производитель и модель мобильного устройства</td><td><a id="p101564"></a>Длина: 32 символа</td></tr>
<tr><td><a id="p101565"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101566"></a>DeviceID</td><td rowspan="2"><a id="p101567"></a>Идентификатор устройства</td><td><a id="p101568"></a>Длина: 15 символов</td></tr>
<tr><td><a id="p101569"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101570"></a>OSName</td><td rowspan="2"><a id="p101571"></a>Название ОС</td><td><a id="p101572"></a>Длина: 10 символов</td></tr>
<tr><td><a id="p101573"></a>Тип данных: строка</td></tr>
<tr><td rowspan="2"><a id="p101574"></a>SerialNumber</td><td rowspan="2"><a id="p101575"></a>Серийный номер устройства</td><td><a id="p101576"></a>Длина: 16 символов</td></tr>
<tr><td><a id="p101577"></a>Тип данных: строка</td></tr>
</table>



#### <a id="p101578"></a>3.3.7 Установка ГОСТ TLS соединения

<a id="p101579"></a>При установке ГОСТ TLS соединения МП должно:
1. <a id="p101580"></a>Создать экземпляр класса GostTlsSocket вызовом метода ПМ getGostTlsSocket. На вход метода передать cryptoContext и идентификатор клиентского ГОСТ TLS сертификата, если требуется установить двухстороннее ГОСТ TLS соединение.
2. <a id="p101581"></a>Вызвать метод ПМ connect для созданного экземпляра класса GostTlsSocket. В параметрах вызова передать адрес и порт подключения. После успешного выполнения данного метода будет открыто защищенное ГОСТ TLS соединение.
3. <a id="p101582"></a>МП, используя методы сокета write и read, может передавать и считывать данные из защищенного ГОСТ TLS-соединения.
4. <a id="p101583"></a>Для проверки статуса соединения сокетов МП может использовать метод getConnectionStatus.
5. <a id="p101584"></a>После завершения использования соединения оно должно быть закрыто. Для этого МП может вызвать метод GostTlsSocket close (waitForDisconnected). При выполнении данного метода все ресурсы будут освобождены.
6. <a id="p101585"></a>Контроль необходимости открытия/закрытия соединения должен выполняться на стороне МП. Установка нового TCP-соединения для каждого внешнего вызова не является обязательной. Чтобы создать соединение с другим хостом/портом при открытом соединении, необходимо создать новый экземпляр класса GostTlsSocket.


### <a id="p101586"></a>3.4 Требования к логическому хранению данных



#### <a id="p101587"></a>3.4.1 Требования к составу, структуре и способам организации данных в системе

<a id="p101588"></a>В ПМ должно быть реализовано внутреннее хранилище для обеспечения корректной работы его функций.
<a id="p101589"></a>Требования к хранилищу СКЗИ описаны в [пункте 3.4.4](#p101753).
<a id="p101590"></a>Внутреннее хранилище должно быть расположено в приватной области данных, недоступной для других приложений.
<a id="p101591"></a>Во внутреннем хранилище ПМ должна сохраняться следующая информация:
- <a id="p101592"></a>Блокировка доступа к хранилищу:
- <a id="p101593"></a>primary key storeId - строка, идентификатор хранилища СКЗИ;
<a id="p101594"></a>**- lockEnd - время окончания блокировки доступа в формате Unix Timestamp.**
- <a id="p101595"></a>Учет пользователей
- <a id="p101596"></a>primary key id - строка, уникальный идентификатор;
- <a id="p101597"></a>userId - строка, идентификатор пользователя МП;
- <a id="p101598"></a>storeId - строка, идентификатор хранилища СКЗИ;
<a id="p101599"></a>**- createdAt - дата и время сохранения информации в формате Unix Timestamp;**
- <a id="p101600"></a>isDeleted - флаг, отображающий факт удаления ключевой информации пользователя
<a id="p101601"></a>**- Учет неудачных попыток ввода пароля:**
<a id="p101602"></a>**- primary key storeId - строка, идентификатор хранилища СКЗИ;**
<a id="p101603"></a>**- целое число count - целое число, количество неуспешных попыток ввода пароля (подряд).**
- <a id="p101604"></a>Журнал действий:
- <a id="p101605"></a>primary key id - строка, уникальный идентификатор действия;
- <a id="p101606"></a>createdAt - дата и время действия в формате Unix Timestamp;
- <a id="p101607"></a>functionName - строка, название вызванного метода;
- <a id="p101608"></a>result - строка, результат выполнения функции (SUCCESS, FAIL);
- <a id="p101609"></a>inputData - строка, список входных данных (может быть пустым);
- <a id="p101610"></a>outputData - строка, список выходных данных (может быть пустым);
- <a id="p101611"></a>storeId - строка, идентификатор хранилища СКЗИ (может быть пустым);
- <a id="p101612"></a>errorCode - целое число, код ошибки (может быть пустым);
- <a id="p101613"></a>errorMessage - строка, описание ошибки (может быть пустым).


#### <a id="p101614"></a>3.4.2 Схема хранения ключевой информации

<a id="p101615"></a>На Рисунке 3 изображена схема хранения ключевой информации при использовании ПМ для подключения к ПлЦР. Описание компонентов схемы приведено в [Таблице 9](#p101618).

<a id="p101616"></a> ![3.4.2 Схема хранения ключевой информации](https://i.bukva.ai/NT1GUrMC5/img_2.jpg) 

<a id="p101617"></a>Рисунок 3 - Схема хранения ключевой информации

<div align="center">

<a id="p101618"></a>Таблица 9 - Описание схемы хранения ключевой информации

</div>



<table>
<colgroup><col width="12%"><col width="15%"><col width="12%"><col width="20%"><col width="20%"><col width="20%"></colgroup>
<tr><td><a id="p101619"></a>Ключ/Сертификат</td><td><a id="p101620"></a>Алгоритм</td><td><a id="p101621"></a>Длина ключа</td><td><a id="p101622"></a>Назначение</td><td><a id="p101623"></a>Жизненный цикл</td><td><a id="p101624"></a>Хранение и передача</td></tr>
<tr><td><a id="p101625"></a>SK.FO.TLS</td><td rowspan="4"><a id="p101626"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"><a id="p101627"></a>Закрытый ключ - 256 бит</td><td rowspan="3"><a id="p101628"></a>Сертификат и соответствующий ему закрытый ключ для аутентификации сервера финансовой организации при установлении двухстороннего TLS-соединения между МП и сервером финансовой организации.</td><td rowspan="4"><a id="p101629"></a>Серверный сертификат безопасности ГОСТ-TLS выпускается УЦ Безопасности финансовой организации.</td><td rowspan="4"><a id="p101630"></a>Серверный TLS-сертификат и связанная с ним цепочка сертификатов, включающая все промежуточные сертификаты. Корневой (самоподписанный) сертификат УЦ Безопасности, должен быть включен в ресурсы МП. При смене сертификатов требуется обновление МП.</td></tr>
<tr><td rowspan="3"><a id="p101631"></a>CERT.FO.TLS</td></tr>
<tr><td rowspan="2"><a id="p101632"></a>Открытый ключ - 512 бит</td></tr>
<tr><td><a id="p101633"></a>Используется при установлении одностороннего TLS-соединения с сервером финансовой организации для передачи запроса на первичную выдачу клиентского ГОСТ-TLS сертификата и при последующем установлении двустороннего TLS-соединения [[29]](#p100065).</td></tr>
<tr><td><a id="p101634"></a>SK.USRi.TLS</td><td rowspan="7"><a id="p101635"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"><a id="p101636"></a>Закрытый ключ - 256 бит</td><td rowspan="7"><a id="p101637"></a>Клиентский сертификат и соответствующий ему закрытый ключ для аутентификации МП при установлении двухстороннего TLS-соединения между МП и сервером финансовой организации.</td><td rowspan="3"><a id="p101638"></a>Ключи для двухстороннего ГОСТ-TLS формируются СКЗИ по запросу МП.</td><td rowspan="4"><a id="p101639"></a>Закрытый ключ хранится в сегменте хранилища СКЗИ, соответствующем пользователю приложения.</td></tr>
<tr><td rowspan="6"><a id="p101640"></a>CERT.USRi.TLS</td></tr>
<tr><td rowspan="5"><a id="p101641"></a>Открытый ключ - 512 бит</td></tr>
<tr><td rowspan="2"><a id="p101642"></a>Первичный запрос на выпуск транспортного сертификата в формате PKCS#10 формируется в ПМ по запросу МП.</td></tr>
<tr><td rowspan="3"><a id="p101643"></a>Сертификат безопасности ГОСТ-TLS выпускается УЦ Безопасности финансовой организации по запросу от МП.</td></tr>
<tr><td><a id="p101644"></a>Для перевыпуска транспортного сертификата создается новая пара транспортных ключей, формируется запрос на выпуск транспортного сертификата в формате PKCS#10. Далее МП формирует сообщение в формате PKCS#7, содержащее данный запрос, подписывает его закрытым транспортным ключом и направляет на сервер финансовой организации.</td></tr>
<tr><td><a id="p101645"></a>Транспортный сертификат после выпуска направляется в TLS-криптошлюз.</td></tr>
<tr><td><a id="p101646"></a>SK.FO.EK</td><td rowspan="4"><a id="p101647"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"><a id="p101648"></a>Закрытый ключ - 256 бит</td><td rowspan="4"><a id="p101649"></a>Эфемерная ключевая пара, предназначенная для обмена сессионными ключами.</td><td rowspan="4"><a id="p101650"></a>Ключи формируются на сервере финансовой организации в процессе установления TLS-соединения.</td><td rowspan="3"><a id="p101651"></a>Открытый эфемерный ключ передается в клиентское приложение в процессе установления двухстороннего TLS-соединения между МП и сервером финансовой организации.</td></tr>
<tr><td rowspan="3"><a id="p101652"></a>PK.FO.EK</td></tr>
<tr><td rowspan="2"><a id="p101653"></a>Открытый ключ - 512 бит</td></tr>
<tr><td><a id="p101654"></a>Ключи, использованные для получения сессионных ключей, не хранятся в СКЗИ.</td></tr>
<tr><td><a id="p101655"></a>SK.USRi.EK</td><td rowspan="4"><a id="p101656"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"><a id="p101657"></a>Закрытый ключ - 256 бит</td><td rowspan="4"><a id="p101658"></a>Эфемерная ключевая пара, предназначенная для обмена сессионными ключами.</td><td rowspan="4"><a id="p101659"></a>Ключи формируются СКЗИ в процессе установления TLS-соединения.</td><td rowspan="3"><a id="p101660"></a>Открытый эфемерный ключ передается на сервер финансовой организации в процессе установления двухстороннего TLS-соединения между МП и сервером финансовой организации.</td></tr>
<tr><td rowspan="3"><a id="p101661"></a>PK.USRi.EK</td></tr>
<tr><td rowspan="2"><a id="p101662"></a>Открытый ключ - 512 бит</td></tr>
<tr><td><a id="p101663"></a>Ключи, использованные для получения сессионных ключей, не хранятся в СКЗИ.</td></tr>
<tr><td rowspan="4"><a id="p101664"></a>Session Key</td><td rowspan="4"><a id="p101665"></a>ГОСТ Р 34.12-2015/34.12-2018</td><td><a id="p101666"></a>Закрытый ключ - 256 бит</td><td rowspan="4"><a id="p101667"></a>Сессионный ключ.<br>Предназначен для зашифрования/расшифрования данных в SDK и на сервере авторизации.</td><td rowspan="2"><a id="p101668"></a>Ключ вычисляется из пары ключей с использованием алгоритма ECDH-ES при необходимости и не хранится:</td><td rowspan="4"><a id="p101669"></a>Не передается по каналам связи.</td></tr>
<tr><td rowspan="3"><a id="p101670"></a>Открытый ключ - 512 бит</td></tr>
<tr><td><a id="p101671"></a>В мобильном приложении - SK.USRi.EK + PK.FO.EK</td></tr>
<tr><td><a id="p101672"></a>На сервере финансовой организации - SK.FO.EK + PK.USRi.EK</td></tr>
<tr><td><a id="p101673"></a>SK.USRi.AUT</td><td rowspan="7"><a id="p101674"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"><a id="p101675"></a>Закрытый ключ - 256 бит</td><td rowspan="7"><a id="p101676"></a>Ключевая пара и сертификат пользователя МП (пользователя ПлЦР).</td><td rowspan="3"><a id="p101677"></a>Ключевая пара создается СКЗИ по запросу пользователя МП.</td><td rowspan="4"><a id="p101678"></a>Закрытый ключ хранится в сегменте хранилища СКЗИ, соответствующем пользователю приложения.</td></tr>
<tr><td><a id="p101679"></a>PK.USRi.AUT</td></tr>
<tr><td rowspan="5"><a id="p101680"></a>CERT.USRi.AUT</td><td rowspan="5"><a id="p101681"></a>Открытый ключ - 512 бит</td></tr>
<tr><td rowspan="3"><a id="p101682"></a>Запрос на выпуск сертификата пользователя МП (пользователя ПлЦР) формируется в ПМ по запросу МП. Запрос направляется в ПУЦ УНЭП финансовой организации, который осуществляет его выпуск (см. [[28]](#p100064)).</td></tr>
<tr><td><a id="p101683"></a>Сертификат выпускается ПУЦ УНЭП финансовой организации и сохраняется на ее сервере.</td></tr>
<tr><td rowspan="2"><a id="p101684"></a>В случае, если финансовая организация является участником ПлЦР, данный сертификат также сохраняется на сервере оператора ПлЦР в привязке к пользователю ПлЦР и его счету.</td></tr>
<tr><td><a id="p101685"></a>Для перевыпуска сертификата МП инициирует создание новой ключевой пары и формирование запроса на выпуск сертификата в формате PKCS#10. МП формирует сообщение в формате PKCS#7, содержащее данный запрос, подписывает его закрытым ключом пользователя МП (пользователя ПлЦР) и направляет на сервер финансовой организации.</td></tr>
<tr><td rowspan="2"><a id="p101686"></a>CRLs_CR</td><td rowspan="2"><a id="p101687"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"></td><td rowspan="2"><a id="p101688"></a>Списки аннулированных сертификатов БР (САС БР). Включают в себя список аннулированных сертификатов проверки ЭП.</td><td><a id="p101689"></a>Списки<br>аннулированных сертификатов загружаются в СКЗИ по запросу МП.</td><td rowspan="2"></td></tr>
<tr><td><a id="p101690"></a>В МП должен быть предусмотрен механизм обновления в СКЗИ CRLs_CR.</td></tr>
<tr><td rowspan="2"><a id="p101691"></a>CRLs_FO</td><td rowspan="2"><a id="p101692"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"></td><td rowspan="2"><a id="p101693"></a>Списки аннулированных сертификатов финансовой организации. Включают в себя список аннулированных сертификатов проверки ЭП и список аннулированных ГОСТ-TLS сертификатов.</td><td><a id="p101694"></a>Списки аннулированных сертификатов загружаются в СКЗИ по запросу МП.</td><td rowspan="2"></td></tr>
<tr><td><a id="p101695"></a>В МП должен быть предусмотрен механизм обновления в СКЗИ CRLs_FO.</td></tr>
<tr><td colspan="6"><a id="p101696"></a>Ключи и сертификаты, необходимые для выполнения операций с ЦР</td></tr>
<tr><td><a id="p101697"></a>SK.FO_KK.AUT</td><td rowspan="6"><a id="p101698"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"><a id="p101699"></a>Закрытый ключ - 256 бит</td><td rowspan="6"><a id="p101700"></a>Ключевая пара и сертификат КК участника ПлЦР.</td><td rowspan="2"><a id="p101701"></a>Сертификат выпускается УЦ БР.</td><td rowspan="2"><a id="p101702"></a>Закрытый ключ хранится в КК участника ПлЦР.</td></tr>
<tr><td rowspan="2"><a id="p101703"></a>PK.FO_KK.AUT</td></tr>
<tr><td rowspan="4"><a id="p101704"></a>Открытый ключ - 512 бит</td><td rowspan="2"><a id="p101705"></a>Доставляется в МП и устанавливается в СКЗИ посредством вызова МП функции ПМ в сценарии "Регистрация сертификата ключа Клиента-ФЛ для доступа к кошельку на ПлЦР" [[11]](#p100047).</td><td rowspan="3"><a id="p101706"></a>Сертификат КК участника ПлЦР и связанная с ним цепочка сертификатов, включающая все промежуточные сертификаты и сертификат ПУЦ УНЭП, должны доставляться в МП и устанавливаться в СКЗИ путем вызова соответствующей функции ПМ.</td></tr>
<tr><td rowspan="3"><a id="p101707"></a>CERT.FO_KK.AUT</td></tr>
<tr><td rowspan="2"><a id="p101708"></a>В МП должен быть предусмотрен механизм доставки и установки в СКЗИ сертификата участника ПлЦР при смене сертификата в случае компрометации ключа SK.FO_KK.AUT или по истечении его срока действия.</td></tr>
<tr><td><a id="p101709"></a>Сертификат УЦ БР должен быть включен в ресурсы МП. При смене сертификата корневого УЦ БР требуется обновление МП.</td></tr>
<tr><td><a id="p101710"></a>SK.FO_KO.AUT</td><td rowspan="6"><a id="p101711"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td><a id="p101712"></a>Закрытый ключ - 256 бит</td><td rowspan="6"><a id="p101713"></a>Ключевая пара и сертификат КО участника ПлЦР.</td><td><a id="p101714"></a>Сертификат выпускается УЦ БР.</td><td rowspan="2"><a id="p101715"></a>Закрытый ключ хранится в КО участника ПлЦР.</td></tr>
<tr><td rowspan="2"><a id="p101716"></a>PK.FO_KO.AUT</td><td rowspan="5"><a id="p101717"></a>Открытый ключ - 512 бит</td><td rowspan="3"><a id="p101718"></a>Доставляется в МП и устанавливается в СКЗИ посредством вызова МП функции ПМ в сценарии "Регистрация сертификата ключа Клиента-ФЛ для доступа к кошельку на ПлЦР" [[11]](#p100047).</td></tr>
<tr><td rowspan="3"><a id="p101719"></a>Сертификат КО участника ПлЦР и связанная с ним цепочка сертификатов, включающая все промежуточные сертификаты ПУЦ УНЭП, должны доставляться в МП и устанавливаться в СКЗИ путем вызова соответствующей функции ПМ</td></tr>
<tr><td rowspan="3"><a id="p101720"></a>CERT.FO_KO.AUT</td></tr>
<tr><td rowspan="2"><a id="p101721"></a>В МП должен быть предусмотрен механизм доставки и установки в СКЗИ сертификата участника ПлЦР при смене сертификата в случае компрометации ключа SK.FO_KO.AUT или по истечении его срока действия.</td></tr>
<tr><td><a id="p101722"></a>Сертификат УЦ БР должен быть включен в ресурсы МП. При смене сертификата УЦ БР требуется обновление МП.</td></tr>
<tr><td><a id="p101723"></a>SK.CR_KO.AUT</td><td rowspan="6"><a id="p101724"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"><a id="p101725"></a>Закрытый ключ - 256 бит</td><td rowspan="6"><a id="p101726"></a>Ключевая пара и сертификат КО Узла РОРД.</td><td rowspan="2"><a id="p101727"></a>Сертификат выпускается УЦ БР.</td><td rowspan="2"><a id="p101728"></a>Закрытый ключ хранится в КО Узла РОРД.</td></tr>
<tr><td rowspan="2"><a id="p101729"></a>PK.CR_KO.AUT</td></tr>
<tr><td rowspan="4"><a id="p101730"></a>Открытый ключ - 512 бит</td><td rowspan="2"><a id="p101731"></a>Доставляется в МП и устанавливается в СКЗИ посредством вызова МП функции ПМ в сценарии "Регистрация сертификата ключа Клиента-ФЛ для доступа к кошельку на ПлЦР" [[11]](#p100047).</td><td rowspan="3"><a id="p101732"></a>Сертификат КО Узла РОРД и связанная с ним цепочка сертификатов, включающая все промежуточные сертификаты, должны доставляться в МП и устанавливаться в СКЗИ путем вызова соответствующей функции ПМ.</td></tr>
<tr><td rowspan="3"><a id="p101733"></a>CERT.CR_KO.AUT</td></tr>
<tr><td rowspan="2"><a id="p101734"></a>В МП должен быть предусмотрен механизм доставки и установки в СКЗИ сертификата КО Узла РОРД при смене сертификата в случае компрометации ключа SK.CR_KO.AUT или по истечении его срока действия.</td></tr>
<tr><td><a id="p101735"></a>Сертификат УЦ БР должен быть включен в ресурсы МП. При смене сертификата УЦ БР требуется обновление МП.</td></tr>
<tr><td><a id="p101736"></a>SK.CR_KK.AUT</td><td rowspan="6"><a id="p101737"></a>ГОСТ Р 34.10-2012/34.10-2018</td><td rowspan="2"><a id="p101738"></a>Закрытый ключ - 256 бит</td><td rowspan="6"><a id="p101739"></a>Ключевая пара и сертификат КК ПлЦР.</td><td rowspan="2"><a id="p101740"></a>Сертификат выпускается УЦ БР.</td><td rowspan="2"><a id="p101741"></a>Закрытый ключ хранится в КК ПлЦР.</td></tr>
<tr><td rowspan="2"><a id="p101742"></a>PK.CR_KK.AUT</td></tr>
<tr><td rowspan="4"><a id="p101743"></a>Открытый ключ - 512 бит</td><td rowspan="2"><a id="p101744"></a>Доставляется в МП и устанавливается в СКЗИ посредством вызова МП функции ПМ в сценарии "Регистрация сертификата ключа Клиента-ФЛ для доступа к кошельку на ПлЦР" [[11]](#p100047).</td><td rowspan="3"><a id="p101745"></a>Сертификат КК ПлЦР и связанная с ним цепочка сертификатов, включающая все промежуточные сертификаты, должны доставляться в МП и устанавливаться в СКЗИ путем вызова соответствующей функции ПМ.</td></tr>
<tr><td rowspan="3"><a id="p101746"></a>CERT.CR_KK.AUT</td></tr>
<tr><td rowspan="2"><a id="p101747"></a>В МП должен быть предусмотрен механизм доставки и установки в СКЗИ сертификата КК ПлЦР при смене сертификата в случае компрометации ключа SK.CR_KK.AUT или по истечении его срока действия.</td></tr>
<tr><td><a id="p101748"></a>Сертификат УЦ БР должен быть включен в ресурсы МП. При смене сертификата УЦ БР требуется обновление МП.</td></tr>
</table>



#### <a id="p101749"></a>3.4.3 Требования к контролю, хранению, обновлению и восстановлению данных

<a id="p101750"></a>Необходимо обеспечить бесперебойное функционирование ПМ.
<a id="p101751"></a>В случае аварийного завершения работы или при возникновении сбоев в аппаратном обеспечении ПМ должен обеспечивать сохранность данных, за исключением случаев повреждения носителей информации.
<a id="p101752"></a>Специальных требований к сроку хранения данных не предъявляется.


#### <a id="p101753"></a>3.4.4 Требования к программному обеспечению



##### <a id="p101754"></a>3.4.4.1 Общие требования

<a id="p101755"></a>ПМ должен иметь в своем составе сертифицированное СКЗИ не ниже класса КС1, или же сам являться сертифицированным СКЗИ не ниже класса КС1. Рекомендуется выбирать СКЗИ, разрешенные к использованию на территории Российской Федерации и за ее пределами.
<a id="p101756"></a>СКЗИ должно быть разрешено для встраивания в ИС.
<a id="p101757"></a>СКЗИ должно обладать пакетом документации, достаточным для встраивания в ПМ.
<a id="p101758"></a>Операционная система, для которой предназначено СКЗИ, должна соответствовать операционной системе, в которой будет функционировать МП.
<a id="p101759"></a>Производитель СКЗИ должен гарантировать работу СКЗИ во всех средах функционирования ПМ.
<a id="p101760"></a>СКЗИ должно предоставлять программный интерфейс для вызова криптографических функций из ПМ.
<a id="p101761"></a>СКЗИ не должно возвращать результаты работы методов напрямую пользователю МП.


##### <a id="p101762"></a>3.4.4.2 Требования к функциям защиты информации

<a id="p101763"></a>СКЗИ должно обеспечивать выполнение таких функций защиты информации, как:
- <a id="p101764"></a>создание ключей ЭП и ключей проверки ЭП в соответствии с [[2]](#p100036);
- <a id="p101765"></a>хранение криптографических ключей, СКПЭП, транспортных криптографических ключей и сертификатов транспортных криптографических ключей в защищенном хранилище в мобильном приложении;
- <a id="p101766"></a>формирование и проверка ЭП согласно [[2]](#p100036), [[20]](#p100056);
- <a id="p101767"></a>зашифрование и расшифрование ЭС. Алгоритмы, используемые при зашифровании: [[3]](#p100037), [[21]](#p100057), [[22]](#p100058), [[23]](#p100059);
- <a id="p101768"></a>установление защищенного соединения между приложением и сервером с использованием протокола одностороннего и двустороннего TLS в соответствии с [[4]](#p100038), [[5]](#p100039).
<a id="p101769"></a>СКЗИ должно соответствовать требованиям, предъявляемым к средствам ЭП в документе [[35]](#p100073).
<a id="p101770"></a>СКЗИ должно иметь в составе ПДСЧ, соответствующий требованиям документа [[24]](#p100060).
<a id="p101771"></a>ПДСЧ для выработки инициализирующей последовательности должен использовать БДСЧ.
<a id="p101772"></a>ПДСЧ должен поддерживать возможность параллельной работы в независимых сессиях.
<a id="p101773"></a>СКЗИ должен предоставлять функции по адаптации дизайна экрана работы с БДСЧ (при наличии). Реализация работы БДСЧ и возможность адаптации дизайна экрана работы с БДСЧ должны соответствовать эксплуатационной документации на СКЗИ.
<a id="p101774"></a>В СКЗИ должна быть реализована функция проверки статуса отзыва сертификата транспортного (TLS) криптографического ключа с использованием САС и/или OCSP, а также функция проверки статуса отзыва сертификата ЭП с использованием САС.
<a id="p101775"></a>Режим проверки статуса отзыва сертификата транспортного (TLS) криптографического ключа с использованием OCSP должен быть настраиваемым в конфигурации СКЗИ.


##### <a id="p101776"></a>3.4.4.3 Требования к хранению и доступу к ключевой информации

<a id="p101777"></a>СКЗИ должно обеспечивать защищенное хранение криптографических ключей пользователя. Доступ к криптографическим операциям СКЗИ должен осуществляться по паролю. Закрытые криптографические ключи должны быть неизвлекаемыми.
<a id="p101778"></a>СКЗИ должно осуществлять управление паролями пользователей приложения для доступа к криптографическим функциям. В СКЗИ должны быть доступны функции установки и изменения пароля хранилища для сегмента хранилища СКЗИ. Требования к паролю зависят от ограничений, накладываемых СКЗИ.
<a id="p101779"></a>Пароли пользователей должны быть неизвлекаемыми из СКЗИ. Вызов криптографических функций СКЗИ должен выполняться с указанием идентификатора сегмента хранилища СКЗИ. Интерфейс ввода пароля от хранилища должно предоставлять СКЗИ.
<a id="p101780"></a>СКЗИ должно осуществлять контроль срока действия пароля и осуществлять его замену по запросу.
<a id="p101781"></a>СКЗИ должно предоставлять возможность работы в рамках сессии пользователя без дополнительного запроса пароля.
<a id="p101782"></a>Если указан неверный пароль, то ответ на вызов любого метода СКЗИ для данного пользователя должен содержать соответствующее исключение.
<a id="p101783"></a>СКЗИ должно поддерживать возможность одновременного хранения на мобильном устройстве криптографических ключей и СКПЭП разных Пользователей МП, транспортных криптографических ключей и сертификатов транспортных криптографических ключей разных Пользователей МП. Данная возможность должна быть реализована в СКЗИ за счет сегментации хранилища ключевой информации СКЗИ.
<a id="p101784"></a>В СКЗИ должны быть реализованы функции удаления сегмента хранилища и гарантированного уничтожения ключевой информации по идентификатору хранилища СКЗИ в соответствии с документом [[32]](#p100070).
<a id="p101785"></a>СКЗИ должно предоставлять функции для установки, удаления и получения сертификатов ключей пользователя, САС, а также извлечения времени истечения действия сертификата.
<a id="p101786"></a>При сохранении САС в хранилище СКЗИ должно проверять номер САС в разрезе его серии, а не сквозную нумерацию. Проверка должна предотвращать загрузку устаревших данных.
<a id="p101787"></a>СКЗИ должно поддерживать возможность хранения корневых сертификатов в едином хранилище для всех пользователей.


#### <a id="p101788"></a>3.4.5 Требования к форматам ЭП

<a id="p101789"></a>СКЗИ должно поддерживать различные форматы ЭП:
- <a id="p101790"></a>CMScert (PKCS#7, содержит сертификат открытого ключа, соответствующего закрытому ключу, на котором произведено формирование ЭП);
- <a id="p101791"></a>CMSid (PKCS#7, содержит идентификатор открытого ключа, соответствующего закрытому ключу, на котором произведено формирование ЭП);
- <a id="p101792"></a>RAW (не содержит сертификата или идентификатора ключа, формат записи последовательности байт подписи - little-endian).


#### <a id="p101793"></a>3.4.6 Требования к встраиванию СКЗИ

<a id="p101794"></a>Встраивание СКЗИ в ПМ должно проводится в соответствии с требованиями и рекомендациями, изложенными в эксплуатационной документации на СКЗИ.
<a id="p101795"></a>При встраивании должен быть проведен контроль возвращаемых значений при обращениях к функциям СКЗИ.
<a id="p101796"></a>Встраивание не должно влиять на инженерно-криптографические свойства СКЗИ.
<a id="p101797"></a>МП должно использовать только документированные функции ОС и СКЗИ, использование которых при разработке возможно без построения новых СКЗИ.
<a id="p101798"></a>Если ПМ не является СКЗИ, то методы СКЗИ не должны быть доступны для вызова из МП.
<a id="p101799"></a>ПМ должен предоставлять механизм поэкземплярного учета (регистрации) СКЗИ, учитывающий технологию распространения МП через магазины приложений и/или официальный сайт финансовой организации или Банка России. Работоспособность должна быть гарантирована с магазинами приложений Google Play, App Store, RuStore, NashStore, AppGallery.
<a id="p101800"></a>Действия по регистрации СКЗИ должны осуществляться посредством использования технических средств и механизмов ПМ, в том числе с использованием механизмов СКЗИ при их наличии. При регистрации СКЗИ не должны быть задействованы сторонние сервисы.


## <a id="p101801"></a>4 Нефункциональные требования



### <a id="p101802"></a>4.1 Требования к производительности ПМ

<a id="p101803"></a>Рекомендуется обеспечить следующие показатели назначения:
- <a id="p101804"></a>время выполнения каждой криптографической операции ([[FN-1.4]](#p100233) - [[FN-1.9]](#p100269), [[FN-1.12]](#p100285) - [[FN-1.16]](#p100319)) должно составлять не более 0,3 секунды;
- <a id="p101805"></a>время выполнения каждого единого вызова ([[FN-1.10]](#p100273), [[FN-1.11]](#p100277), [[FN-1.17]](#p100329), [[FN-1.18]](#p100337)) должно составлять не более 0,5 секунды;
- <a id="p101806"></a>время инициализации ядра ПМ [([FN-1.1])](#p100221) на мобильных устройствах, соответствующих требованиям [раздела 2.2](#p100201), должно составлять не более 3 секунд.
<a id="p101807"></a>Показатели назначения указаны для данных размером до 1 Мб.


### <a id="p101808"></a>4.2 Содержание, объем и организация работ по созданию ПМ



#### <a id="p101809"></a>4.2.1 Общие требования

<a id="p101810"></a>Содержание и порядок выполнения работ по созданию ПМ рекомендуется выполнять в соответствии с стандартом [[17]](#p100053).
<a id="p101811"></a>Если ПМ является сертифицированным СКЗИ, то работы по его созданию и вводу эксплуатацию должны быть организованы в соответствии с требованиями документов [[9]](#p100043) и [[24]](#p100060).
<a id="p101812"></a>Если ПМ имеет в своем составе сертифицированное СКЗИ, работы по созданию и вводу в эксплуатацию ПМ должны быть организованы в соответствии с его правилами пользования (в соответствии с требованиями к эксплуатации СКЗИ документа [[9]](#p100043)). Если в правилах пользования СКЗИ, входящего в состав ПМ, не указано иное, ПМ должен пройти исследования по оценке его влияния на СКЗИ (см. [раздел 4.2.3](#p101819) Спецификации).
<a id="p101813"></a>Также при организации работ по созданию ПМ рекомендуется учесть требование о внесении ПМ в Реестр (см. [раздел 4.2.4](#p101843) Спецификации).


#### <a id="p101814"></a>4.2.2 Требования к разработчику ПМ

<a id="p101815"></a>Разработчик ПМ должен соответствовать всем требованиям, предъявляемым к производителю ПО для внесения его в Реестр [[14]](#p100050).
<a id="p101816"></a>Разработчик ПМ должен иметь лицензию ФСБ России на разработку, производство, распространение шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств, выполнение работ, оказание услуг в области шифрования информации, техническое обслуживание шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств (за исключением случая, если техническое обслуживание шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств, осуществляется для обеспечения собственных нужд юридического лица или индивидуального предпринимателя) на виды работ из [Приложения](https://bukva.ai/docs/postanovlenie-313-2012#p100086) к Положению [[18]](#p100054), в части [пунктов 1](https://bukva.ai/docs/postanovlenie-313-2012#p100087) <6>, [2](https://bukva.ai/docs/postanovlenie-313-2012#p100088), [3](https://bukva.ai/docs/postanovlenie-313-2012#p100089).

<a id="p101817"></a>

---

<a id="p101818"></a><6> В случаях, когда ПМ является СКЗИ.


#### <a id="p101819"></a>4.2.3 Работы по подготовке и проведению оценки влияния ПМ на выполнение требований, предъявленных к СКЗИ

<a id="p101820"></a>Необходимость проведения оценки влияния ПМ на СКЗИ определяется в документе [[9]](#p100043) и эксплуатационной документации СКЗИ.
<a id="p101821"></a>В разделе приведена информация о типовом подходе при проведении оценки влияния ПМ на выполнение требований, предъявленных к СКЗИ.
<a id="p101822"></a>В эксплуатационной документации на ПМ по результатам оценки влияния среды функционирования на выполнение требований, предъявленных к СКЗИ, должен быть отражен факт использования данной спецификации, если ПМ разработан в соответствии с ней.
<a id="p101823"></a>Оценка влияния может быть выполнена в один или два этапа. При выполнении оценки влияния в один этап исследование проводится после встраивания ПМ в МП. Оценка в два этапа проводится после встраивания СКЗИ в ПМ и после встраивания ПМ в МП.
<a id="p101824"></a>Исследования по оценке влияния проводятся в соответствии с документом "Техническое задание на проведение исследований по оценке влияния специального программного обеспечения Программного модуля" (далее - ТЗ).
<a id="p101825"></a>Разработку ТЗ и проведение исследований ПМ должна выполнять организация, имеющая действующий аттестат аккредитации испытательной лаборатории ФСБ России или допущенная ФСБ России на проведение таких работ (далее - Лаборатория).
<a id="p101826"></a>Исследования рекомендуется проводить на основании договора между Лабораторией и Разработчиком ПМ.
<a id="p101827"></a>Для проведения исследований Разработчик ПМ предоставляет материалы в соответствии с требованиями ТЗ. Список материалов для обеспечения исследований может включать:
- <a id="p101828"></a>исходные тексты исследуемого ПМ, МП (передаются при встраивании ПМ в МП);
- <a id="p101829"></a>документы разработчика ПМ (МП), описывающие архитектуру ПМ (МП), модульный состав и назначение модулей, среду исполнения;
- <a id="p101830"></a>описания и комментированные листинги исходных текстов доступа ПМ к функциям встраиваемого СКЗИ. В случае, если ПМ является СКЗИ, передаются исходные тексты доступа МП к функциям СКЗИ;
- <a id="p101831"></a>спецификации вызовов ПМ (описание аргументов и форматов вызовов);
- <a id="p101832"></a>описание процедуры компиляции исходного кода ПМ;
- <a id="p101833"></a>описание внешних вызовов (вызовы операционной среды, аппаратных средств, других программ и т.д.);
- <a id="p101834"></a>эксплуатационную документацию;
- <a id="p101835"></a>дистрибутивы ПМ, МП (передаются при встраивании ПМ в МП).
<a id="p101836"></a>Приведенный список не является исчерпывающим. Лаборатория, проводящая исследования, может запросить дополнительные материалы в соответствии с ТЗ.
<a id="p101837"></a>Разработчик ПМ должен описать трассы вызовов ПМ - СКЗИ в соответствии с документом [[34]](#p100072) для использования данной информации при проведении оценки корректности встраивания СКЗИ в ПМ, а также ПМ в МП.
<a id="p101838"></a>Для проведения исследований Разработчик предоставляет Лаборатории экземпляры МП со встроенным ПМ. МП предоставляются для каждой ОС, в которой функционирует ПМ.
<a id="p101839"></a>Для ПМ, функционирующего в ОС iOS, МП предоставляется через магазин приложений App Store.
<a id="p101840"></a>Для ПМ, функционирующих в ОС Android, ОС HarmonyOS и ОС Аврора, МП предоставляются через магазины приложений Google Play, RuStore, NashStore, AppGallery или в виде rpm-файлов для ОС Аврора или apk-файлов для ОС Android и HarmonyOS с инструкцией по скачиванию и установке на устройство.
<a id="p101841"></a>По результатам исследований в документацию к ПМ могут быть включены требования по защите с использованием организационных мер.
<a id="p101842"></a>Экспертиза результатов исследований ПМ осуществляется ФСБ России.


#### <a id="p101843"></a>4.2.4 Работы по внесению ПМ в Реестр

<a id="p101844"></a>Для внесения ПМ в Реестр при его проектировании и разработке должны быть учтены требования нормативных документов [[14]](#p100050) и [[15]](#p100051).
<a id="p101845"></a>Разработчик должен соответствовать критериям, указанным в [разделе 4.2.2](#p101814) настоящей Спецификации.
<a id="p101846"></a>ПМ должен сопровождаться комплектом документации в соответствии с [разделом 4.3.3](#p101880) настоящей Спецификации.
<a id="p101847"></a>Поскольку ПМ имеет в своем составе сертифицированное СКЗИ, для подачи заявки на включение ПМ в Реестр необходимо положительное решение ФСБ России об оценке влияния (если в правилах пользования СКЗИ не указано иное).
<a id="p101848"></a>Для регистрации ПМ в Реестре должны быть подготовлены и доступны экспертам демонстрационные версии МП со встроенным ПМ. Для ПМ, функционирующего в OS iOS, могут быть представлены исходные тексты проекта и их описание.


### <a id="p101849"></a>4.3 Требования к программной документации



#### <a id="p101850"></a>4.3.1 Общие требования к составу технической документации

<a id="p101851"></a>Разработчик ПМ должен предоставить комплект документации, достаточный для прохождения процедур по оценке влияния ПМ на СКЗИ, а также для включения ПМ в Реестр.
<a id="p101852"></a>Если ПМ является СКЗИ, то состав и содержание предоставляемой документации должны соответствовать стандартному комплекту документов для СКЗИ в соответствии с [[9]](#p100043).


#### <a id="p101853"></a>4.3.2 Требования к документации, предоставляемой для прохождения оценки влияния

<a id="p101854"></a>Требования к составу и содержанию технической документации, предоставляемой в Лабораторию для проведения оценки влияния, перечислены в Таблице 10.

<a id="p101855"></a>Таблица 10 - Документация для проведения оценки влияния


<table>
<colgroup><col width="7%"><col width="26%"><col width="67%"></colgroup>
<tr><td><a id="p101856"></a>N</td><td><a id="p101857"></a>Наименование документа</td><td><a id="p101858"></a>Требования к содержанию</td></tr>
<tr><td colspan="3"><a id="p101859"></a>Эксплуатационная документация</td></tr>
<tr><td rowspan="2"><a id="p101860"></a>1</td><td rowspan="2"><a id="p101861"></a>Руководство разработчика</td><td><a id="p101862"></a>Руководство должно содержать:</td></tr>
<tr><td><a id="p101863"></a>- описание функциональности ПМ;<br>- требования к среде функционирования ПМ;<br>- требования по встраиванию ПМ в МП:<br>- описание сценариев использования ПМ;<br>- требования к разработчику ПМ;<br>- описание интерфейсов ПМ: форматы вызовов, входные и выходные данные.</td></tr>
<tr><td rowspan="2"><a id="p101864"></a>2</td><td rowspan="2"><a id="p101865"></a>Руководство администратора</td><td><a id="p101866"></a>Руководство должно содержать:</td></tr>
<tr><td><a id="p101867"></a>- назначение ПМ;<br>- требования к среде функционирования ПМ;<br>- сведения о встроенном СКЗИ;<br>- правила обращения с ключевыми носителями;<br>- описание конфигурации ПМ;<br>- инструкции по сборке ПМ;<br>- рекомендации по защите от НСД.</td></tr>
<tr><td colspan="3"><a id="p101868"></a>Проектная документация</td></tr>
<tr><td rowspan="2"><a id="p101869"></a>1</td><td rowspan="2"><a id="p101870"></a>Документация разработчика ПМ</td><td><a id="p101871"></a>Документация должна содержать:</td></tr>
<tr><td><a id="p101872"></a>- документ, описывающий структуру ПМ, модульный состав и назначение модулей, среду исполнения;<br>- описания и комментированные листинги исходных текстов доступа ПМ к функциям встраиваемого СКЗИ;<br>- описание процедуры компиляции исходного кода;<br>- спецификацию вызовов: описание аргументов и форматов вызовов.</td></tr>
<tr><td colspan="3"><a id="p101873"></a>Программная документация</td></tr>
<tr><td><a id="p101874"></a>1</td><td><a id="p101875"></a>Исходные тексты ПМ (МП - предоставляются в случае проведения оценки влияния ПМ в составе МП)</td><td><a id="p101876"></a>Исходные тексты ПМ для каждого языка программирования.</td></tr>
</table>


<a id="p101877"></a>**Указанная в [Таблице 10](#p101855) документация предоставляется Лаборатории, проводящей исследования по оценке влияния ПМ на СКЗИ.**
<a id="p101878"></a>**Эксперты Лаборатории проводят анализ полноты и корректности эксплуатационной документации на исследуемый ПМ в части, определяющей порядок использования СКЗИ на соответствие требованиям и рекомендациям, изложенным в эксплуатационной документации на СКЗИ.**
<a id="p101879"></a>**Перечень документов, указанных в [Таблице 10](#p101855), не является исчерпывающим. Лаборатория, проводящая исследование, может запросить дополнительную информацию для уточнения данных.**


#### <a id="p101880"></a>4.3.3 Требования к документации, предоставляемой для включения ПМ в Реестр

<a id="p101881"></a>Требования к составу и содержанию технической документации, предоставляемой при оформлении заявки на внесение ПМ в Реестр, перечислены в Таблице 11.

<a id="p101882"></a>Таблица 11 - Документация для включения ПМ в Реестр


<table>
<colgroup><col width="7%"><col width="26%"><col width="67%"></colgroup>
<tr><td><a id="p101883"></a>N</td><td><a id="p101884"></a>Наименование документа</td><td><a id="p101885"></a>Требования к содержанию</td></tr>
<tr><td rowspan="7"><a id="p101886"></a>1</td><td rowspan="7"><a id="p101887"></a>Руководство разработчика</td><td><a id="p101888"></a>Руководство должно содержать:</td></tr>
<tr><td><a id="p101889"></a>- описание функциональности ПМ;</td></tr>
<tr><td><a id="p101890"></a>- требования к среде функционирования ПМ;</td></tr>
<tr><td><a id="p101891"></a>- требования по встраиванию ПМ в МП:</td></tr>
<tr><td><a id="p101892"></a>- описание сценариев использования ПМ;</td></tr>
<tr><td><a id="p101893"></a>- требования к разработчику ПМ;</td></tr>
<tr><td><a id="p101894"></a>- описание интерфейсов ПМ: форматы вызовов, входные и выходные данные.</td></tr>
<tr><td rowspan="6"><a id="p101895"></a>2</td><td rowspan="6"><a id="p101896"></a>Инструкция по установке ПМ</td><td><a id="p101897"></a>Инструкция по установке полнофункционального или демонстрационного экземпляра МП, содержащего ПМ и предназначенного для экспертной проверки.</td></tr>
<tr><td><a id="p101898"></a>Инструкция должна содержать:</td></tr>
<tr><td><a id="p101899"></a>- системные требования к мобильному устройству для экспертной проверки;</td></tr>
<tr><td><a id="p101900"></a>- для приложения для ОС Android, ОС HarmonyOS и ОС Аврора - доступную ссылку для скачивания файла с приложением и инструкцию по его установке;</td></tr>
<tr><td><a id="p101901"></a>- для приложений для ОС iOS - исходные тексты проекта и его описание;</td></tr>
<tr><td><a id="p101902"></a>- контакты технических специалистов.</td></tr>
<tr><td><a id="p101903"></a>3</td><td><a id="p101904"></a>Описание функциональных характеристик ПМ</td><td><a id="p101905"></a>Документ должен содержать описание функциональных характеристик экземпляра ПМ, предоставленного для экспертной проверки.</td></tr>
<tr><td rowspan="5"><a id="p101906"></a>4</td><td rowspan="5"><a id="p101907"></a>Описание жизненного цикла ПМ</td><td><a id="p101908"></a>Документ должен содержать описание следующих процессов, обеспечивающих поддержание жизненного цикла ПМ:</td></tr>
<tr><td><a id="p101909"></a>- проектирование,<br>- разработка,<br>- тестирование,<br>- приобретение,<br>- поставка,<br>- эксплуатация,<br>- документирование,<br>- поддержка версий ПМ и доработка,<br>- устранение сбойных ситуаций.</td></tr>
<tr><td><a id="p101910"></a>Документ должен содержать полную информацию о персонале организации, осуществляющей доработки и администрирование ПМ, его техническую поддержку, а именно: количество сотрудников и их квалификацию. При описании требований к персоналу необходимо учитывать, что ПМ содержит в своем составе СКЗИ и при его эксплуатации необходимо учитывать требования <a href="https://bukva.ai/docs/prikaz-66-2005#p100122">п. V</a> документа [[9]](#p100043).</td></tr>
<tr><td><a id="p101911"></a>В документ должна быть включена информация о фактических адресах, имеющих отношение к работе над ПМ, в том числе адрес размещения разработчиков, адрес размещения службы технической поддержки и т.п.</td></tr>
<tr><td><a id="p101912"></a>Также документ должен содержать регламент службы технической поддержки: описание процесса обработки заявок, каналы подачи заявок, режим работы и т.п.</td></tr>
<tr><td rowspan="3"><a id="p101913"></a>5</td><td rowspan="3"><a id="p101914"></a>Описание технических средств хранения и компиляции исходного кода</td><td><a id="p101915"></a>Предоставляется в виде письма на бланке с печатью и подписью руководителя.</td></tr>
<tr><td><a id="p101916"></a>Письмо должно содержать информацию о языках программирования, на которых разработан код ПМ, технических средствах хранения исходного текста ПМ, инструментах компиляции, адресах нахождения исходного кода и средств компиляции.</td></tr>
<tr><td><a id="p101917"></a>К письму должен прикладываться документ, подтверждающий, что данные находятся по указанному адресу. Например, договор аренды помещения в случае размещения серверов с данными в офисном помещении или договор с облачным сервисом, если для хранения данных используется облако.</td></tr>
</table>


<a id="p101918"></a>**Требования к составу и содержанию документации составлены на основе документа [[16]](#p100052) и могут изменяться в соответствии с его актуальной версией.**
<a id="p101919"></a>**Указанная документация прикладывается к заявлению о включении сведений о ПО в Реестр и согласуется Экспертным советом Министерства цифрового развития, связи и массовых коммуникаций РФ.**


#### <a id="p101920"></a>4.3.4 Требования к порядку актуализации документации ПМ

<a id="p101921"></a>В документацию ПМ могут вноситься изменения по следующим причинам:
- <a id="p101922"></a>устранение обнаруженных ошибок в ПМ и документации ПМ;
- <a id="p101923"></a>развитие и усовершенствование ПМ;
- <a id="p101924"></a>инициатива владельца ПМ.
<a id="p101925"></a>Любые изменения в документе, которые влекут за собой какие-либо изменения в других документах, должны сопровождаться внесением соответствующих изменений в другие документы.
<a id="p101926"></a>Порядок обновления и необходимость повторной экспертизы ФСБ проектных и/или эксплуатационных документов ПМ должны быть определены в отчетных документах по результатам оценки влияния.
<a id="p101927"></a>**В случае внесения изменений в документы, предоставленные при регистрации ПМ в Реестре, необходимо сформировать Заявление об изменении сведений о программном обеспечении. К заявлению должны быть приложены измененные документы ПМ.**


### <a id="p101928"></a>4.4 Порядок контроля и приемки ПМ



#### <a id="p101929"></a>4.4.1 Виды, состав, объем и методы испытаний ПМ

<a id="p101930"></a>Для ПМ рекомендуется проводить следующие виды испытаний:
- <a id="p101931"></a>предварительные испытания;
- <a id="p101932"></a>приемочные испытания.
<a id="p101933"></a>Предварительные и приемочные испытания ПМ должны быть организованы и проведены в соответствии с [[19]](#p100055).
<a id="p101934"></a>Объем и методы предварительных и приемочных испытаний определяются документом "Программа и методика испытаний".
<a id="p101935"></a>Испытания должны проводиться с помощью демонстрационного или полнофункционального МП, содержащего в составе реализацию ПМ, подлежащую испытаниям. Специальные требования к функциональности демонстрационного приложения в данной спецификации не предъявляются.
<a id="p101936"></a>**Испытания должны проводиться во всех средах функционирования ПМ.**


#### <a id="p101937"></a>4.4.2 Общие требования к приемке работ

<a id="p101938"></a>Предварительные и приемочные испытания должны проводиться Разработчиком ПМ.
<a id="p101939"></a>Программы всех этапов испытаний составляются Разработчиком на основании документа "Программа и методика испытаний".
<a id="p101940"></a>Программы испытаний должны предусматривать следующие виды проверок:
1. <a id="p101941"></a>Проверка комплектности поставки ПМ и пакета документации.
2. <a id="p101942"></a>Проверка содержания документации ПМ.
3. <a id="p101943"></a>Проверка реализации функций ПМ в соответствии с требованиями спецификации.
4. <a id="p101944"></a>Проверка требований к производительности ПМ.
<a id="p101945"></a>По результатам этапов испытаний оформляются отчетные документы. К отчетным документам относятся Протоколы и Отчеты о результатах испытаний.
<a id="p101946"></a>Отчетные документы подписываются членами комиссии и утверждаются председателем комиссии.
<a id="p101947"></a>Предварительные испытания ПМ проводятся для определения его работоспособности, решения вопросов о возможности проведения приемочных испытаний и мероприятий по передаче ПМ в эксплуатацию. Предварительные испытания проводятся после отладки и тестирования ПМ.
<a id="p101948"></a>В случае выявления отклонений от требований Спецификации формируется перечень необходимых доработок и рекомендуемые сроки устранения этих отклонений.
<a id="p101949"></a>ПМ передается на приемочные испытания после устранения отклонений от Спецификации, зафиксированных в протоколе предварительных испытаний. При необходимости документация на ПМ дорабатывается.
<a id="p101950"></a>Приемочные испытания ПМ проводят в соответствии с документом "Программа и методика приемочных испытаний".
<a id="p101951"></a>По завершении приемочных испытаний оформляются соответствующие Протоколы, содержащие вывод о соответствии ПМ предъявляемым требованиям, а также критичность и сроки устранения дефектов, выявленных комиссией в ходе приемочных испытаний.


### <a id="p101952"></a>4.5 Требования к порядку встраивания ПМ в МП



#### <a id="p101953"></a>4.5.1 Требования к организации работ

<a id="p101954"></a>Встраивание ПМ в МП должно осуществляться в соответствии с порядком и требованиями, описанными в технической документации на ПМ и в документе [[7]](#p100041).
<a id="p101955"></a>Если ПМ является СКЗИ, то его встраивание в МП должно осуществляться в соответствии с правилами пользования СКЗИ и положениями документа [[9]](#p100043).
<a id="p101956"></a>При планировании и организации работ по встраиванию ПМ в МП необходимо учитывать, что в соответствии с [п. 4.1](https://bukva.ai/docs/683-p#p1). документа [[25]](#p100061), МП должно пройти сертификацию в системе сертификации Федеральной службы по техническому и экспортному контролю или оценку соответствия по требованиям к оценочному уровню доверия (далее - ОУД) не ниже, чем ОУД 4, в соответствии с требованиями национального стандарта Российской Федерации [[8]](#p100042), или обеспечить выполнение требований документа [[26]](#p100062) в случаях, когда это необходимо.
<a id="p101957"></a>Работы по встраиванию ПМ в МП должны соответствовать требованиям [Приложения 2](https://bukva.ai/docs/833-p#p100120) документа [[29]](#p100065).
<a id="p101958"></a>Работы по встраиванию ПМ в МП должны включать работы по оценке влияния аппаратных, программно-аппаратных и программных средств сети (системы) конфиденциальной связи, совместно с которыми предполагается штатное функционирование ПМ, на выполнение предъявленных к входящему в его состав СКЗИ требований, если в документе [[9]](#p100043) или в эксплуатационной документации на СКЗИ указывается на необходимость их проведения.


#### <a id="p101959"></a>4.5.2 Требования к разработчику МП

<a id="p101960"></a>Для встраивания ПМ в МП разработчик должен:
- <a id="p101961"></a>иметь опыт программирования на языках Kotlin или Java, Swift, C++;
- <a id="p101962"></a>обладать знаниями о современных стандартах в области криптографии и защиты информации;
- <a id="p101963"></a>знать требования документов [[11]](#p100047), предъявляемые к сертификатам ПлЦР, в случае использования ПМ для выполнения операций с ЦР;
- <a id="p101964"></a>соответствовать требованиям, предъявляемым к разработчикам в документе [[26]](#p100062) для прохождения оценки соответствия ОУД4;
- <a id="p101965"></a>иметь лицензию ФСБ России на разработку, производство, распространение шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств, выполнение работ, оказание услуг в области шифрования информации, техническое обслуживание шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств (за исключением случая, если техническое обслуживание шифровальных (криптографических) средств, информационных систем и телекоммуникационных систем, защищенных с использованием шифровальных (криптографических) средств, осуществляется для обеспечения собственных нужд юридического лица или индивидуального предпринимателя) на виды работ из [Приложения](https://bukva.ai/docs/postanovlenie-313-2012#p100086) к Положению [[18]](#p100054), в части [пунктов 1](https://bukva.ai/docs/postanovlenie-313-2012#p100087) <7>, [2](https://bukva.ai/docs/postanovlenie-313-2012#p100088), [3](https://bukva.ai/docs/postanovlenie-313-2012#p100089).

<a id="p101966"></a>

---

<a id="p101967"></a><7> В случаях, когда ПМ является СКЗИ


#### <a id="p101968"></a>4.5.3 Требования к совместимости с МП

<a id="p101969"></a>ПМ должен быть совместим с платформой разработки приложения или языком программирования для интеграции в существующую кодовую базу.
<a id="p101970"></a>ПМ не должен оказывать негативного влияния на производительность приложения, время автономной работы или потребление данных.


#### <a id="p101971"></a>4.5.4 Требования к использованию функций ПМ

<a id="p101972"></a>При использовании методов ПМ должен выполняться контроль кодов возврата, возникающих при отклонениях от штатного выполнения команд.
<a id="p101973"></a>Все вызовы методов интерфейса ПМ должны осуществляться вне основного потока приложения.
<a id="p101974"></a>Вызов функций ПМ для осуществления защиты ЭС в случае выполнения операций с ЦР должен осуществляться в соответствии с требованиями документов, входящих в [[11]](#p100047).
<a id="p101975"></a>Реализация сценариев выпуска ключей и сертификатов должна соответствовать описаниям в документах [[28]](#p100064) и [[31]](#p100067).


#### <a id="p101976"></a>4.5.5 Требования к механизмам доставки транспортных сертификатов и сертификатов проверки ЭП

<a id="p101977"></a>МП должно содержать встроенный транспортный ГОСТ-TLS сертификат, корневые (самоподписанные) сертификаты УЦ Безопасности и ПУЦ УНЭП для установления соединения с сервисами финансовой организации и сертификат УЦ БР. При изменении данных сертификатов требуется обновление МП. Другие сертификаты должны загружаться в СКЗИ путем вызова соответствующей функции ПМ (см. [п. 3.4.2](#p101614). и [3.2.3.5](#p100868) настоящей Спецификации).
<a id="p101978"></a>В МП должны быть предусмотрен механизм обновления транспортного ГОСТ-TLS сертификата финансовой организации, сертификатов проверки ЭП финансовой организации, а также соответствующих цепочек сертификатов, включающих все промежуточные сертификаты. Для финансовой организации являющейся участником ПлЦР это сертификаты проверки ЭП КО и КК участника ПлЦР, КО и КК ПлЦР.
<a id="p101979"></a>При обновлении сертификатов МП приложение должно вызывать соответствующий метод ПМ для загрузки сертификатов в СКЗИ.


### <a id="p101980"></a>4.6 Поддержка жизненного цикла ПМ

<a id="p101981"></a>Разработчику ПМ рекомендуется предоставлять следующие услуги по обеспечению сопровождения ПМ:
- <a id="p101982"></a>консультации по настройке и администрированию;
- <a id="p101983"></a>консультации для разработчиков МП при встраивании ПМ;
- <a id="p101984"></a>диагностику неисправностей и исправление найденных ошибок функциональности ПМ;
- <a id="p101985"></a>устранение выявленных уязвимостей ПМ;
- <a id="p101986"></a>поддержание программной и эксплуатационной документации ПМ в актуальном состоянии.
<a id="p101987"></a>При выпуске новой версии ПМ разработчику рекомендуется предоставить обновленный пакет документации и пройти процедуру оценки влияния на СКЗИ (описание см. в [п. 4.2.3](#p101819) настоящей Спецификации) в случае:
- <a id="p101988"></a>изменения требований к условиям функционирования ПМ, а именно изменения требований к программной и/или аппаратной среде функционирования;
- <a id="p101989"></a>изменения функциональных требований к ПМ;
- <a id="p101990"></a>изменения конфигурации или версии программного и аппаратного обеспечения, используемого в СКЗИ;
- <a id="p101991"></a>выявления уязвимостей или инцидентов, которые могут повлиять на безопасность СКЗИ.
<a id="p101992"></a>Дополнительные условия, при которых ПМ должен проходить оценку влияния в случае внесения изменений в программный код или документацию ПМ, также могут быть указаны в отчетной документации по результатам оценки влияния.


### <a id="p101993"></a>4.7 Характеристики пользователей и персонала



#### <a id="p101994"></a>4.7.1 Требования к пользователям ПМ

<a id="p101995"></a>Пользователями ПМ являются пользователи МП, совершающие операции с ЦР или другие финансовые операции через дистанционные каналы обслуживания финансовых организаций.
<a id="p101996"></a>Требования к квалификации пользователей ПМ в настоящей Спецификации не описываются.


#### <a id="p101997"></a>4.7.2 Требования к персоналу, обеспечивающему техническую поддержку и модернизацию ПМ

<a id="p101998"></a>Для сопровождения ПМ рекомендуется создать Службу технической поддержки. При создании Службы технической поддержки необходимо учитывать, что ПМ имеет в своем составе СКЗИ. Любые работы по поддержке и модернизации ПМ должны выполняться с учетом требований правил пользования СКЗИ и положения [[9]](#p100043). Режим и технология работы Службы технической поддержки должны быть определены на стадии проектирования ПМ и описаны организацией - разработчиком ПМ в документе "Описание жизненного цикла ПМ".
<a id="p101999"></a>Конкретный состав, должностные обязанности, режим и технология работы Службы технической поддержки должны быть определены на стадии проектирования ПМ и описаны в документе "Описание жизненного цикла ПМ" (см. [п. 4.3.3](#p101880) настоящей Спецификации).



<a id="p100004"></a>

---
