ГОСУДАРСТВЕННАЯ НАЛОГОВАЯ АДМИНИСТРАЦИЯ УКРАИНЫ
Унифицированный формат транспортного сообщения
при информационном взаимодействии плательщиков налогов
и налоговых органов в электронном виде
по телекоммуникационным каналам связи с использованием
электронной цифровой подписи
Утверждено приказом от 12.07.2010 г. № 499
Унифицированный формат транспортного сообщения для обмена информацией между плательщиками налогов и налоговыми органами в электронном виде с использованием электронной цифровой подписи (далее — Унифицированный формат транспортного сообщения) применяется для организации обмена электронными документами между плательщиками налогов и налоговыми органами непосредственно и по телекоммуникационным каналам связи с использованием электронной цифровой подписи (далее — ЭЦП). Обмен электронными документами осуществляется с помощью транспортного сообщения (далее — ТС), состоит из реквизитов ТС и транспортного контейнера, содержащего зашифрованные данные (электронные отчеты, квитанции и т. п.).
Квитанции о приеме электронных документов, созданные налоговыми органами, являются электронными документами и передаются плательщику налогов в унифицированном формате транспортного сообщения, регламентированном в настоящем документе.
1. ПУТИ ОБМЕНА ИНФОРМАЦИЕЙ
Обмен информацией между плательщиками налогов и налоговыми органами в электронном виде может проводиться двумя путями:
— электронный документ передается непосредственно в налоговый орган на электронном носителе информации (дискета, флэш-накопитель и т. п.);
— электронный документ передается в налоговый орган по телекоммуникационным каналам связи.
2. ТРЕБОВАНИЯ К КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЕ ИНФОРМАЦИИ
Все криптографические преобразования выполняются средствами систем криптографической защиты информации (СКЗИ), которые должны отвечать следующим требованиям:
— реализовывать процедуры формирования и проверки ЭЦП в соответствии с национальным стандартом ДСТУ 4145-2002;
— реализовывать процедуры открытого распределения ключей в соответствии с национальным стандартом ДСТУ ISO IEC 15946-3:2006;
— реализовывать процедуры симметричной шифровки в соответствии с региональным ГОСТ 28147-89;
— быть сертифицированными в соответствии с законодательством Украины.
Функции библиотек криптографических преобразований, предоставляемых центрами сертификации ключей для интеграции в систему приема и обработки налоговой отчетности, должны отвечать спецификациям криптографических преобразований, изложенных в приложении 3.
3. УНИФИЦИРОВАННЫЙ ФОРМАТ ТРАНСПОРТНОГО СООБЩЕНИЯ
Унифицированный формат транспортного сообщения поддерживает все действующие типы электронных документов информационного взаимодействия, обусловленных порядком подачи налоговой отчетности в соответствии с действующим законодательством Украины и другими нормативными актами Государственной налоговой администрации Украины.
Схема унифицированного транспортного сообщения представлена на рис. 1.
ДОК1, 2, …k — файл электронного документа;
ЭЦП1, 2, …n — одна либо несколько электронно-цифровых подписей, которыми заверен документ;
С1, 2, …n — один либо несколько блоков с сертификатами ключей ЭЦП, которыми заверен документ.
4. ТРЕБОВАНИЯ К СТРУКТУРЕ ТРАНСПОРТНОГО СООБЩЕНИЯ, КОТОРОЕ ПЕРЕДАЕТСЯ по ТЕЛЕКОММУНИКАЦИОННЫМ КАНАЛАМ СВЯЗИ
Транспортное сообщение представляет собой файл в формате электронной почты (MIME), оформленный по стандарту RFC-1521.
Файл, содержащий транспортный контейнер, входит в транспортное сообщение как файл-вложение («Content-Disposition: attachment»). Имя файла-вложения указано в поле «filename». Размер файла транспортного контейнера не может быть нулевым.
Транспортное сообщение может иметь только одного получателя.
Одно транспортное сообщение должно содержать только один вложенный в него транспортный контейнер. Размер транспортного сообщения не должен превышать 10 Мбайт.
Идентификационный код плательщика налогов по ЕГРПОУ или индивидуальный налоговый номер физического лица (далее — ЕГРПОУ).
Заглавие транспортного сообщения должно содержать такие обязательные поля:
«
From:» — поле, содержащее имя отправителя в кодировке «Quoted Printable/Windows 1251» или «Base64/Windows 1251» и электронный адрес отправителя, помещенный в угловые скобки < >;«
Reply-To:» — поле, содержащее имя отправителя в кодировке «Quoted Printable/Windows 1251» или «Base64/Windows 1251» и электронный адрес отправителя, помещенный в угловые скобки < >;«
To:» — поле, содержащее имя получателя в кодировке «Quoted Printable/Windows 1251» или «Base64/Windows 1251» и электронный адрес получателя, помещенный в угловые скобки < >;«
MESSAGE-ID:» — поле, содержащее уникальный, в пределах организации отправителя, идентификатор сообщения произвольного формата с длиной, не превышающей 40 символов;«
Content-Transfer-Encoding:» — поле, содержащее механизм кодировки тела сообщения. Допустимые значения: «Quoted Printable/Windows 1251», «Base64».Присоединенному файлу вложения должны отвечать поля:
«
Content-Type:», содержащее ключевое слово «application/octet-stream» и параметр «name=». Параметр «name» должен содержать имя файла вложения. Имя файла должно кодироваться в Quoted Printable/Windows 1251 или Base64/Windows 1251.«
Content-Disposition:», содержащее ключевое слово «attachment» и параметр «filename». Имя файла должно кодироваться в Quoted Printable/Windows 1251 или Base64/Windows 1251.«
Content-Length:», содержащее длину вложения.«
Subject:» — содержание поля представлено в кодировке «Quoted Printable/Windows 1251» или «Base64/Windows 1251», определяется типом документа и именем присоединенного транспортного контейнера.Пример транспортного сообщения, которое содержит документ налоговой отчетности (расчет), приведен в приложении 1.
Пример файла документа налоговой отчетности приведен в приложении 2.
5. ТРЕБОВАНИЯ К СТРУКТУРЕ ТРАНСПОРТНОГО КОНТЕЙНЕРА ДЛЯ ПЕРЕДАЧИ ДОКУМЕНТОВ в НАЛОГОВый ОРГАН
5.1 Обобщенный формат транспортного контейнера для передачи документов в налоговый орган
Заглавие транспортного контейнера
Реквизиты шифровки данных
Зашифрованные данные
5.2 Перечень блоков данных транспортного контейнера для передачи документов в налоговый орган
Зашифрованный блок данных
Формат зашифрованного блока данных:
Элемент | Значение |
Сигнатура
| "XXX_ CRYPT", где XXX — код Центра сертификации электронных ключей: "A", "B", "C" … — символьный идентификатор, присвоенный АЦСК* |
0-символ
|
|
4 байта
| размер зашифрованного документа
|
Зашифрованный документ
|
|
Подпись
Формат подписи:
Элемент | Значение |
Сигнатура
| "XXX_SIGN", где XXX — код Центра сертификации электронных ключей: “A”, “B”, “C” … — символьный идентификатор, присвоенный АЦСК* |
0-символ
|
|
4 байта
| размер буфера подписи и подписанных данных
|
Буфер подписи и подписанных данных
|
|
Отметка времени
Отметка времени получается из АЦСК по протоколу TSP (Timestamp Protocol). Формат отметки времени:
Элемент | Значение |
1 | 2 |
Сигнатура
| "XXX_STAMP", где XXX — код Центра сертификации электронных ключей: "A", "B", "C" … — символьный идентификатор, присвоенный АЦСК*
|
0-символ
|
|
4 байта
| размер хеша оригинального документа
|
хеш оригинального документа
|
|
4 байта
| размер буфера отметки времени
|
Буфер отметки времени
|
|
4 байта
| размер данных, на которые наложена отметка времени
|
Блок данных, на которые наложена отметка времени
|
|
* Символьный идентификатор, присвоенный АЦСК, называется по порядку букв латинского алфавита в соответствии с очередностью прохождения ими аккредитации в Украине. То есть первому аккредитованному ЦСК в Украине будет присвоен символ «А», второму по времени аккредитации — символ «В», третьему — «С», далее согласно латинскому алфавиту.
Заглавие транспортного контейнера
Транспортное заглавие документа содержит информацию о передаваемом документе. Формат транспортного заглавия документа:
Элемент | Значение |
Сигнатура | " TRANSPORTABLE" |
0-символ |
|
4-байтовый размер транспортного заглавия | без учета длины сигнатуры и 0-символа |
CR/LF | символы возвращения каретки (0D) и перевода строки (0A) |
Строка 1 | последовательность вида <Тег>=<Значение> |
Строка 2 |
|
… |
|
Строка n |
|
Теги, используемые в транспортном заглавии документа:
Наименование | Значение | Обязательность заполнения |
1 | 2 | 3 |
FILENAME
| Имя отправляемого файла в верхнем регистре (в кодировке Win1251), заканчивающееся символом CHR(13)+ CHR(10)
| Да
|
SND_NAME
| Наименование/ФИО подающего отчет плательщика налогов (в кодировке Win1251), заканчивающееся символом CHR(13)+ CHR(10)
| Нет
|
SND_EMAIL
| E-Mail отправителя (в кодировке Win1251), заканчивающийся символом CHR(13)+ CHR(10)
| Нет
|
RCV_NAME
| Наименование получателя (в кодировке Win1251), заканчивающееся символом CHR(13)+ CHR(10)
| Нет
|
RCV_EMAIL
| E-Mail получателя (в кодировке Win1251), заканчивающийся символом CHR(13)+ CHR(10)
| Да
|
PRG_TYPE
| Название программного обеспечения для наложения и проверки ЭЦП отправителя длиной не более десяти символов (в кодировке Win1251), заканчивающееся символом CHR(13)+ CHR(10)
| Да
|
PRG_VER
| Версия программного обеспечения для наложения и проверки ЭЦП отправителя длиной не более десяти символов (в кодировке Win1251), заканчивающаяся символом CHR(13)+ CHR(10)
| Нет
|
SND_DATE
| Дата и время отправления в формате YYYYMMDDHHNNSS без распределителей, заканчивающиеся символом CHR(13)+ CHR(10)
| Да
|
CERTYPE
| Символьный идентификатор, присвоенный АЦСК (XXX), заканчивающийся символом CHR(13)+ CHR(10)
| Да
|
CRC32_SIGN
| Контрольная сумма согласно алгоритму CRC32 зашифрованного блока данных, заканчивающаяся символом CHR(13)+ CHR(10)
| Да
|
CRC32_FILE
| Контрольная сумма согласно алгоритму CRC32 подписанного блока данных, заканчивающаяся символом CHR(13)+ CHR(10)
| Да
|
SUBJECT
| Тип документа налоговой отчетности (в кодировке Win1251), заканчивающийся символом CHR(13)+ CHR(10)
| Да
|
GET_STAMP
| Признак необходимости передачи в ответ отметки времени
| Нет
|
RESULT
| Результат приема сообщения (0 — успешно, 1 — ошибка, 2 — предупреждение)
| Нет
|
5.3 Форматы сообщений, отсылаемых в транспортном контейнере для передачи документов в налоговый орган
Формат сообщения «Документ»
Сообщение передается от плательщика налогов в налоговый орган.
Структура:
1. Подпись отправителя.
2. Транспортное заглавие документа.
3. Блок данных, зашифрованный на получателя, содержит подписи плательщика налогов и блок с документом в формате XML.
Внимание!
Подписи плательщика должны налагаться в таком порядке:1. Подписанная секция (XXX_SIGN) — подписанная ключом главного бухгалтера (при условии наличия должности на предприятии).
2. Подписанная секция (XXX_SIGN) — подписанная ключом директора (руководителя) предприятия.
3. Подписанная секция (XXX_SIGN) — подписанная ключом цифровой печати предприятия (при условии ее наличия).
4. Подписанная секция (XXX_SIGN) — подписанная ключом цифровой печати филиала предприятия (при условии наличия филиала на предприятии).
5. Блок с документом в формате XML.
Формат сообщения «Документ с отметкой времени»
Сообщение передается от налогового органа к плательщику налогов.
Сообщение является ответом налогового органа на запрос документа.
Структура:
1. Транспортное заглавие документа.
2. Блок данных, зашифрованный на получателя:
2.1. Подпись налогового органа.
2.2. Отметка времени на момент получения документа от плательщика налогов.
2.3. Подписи плательщика налогов.
2.4. Блок с документом в формате XML.
Формат сообщения «Ответ на документ»
Сообщение передается от налогового органа к плательщику налогов. Сообщение является ответом налогового органа на переданный документ. Например, квитанция о назначении регистрационного номера.
Структура:
1. Подпись налогового органа.
2. Транспортное заглавие документа.
3. Блок, зашифрованный на плательщика налогов, содержит подписи и текст ответа налогового органа.
Формат сообщения «Ответ на документ с отметкой времени»
Сообщение передается от налогового органа к плательщику налогов. Сообщение является ответом налогового органа на переданный документ, если транспортное заглавие документа содержит тег «GET_STAMP=1». Например, квитанция о назначении регистрационного номера.
Структура:
1. Отметка времени.
2. Подпись налогового органа.
3. Транспортное заглавие документа.
4. Блок, зашифрованный на плательщика налогов, содержит подписи и текст ответа налогового органа.
Приложение 1
ПРИМЕР ТРАНСПОРТНОГО СООБЩЕНИЯ, КОТОРОЕ СОДЕРЖИТ ДОКУМЕНТ НАЛОГОВОЙ ОТЧЕТНОСТИ
From:
"deklarenko@podatok.com" < deklarenko@podatok.com >Subject: Zvit_to_STA_Report_Package:00000126
To: r2658@kyivsta.gov.ua
Content-Type: multipart/mixed; boundary=
"nKL74aFLyX=_quTCo1fSXn7ExWmSEcWQKL"MIME-Version: 1.0
Reply-To: deklarenko@podatok.kiev.ua
Date: Tue, 8 Apr 2008 06:55:18 + 0300
X-Mailer: Best Zvit MailAgent (v.08.001.0016)
Message-Id: <E1Jj7og-0005FF-PO@ podatok.kiev.ua>
This is a multi-part message in MIME format
--nKL74aFLyX=_quTCo1fSXn7ExWmSEcWQKL
Content-Type: text/plain; сharset=
"windows-1251"Content-Transfer-Encoding: 8bit
deklarenko@podatok.com
00000126
Закрите акціонерне товариство
"Нагляд"Петров Петро Петрович
--nKL74aFLyX=_quTCo1fSXn7ExWmSEcWQKL
Content-Type: application/octet-stream;
name=
"26580000000126J020010610000132032008.XML"Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=
"26580000000126J020010610000132032008.XML"
VFJBTlNQT1JUQUJMRQBsAQAARklMRU5BTUU9MjY1ODAwMDAwMDAxMjZKMDIwMDEwNjEwMDAwMTMy
MDMyMDA4LlhNTA0KRURSUE9VPTAwMDAwMTI2DQpTTkRfTkFNRT0gx+Dq8Ojy5SDg6vaz7u3l8O3l
IPLu4uDw6PHy4u4gIs3g4+v/5CINClNORF9FTUFJTD1jaGVwb3N0QGludGVsc2Vydi5raWV2LnVh
DQpSQ1ZfRU1BSUw9Y2hlcG9zdEBpbnRlbHNlcnYua2lldi51YQ0KUFJHX1RZUEU9QlpfUExVUw0K
UFJHX1ZFUj04NTQwMDANClNORF9EQVRFPTIwMDgwNDA4MTAwMDI2DQpDRVJUWVBFPVVTQw0KRFBB
X0NEPTI2NTgNCkNSQzMyX1NJR049Qzk1QjRCMDcNCkNSQzMyX0ZJTEU9NDFGNjgwNkQNClNVQkpF
Q1Q9x+Jp8u3gICDP7uTg8uru4uAg5OXq6+Dw4Paz/yDnIM/Ewg0KAFVTQ19DUllQVAAOAwAAMIID
CjCCArKgAwIBAgICIBcwDQYLKoYkAgEBAQEDAQEwTDELMAkGA1UEBhMCVUExETAPBgNVBAcMCNCa
0LjRl9CyMSowKAYDVQQDDCHQptCh0Jog0KLQntCSICLQo9Ch0KYiICjRgtC10YHRgikwHhcNMDcw
NDEzMDk0MjI5WhcNMDgwNDEyMDk0MjI5WjCB9DELMAkGA1UEBhMCVUExQjBABgNVBAoMOdCU0J9J
INCjINCh0J7Qm9Ce0Jwn0K/QndCh0KzQmtCe0JzQoyDQoC3QnUkg0Jwu0JrQmNCE0JLQkDERMA8G
A1UECwwIMjI2ODg4NjAxQjBABgNVBAMMOdCU0J9JINCjINCh0J7Qm9Ce0Jwn0K/QndCh0KzQmtCe
0JzQoyDQoC3QnUkg0Jwu0JrQmNCE0JLQkDE+MDwGA1UEEAw1MDMxNTEsINC8LtCa0LjRl9CyLCDQ
stGD0Lsu0KHQvNGW0LvRj9C90YHRjNC60LAsINCxLjYxCjAIBgNVBC4MATIwXTAgBg0qhiQCAQEB
AQMBAQEBMA8GDSqGJAIBAQEBAwEBAgkDOQAENggKYG8dpjombuOKKHjU8EmJs6mx7/i8jQBGRnXF
QewQfz6SWn2MACp4p10+cy9ycAdlwg8c66OB0zCB0DAfBgNVHREEGDAWgRRyMjY1OEBreWl2c3Rh
Lmdvdi51YTApBgNVHQ4EIgQgK9puJeBtvEuvL+x8hHjhyvDkJ2UhesH2WMHGDXFoMa0wJQYDVR0J
BB4wHDAaBgwqhiQCAQEBCwEEAgExChMIMjI2ODg4NjAwDgYDVR0PAQH/BAQDAgTwMB4GCCsGAQUF
BwEDAQH/BA8wDTALBgkqhiQCAQEBAgEwKwYDVR0jBCQwIoAg9ZI+eWr6Mnhv09/u27LVMD1lhQL/
rXDVIM01FUJHBvUwDQYLKoYkAgEBAQEDAQEDQwAEQEnfst10pV6MWBXYaHozzoxTBeEu9agZgOZS
GB3cO9ES9nNMtduB0/pBT0e8sK9hH63CrgHlIB21K3vvVdCHMjUMDQoOAAMIAgsEAQUPCQcGCgAB
DwsEDAMJAg0OBwYIBQ0FBAkOCwEABgwPCgIDCAcNAwwKAAQODwUIBgIBCwcJBQMJDwoLDAQHDg0C
AQAGCAUGDwILDQgKBA4BAAcDDAkGAg8KCA4MCQcBBQ0DAAQLDgMMCwkBDQUCAA8GBAgKB8a9JmfQ
ZultcgAAADBwBDZNCLod3+5SylvAYl8T4HxiXC5P493EjwKM0i1V1LCEKxNt142tBM+DPaIGWZoc
fh9EPcwCb+IENmf1eeElrJyJJ9/qoSOS2yVjFY4J2j54dbhLSkgi/Avpkxa6lt1VlT5kwnRoThIW
VyMmV/UCMAUfUgYOIYoMiQqr1QTC/LrhQ0KoOk2WEBClrANuM2LzPDfYSQYDngU+G8ou9mbSp05y
mTFYkq3n0/h+D1uQDZUAAAAABAsAABu8CngVM5kQtdMgX6Qi4jLsoMFaUwLfkkXU1o55ZV7JiyOw
f1SQdp4xaYonmxaJXiQBbvWoMsHfZIhtkHcHTroKR+SRuT4iORQMJ4M/66wkjrISwunbPBwmAk73
yBWAzfev17laDETqfqDK62xp9PgI+4WVtMV5pbIM8iYTblkpioy28WYhzzL2ITJwwoQgtZw+915z
PWX2IwnqSbq8TnzsUlQhxm5ZNIgI5eHwk4XIiHzaPd7hxoSXSAPFwybXnysQWHrDuNM+TtowaQ7Q
3onAPSqexqJjB+6RnEpKkQyyBT0pZ4a+FfbZ4OuWxVXsLTxSkWPZxkvZuJ3rN+gQN92GisT+wvwX
D/U2yvg6/q7jh7BmDdfaLI1eQlVcbjO3cXT9v2v7QmBbhvID12jGP2P3PT/BwUyzQQjBSuZXcpb9
w8J/ZdqL2S8GW16CsPAqq7Vu24ejfRa60wfMLWGsRZ9e0AKMNCBeTxDpaT/Atye1E1NiGKhjPGUJ
FlAVVgnqPsHwxVuPo2PRPys2Mzz6vPQkR/rIyaSWZbSY6jeRlbY/EGi72PELwACEjsQ2smeqrqN9
np1wswtZupOWazKP4GfSTMhR/vQd10FfPAKB5ggcY826bUPsPqWOtZ7PdMJCaItqTsywHRphwbPu
y2VeWunrb7jsyZvEeHkP1swe3hY/JajIuhnne6V4I7W6S6O/m/0JigLPhISth4wHxl47wwQE6cTw
2dJmrtAKxnGAN1AJxUHyiMKmwSR5MwVAqMffB8k56G+zcvfJDqY7t62IUaVrxLv8juEN5+k6ypY1
NnNoLJNVNZ1rSUturt9WiJTAlYARkX3lzQq94azUsv9N2kLPS0r9jSd9eBbhP51frA==
--nKL74aFLyX=_quTCo1fSXn7ExWmSEcWQKL—
Приложение 2
ПРИМЕР ФАЙЛА ДОКУМЕНТА НАЛОГОВОЙ ОТЧЕТНОСТИ
Имя файла:
26580000000126J020010610000134052008.XML
Содержание файла:
<?xml version=
"1.0" encoding="windows-1251"?><DECLAR xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation=
"J0200106.XSD"><DECLARHEAD>
<TIN>00000126</TIN>
<C_DOC>J02</C_DOC>
<C_DOC_SUB>001</C_DOC_SUB>
<C_DOC_VER>6</C_DOC_VER>
<C_DOC_TYPE>0</C_DOC_TYPE>
<C_DOC_CNT>134</C_DOC_CNT>
<C_REG>26</C_REG>
<C_RAJ>58</C_RAJ>
<PERIOD_MONTH>5</PERIOD_MONTH>
<PERIOD_TYPE>1</PERIOD_TYPE>
<PERIOD_YEAR>2008</PERIOD_YEAR>
<C_DOC_STAN>1</C_DOC_STAN>
<D_FILL>03042008</D_FILL>
<SOFTWARE/>
</DECLARHEAD>
<DECLARBODY>
<HZ>1</HZ>
<HZY>2008</HZY>
<HZM>05</HZM>
<HZYP xsi:nil
"true"></HZYP><HNAME> Закрите акц_онерне товариство "Нагляд"
<HTINJ>00000126</HTINJ>
<HDDGVSD xsi:nil=
"true"></HDDGVSD><HNDGVSD xsi:nil=
"true"></HNDGVSD><HNPDV>236476834278</HNPDV>
<HNSPDV>3266664-ГГ
<HLOC>12345, м.М.КИЇВ, Перемоги, б.32
<HZIP>12345</HZIP>
<HTEL>678876</HTEL>
<HFAX xsi:nil="true"></HFAX>
<HEMAIL>deklarenko@ podatok.kiev.ua</HEMAIL>
<HSTI>ДП_ У СОЛОМ'ЯНСЬКОМУ Р-Н_ М.КИЄВА
<R10GA>150</R10GA>
<R10GB>30</R10GB>
<R21GA xsi:nil="true"></R21GA>
<R22GA xsi:nil="true"></R22GA>
<R30GA xsi:nil="true"></R30GA>
<R40GA xsi:nil="true"></R40GA>
<R50GA>150</R50GA>
<R52GA>150</R52GA>
<R52GB xsi:nil="true"></R52GB>
<R60GA xsi:nil="true"></R60GA>
<R60GB>0</R60GB>
<R60GAD xsi:nil="true"></R60GAD>
<R70GA xsi:nil="true"></R70GA>
<R70GB>0</R70GB>
<R82GB>0</R82GB>
<R83GA xsi:nil="true"></R83GA>
<R83GB>0</R83GB>
<R90GB>30</R90GB>
<R101GB>0</R101GB>
<R102GA xsi:nil="true"></R102GA>
<R110GA>0</R110GA>
<R121GB>0</R121GB>
<R122GA xsi:nil="true"></R122GA>
<R122GB>0</R122GB>
<R123GA xsi:nil="true"></R123GA>
<R124GA xsi:nil="true"></R124GA>
<R124GB>0</R124GB>
<R125GA xsi:nil="true"></R125GA>
<R125GB>0</R125GB>
<R162GA xsi:nil="true"></R162GA>
<R162GB>0</R162GB>
<R163GB xsi:nil="true"></R163GB>
<R170GB>0</R170GB>
<R181GB>30</R181GB>
<R182GB>0</R182GB>
<R200GB>30</R200GB>
<R210GB>0</R210GB>
<R222GB>0</R222GB>
<R230GB>0</R230GB>
<R240GB>0</R240GB>
<R260GB>0</R260GB>
<R270GB>30</R270GB>
<R20G16S xsi:nil="true"></R20G16S>
<HFILL>03042008</HFILL>
<HBOS> Петров Петро Петрович
<HBUH>Ваніліна Олена Петрівна
<HFO xsi:nil="true"></HFO>
</DECLARBODY>
<!-— YOUR_ID="58762" —>
</DECLAR>
Приложение 3
СПЕЦИФИКАЦИЯ КРИПТОГРАФИЧЕСКИХ ФУНКЦИЙ
1. Введение
В документе дается описание унифицированной библиотеки функций, предназначенных для криптографических преобразований информации. Библиотека предназначена для применения при разработке программного обеспечения в любой среде разработки (Microsoft Visual C++, Visual Basic, C#, CodeGear RAD Studio и т. п.).
2. Общие требования
1. Работа в среде Microsoft Windows 98/2000/XP/Vista/7, Linux (RadHat, Suse).
2. Многопоточность.
3. Библиотека должна поставляться для платформ х86 и х64.
4. Передача параметров по соглашению __stdcall.
5. Память под блоки с результатом работы функций выделяется вызывающей стороной.
3. Поставка библиотеки
Библиотека поставляется в виде dll для Windows сред и so для Linux сред. Имя dll и so: Crypt_XXX.dll и Crypt_XXX.so, где XXX — имя поставщика библиотеки.
Доступ к функциям dll и so выполняется функцией GetProcAddress.
Библиотеки поставляются вместе с заглавными файлами с расширением (*.h), содержащими исчерпывающее описание функций библиотеки.
1. Функция наложения подписи
int __stdcall MakeSign (const void* pkbuf, int pklen, const char* pwd,
const void* hashbuf, void* signbuf, int* signlen);
Параметр | Описание |
const void* pkbuf
| Буфер с секретным ключом
|
int pklen
| Размер буфера с секретным ключом
|
const char* pwd
| Пароль секретного ключа, должен заканчиваться символом '\0'
|
const void* hashbuf
| Буфер с хешем документа, размер 32 байта
|
void* signbuf
| Буфер для подписи, если NULL — в signlen возвращается размер
|
int* signlen
| Размер подписи в буфере
|
Функция возвращает 0 при успешном выполнении, или код ошибки.
2. Функция проверки подписи
int __stdcall VerifySign (const void* certbuf, int certlen, const void* hashbuf, const void* signbuf, int signlen);
Параметр | Описание |
const void* certbuf
| Буфер с сертификатом
|
int certlen
| Размер буфера с сертификатом
|
const void* hashbuf
| Буфер с хешем документа, размер 32 байта
|
const void* signbuf
| Буфер с подписью
|
int signlen
| Размер буфера с подписью
|
Функция возвращает 0, если подпись верна, или код ошибки.
3. Функция проверки сертификата
int __stdcall VerifyCert (const void* certbuf, int certlen, const void* rootcbuf, int rootclen);
Параметр | Описание |
1 | 2 |
const void* certbuf
| Буфер с сертификатом
|
int certlen
| Размер буфера с сертификатом
|
const void* rootcbuf
| Буфер с корневым сертификатом
|
int rootclen
| Размер буфера с корневым сертификатом
|
Функция возвращает 0, если сертификат соответствует корневому, или код ошибки.
4. Функция шифровки блока данных
int __stdcall Encrypt (const void* certbuf, int certlen, const void* docbuf, int doclen, void* outbuf, int* outlen);
Параметр | Описание |
const void* certbuf
| Буфер с сертификатом
|
int certlen
| Размер буфера с сертификатом
|
const void* pkbuf
| Буфер с секретным ключом
|
int pklen
| Длина буфера с секретным ключом
|
const char* pwd
| Пароль секретного ключа должен заканчиваться символом '\0'
|
const void* docbuf
| Буфер с документом
|
int doclen
| Размер буфера с документом
|
void* outbuf
| Исходный буфер, если NULL — в outlen возвращается размер
|
int* outlen
| Размер исходного буфера
|
Функция возвращает 0 при успешной зашифровке, или код ошибки.
5. Функция расшифровки блока данных
int __stdcall Decrypt (const void* pkbuf, int pklen, const char* pwd, const void* docbuf, int doclen, void* outbuf, int* outlen);
Параметр | Описание |
const void* pkbuf
| Буфер с секретным ключом
|
int pklen
| Длина буфера с секретным ключом
|
const char* pwd
| Пароль секретного ключа должен заканчиваться символом '\0'
|
const void* certbuf
| Буфер с сертификатом
|
int certlen
| Размер буфера с сертификатом
|
const void* docbuf
| Буфер с документом
|
int docsize
| Размер буфера с документом
|
void* outbuf
| Исходный буфер, если NULL — в outlen возвращается размер
|
Int* outlen
| Размер исходного буфера
|
Функция возвращает 0 при успешном выполнении, или код ошибки.
6. Функция сверки сертификата с секретным ключом
int __stdcall VerifyCertPKMatch (const void* certbuf, int certlen, const void* pkbuf, int pklen);
Параметр | Описание |
1 | 2 |
const void* certbuf
| Буфер с сертификатом
|
int certlen
| Размер буфера с сертификатом
|
const void* pkbuf
| Буфер с секретным ключом
|
int pklen
| Размер буфера с секретным ключом
|
const char* pwd
| Пароль секретного ключа должен заканчиваться символом '\0'
|
Функция возвращает 0, если сертификат и секретный ключ являются соответствующими, или код ошибки.
7. Функция получения информации из сертификата
int __stdcall GetCertInfo (const void* certbuf, int certlen, UACertInfo* info);
Параметр | Описание |
const void* certbuf
| Буфер с сертификатом
|
int certlen
| Длина буфера с сертификатом
|
UACertInfo* info
| Структура с информацией из сертификата (приведена ниже)
|
Функция возвращает 0, когда успешно выполнено, или код ошибки.
Структура UACertInfo
Поле | Описание |
char Serial[64]
| Серийный номер сертификата
|
char EDRPOU[11]
| ЕГРПОУ учреждения
|
char DRFO[11]
| ГРФЛ лица
|
char Name[64]
| ФИО лица или наименование учреждения
|
char Email[64]
|
|
char Title[64]
| Должность
|
char PostalCode[7]
| Почтовый индекс
|
char Obl[64]
| Область
|
char Rayon[64]
| Район
|
char Adres[64]
| Адрес
|
char Tel[64];
| Телефон
|
time_t DtBeg
| Дата начала действия сертификата
|
time_t DtEnd
| Дата окончания действия сертификата
|
Выравнивание членов структуры — 1 байт.
Размер каждого строчного поля содержит завершающий 0-символ.
4. Коды ошибок
#define CRYPT_OK 0
// Успешно#define CRYPT_BUFFER_EMPTY 1
// Буфер пуст#define CRYPT_DLL_NOT_LOADED 2
// DLL не инициализирован#define CRYPT_BAD_CERT 3
// Ошибка получения информации из сертификата#define CRYPT_CERT_NOT_ALLOWED 4
// Данный сертификат не можетиспользоваться для выполнения операции
#define CRYPT_SK_NOT_MATCH 5
// Не совпадает пара сертификат — секретный ключ#define CRYPT_SK_CORRUPT 7
// Некорректный формат секретного ключа#define CRYPT_BAD_PASSWORD 8
// Ошибка подписи/шифрования,возможно, указан неверный пароль
#define CRYPT_BAD_SIGN 11
// Неверная подпись#define CRYPT_INTERNAL_ERR 12
// Внутренняя ошибка проверки подписи#define CRYPT_BAD_CRC 13
// Ошибка проверки целостности: буфер поврежден#define CRYPT_NOT_SUPPORTED 14 // Функция не поддерживается