21
Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE SISTEMAS Preparación del Reporte CRS para el envío a DGI

Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

Documento Técnico

DIVISIÓN INFORMÁTICA

DESARROLLO DE SISTEMAS

Preparación del Reporte CRS para el envío a DGI

Page 2: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 2 de 21

Índice

1. Actualizaciones de Versión ............................................................................................................ 3 2. Objetivo. ........................................................................................................................................ 4 3. Alcance. ........................................................................................................................................ 4 4. Actores Involucrados. .................................................................................................................... 4 5. Descripción General del Proceso .................................................................................................. 5 6. Requisitos previos a la Preparación. ............................................................................................. 6 7. Diagrama de Dependencias entre Esquemas ............................................................................... 7 8. Descripción del Proceso Detallado. ............................................................................................... 8 9. Generación de ID .......................................................................................................................... 9 10. Firma del Reporte XML ............................................................................................................... 9 11. Validación del Reporte XML firmado. ........................................................................................ 13 12. Compresión del Reporte............................................................................................................ 14 13. Generación del archivo XML de envío. ...................................................................................... 16 14. Validación del archivo XML ....................................................................................................... 16 15. Cifrado del Archivo XML ............................................................................................................ 17 16. Referencias. .............................................................................................................................. 21

Page 3: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 3 de 21

1.Actualizaciones de Versión

Versión 2 – 18/01/2018

Se corrige formato.

Se sustituyen las referencias a “Entidades Financieras” por EF.

Se corrige ejemplo real de un reporte XML firmado, página 11, de acuerdo a los algoritmos de

“canonicalización”establecidos.

Se amplía ejemplo Java en página 17.

Versión 1 – 01/10/2017

Page 4: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 4 de 21

2.Objetivo.

El presente documento, describe los pasos necesarios para la preparación de los reportes que las Entidades Financieras (EF) deben enviar a la Dirección General Impositiva (DGI). Como resultado de este proceso, las EF obtendrán un archivo, que podrá ser enviado a la DGI por los siguientes medios:

Upload web (a través de HTTP)

Upload mediante el uso de Web Services SOAP. Para entender mejor el proceso de generación, se requiere conocimientos de los siguientes temas:

Upload web (a través de HTTP)

PKI (Public Key Infraestructure)

Firma electrónica avanzada en Uruguay

XML y XSD

XML-Signature

XML-Encryption

Fundamentos básicos de criptografía simétrica y asimétrica

3.Alcance.

La DGI asume que la EF ya cuenta con el reporte XML generado, aunque no se encuentre preparado para el envío. Para la generación de dicho reporte, referirse a la cartilla Formato CRS-DGI. En el presente documento se presentan ejemplos utilizando Java, aunque la DGI se mantiene imparcial en cuanto a la tecnología que las EF quieran utilizar para la preparación del reporte.

4.Actores Involucrados.

Desarrolladores, Arquitectos de Sistemas, Analistas de Negocio, Jefes de Proyecto

Page 5: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 5 de 21

5.Descripción General del Proceso

Luego de generado el reporte XML, el mismo debe pasar por una serie de pasos previos a su envío a la DGI, con los siguientes objetivos:

Confidencialidad. Se busca mantener la más alta confidencialidad en la transmisión de la información a través de internet.

Integridad. Evitar que la información enviada pueda ser alterada sin autorización.

No Repudio. Garantizar que la información provenga realmente del origen que se indica, y no haya lugar al repudio.

Mejorar la velocidad de transmisión. Mediante mecanismos de compresión de la información, se pretende enviar menos bytes a través de internet, y así ganar en velocidad. Esto es particularmente útil, ya que en muchos de los casos considerados, podemos recibir reportes de varios megabytes de información.

Pasos generales:

El reporte generado, debe ser firmado por la EF (utilizando firma electrónica avanzada), de manera de garantizar la integridad y el no repudio. Luego se pasará a comprimir el reporte, y previo a su envío, el mismo debe ser cifrado de manera de garantizar la confidencialidad de la información contenida en el mismo.

Page 6: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 6 de 21

6.Requisitos previos a la Preparación.

Es necesario que las EF, cuenten con los siguientes recursos, que les permitirá generar cada uno de los pasos que se describieron anteriormente:

Reporte XML La EF, ya debe contar con el reporte XML que es exigido por la DGI, por lo que se considera que el primer paso del diagrama “Generación Reporte XML” ya se cumplió. Referirse a la cartilla Formato CRS-DGI.

Esquema de Reporte XML firmado (CrsXML_v1.0-Domestico.xsd) Este archivo XSD puede utilizarse, luego de la firma del Reporte XML, como forma de validación. Este archivo se corresponde con el archivo entregado con nombre “CrsXML_v1.0-Domestico.xsd”

Esquema para el Envío del Reporte (archivo.xsd) Es un archivo XSD, utilizado para generar el correspondiente XML para el envío del reporte.

Esquema para el Envío del Reporte cifrado (archivo_cifrado.xsd) Archivo XSD correspondiente al XML de envío cifrado. Este esquema sirve para validar el XML antes de ser enviado.

Clave pública de DGI La clave pública y el certificado que DGI estarán disponibles en el Portal de Intercambio Automático de Información Financiera.

Certificado, Clave pública y privada de la EF Es importante que la EF cuente con un certificado X509v3 emitido por una Autoridad Certificadora Nacional y su correspondiente para de claves pública y privada. La DGI recomienda la utilización de dispositivos seguros de almacenamiento, (Hardware Security Module: HSM) para evitar la posibilidad de hurto de la clave privada. No se admiten Autoridades Certificadoras internacionales, ya que no están comprendidas en la PKI de Jurisdicción de la República Oriental del Uruguay. Actualmente, las Autoridades Certificadoras admisibles son:

El Correo Uruguayo

Abitab

Esquema para la firma XML Signature (xmldsig-core-schema.xsd)

Page 7: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 7 de 21

Este archivo es el esquema utilizado por el estándar XML-Signature para la firma de XMLs.

Esquema de cifrado XML-Encryption (xenc-schema.xsd) Este archivo es el esquema utilizado por el estándar XML-Encryption, para poder cifrar XMLs. Es referenciado por el punto 3 (esquema_cifrado.xsd).

7.Diagrama de Dependencias entre Esquemas

La notación a → b indica que a depende de b. En este esquema se ve claramente que el archivo.xsd no depende de ningún otro esquema.

Page 8: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 8 de 21

8.Descripción del Proceso Detallado.

En amarillo se marcan los recursos necesarios:

El diagrama describe el proceso por el cual debe pasar el reporte XML, desde el momento en que se generó hasta el momento previo al envío. En amarillo se indican cada uno de los recursos necesarios y que son entradas a los procesos (burbujas en gris). Como resultado de cada proceso se genera una salida, que se indica con la flecha de salida de cada burbuja. Por ejemplo, el resultado de la burbuja “Firmar Reporte XML” es el reporte XML firmado.

Validar archivoXML cifrado

archivo_cifrado.xsd

Reporte XML

Archivo XMLcifrado

Cifrar archivoXML

Clave pública DGI

Archivo XML

ComprimirReporte XML

Reporte comprimido

Generar IdGenerar

Archivo XML

Id

archivo.xsd

Firmar Reporte XML

Clave privadaEF

Reporte XMLFirmado y validado

Generar IdValidar

Archivo XML

ValidarReporte XML

firmado

Reporte XMLfirmado

Archivo XML validado

Page 9: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 9 de 21

9.Generación de ID

Para cada reporte XML enviado a DGI, es necesario generar un identificador ID, que represente de forma única el envío. Cada ID debe seguir la nomenclatura siguiente:

1. Los dos primeros caracteres serán “UY” e identifican al país emisor de los datos. 2. Luego debe ir el año en el que se emitió el reporte, en formato AAAA. 3. Los siguientes caracteres será el código del país (formato de 2 caracteres ISO 3166)

para el cual se emitió el reporte. 4. Luego deberá incluirse un punto “.” 5. Luego deberá incluirse el RUC (Registro Único de Contribuyente) de la Entidad

Financiera que emite el reporte, en formato de 12 dígitos. En caso de contener menos dígitos, se le agregará un cero a la izquierda.

6. Luego deberá incluirse un punto “.” 7. Finalmente deberá incluirse un identificador único y numérico de 8 dígitos, que deberá

completarse con ceros a la izquierda. Ejemplo: 00000045. Ejemplos:

UY2017FR.219000090011.01234567

UY2015AR.219000090011.00000834

10.Firma del Reporte XML

El primero de los pasos luego de generado el reporte, es que la EF lo firme electrónicamente. El resultado de este proceso constituye una firma electrónica avanzada en la República Oriental del Uruguay, de acuerdo a lo establecido en la Ley 18.600. Descripción del Proceso: Para la firma se utilizará el estándar XML Signature, utilizando SHA-2 (256 bits) como algoritmo de Digest y RSA como algoritmo asimétrico de cifrado, utilizando la clave privada de la EF.

Page 10: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 10 de 21

El mecanismo que debe utilizarse para la firma con XML-Signature es el “Enveloped”, de manera que la firma se incluya como parte del XML del Reporte. Para mayor información referirse al documento del estándar XML Signature (ver referencia 2 de la Bibliografía).

Page 11: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 11 de 21

Ejemplo de método Enveloped de un XML genérico: <Letter>

<Return-address>address</Return-address>

<To>You</To>

<Message>msg body</Message>

<From>

<ds:Signature xmlns:ds="&ds;">

<ds:SignedInfo>

<ds:CanonicalizationMethod Algorithm=

"http://www.w3.org/TR/2001/10/xml-exc-c14n#"/>

<ds:SignatureMethod Algorithm=

"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>

<ds:Reference URI="">

<ds:Transforms>

<ds:Transform Algorithm="&enveloped;">

</ds:Transform>

</ds:Transforms>

<ds:DigestMethod Algorithm="&digest;"/>

<ds:DigestValue></ds:DigestValue>

</ds:Reference>

</ds:SignedInfo>

<ds:SignatureValue/>

</ds:Signature>

</From>

<Attach>attachement</Attach>

</Letter>

El algoritmo de “canonicalización” que se debe utilizar es http://www.w3.org/2001/10/xml-exc-c14n#, el cual no se permite la inclusión de comentarios. Por más información ver referencia 7.

La firma debe incluir el certificado de la EF que se utilizó para generarla. El mismo se incluye dentro del elemento KeyInfo → X509Data, bajo X509Certificate.

<ns2:Signature>

.

.

.

<ns2:KeyInfo>

<ns2:X509Data>

<ns2:X509Certificate>

</ns2:X509Certificate>

.

.

</ns2:X509Data>

<ns2:/KeyInfo>

</ns2:Signature>

Page 12: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 12 de 21

El siguiente, constituye un ejemplo real de un reporte XML firmado: <ns2:Signature>

<ns2:SignedInfo>

<ns2:CanonicalizationMethod

Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#” />

<ns2:SignatureMethod Algorithm=" http://www.w3.org/2001/04/xmldsig-more#rsa-

sha256" />

<ns2:Reference URI="">

<ns2:Transforms>

<ns2:Transform

Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-

signature" />

<ns2:Transform Algorithm="hhttp://www.w3.org/2001/10/xml-exc-

c14n#" />

</ns2:Transforms>

<ns2:DigestMethod Algorithm=" http://www.w3.org/2001/04/xmldsig-

more#rsa-sha256" />

<ns2:DigestValue>+Vjr/5xafLRx3na/wKnmAYSZyI8=</ns2:DigestValue>

</ns2:Reference>

</ns2:SignedInfo>

<ns2:SignatureValue>OLxb77dOh90xL0p8ox/EkTA8nAmxvkHqpaqY1+69TqJc+WauDf0qHzyq2KrPkFXSCnKf7X1ZU

IOOZMVkDiqsgzgTWWdQ/u6PTjOdYTwM8+qJBV0RoycuxL4OEJvRrI4jd90N724YYO7ikLvsK9zd7P+7qQ71AwMOJad+TlThuQk=

</ns2:SignatureValue>

<ns2:KeyInfo>

<ns2:X509Data>

<ns2:X509Certificate>MIIGHTCCBAWgAwIBAgIQVFDTpcwZYtpU08WwlIK0GDANBgkqhkiG9w0BAQUFADB6MQswCQYD

VQQGEwJVWTErMCkGA1UECgwiQURNSU5JU1RSQUNJT04gTkFDSU9OQUwgREUgQ09SUkVPUzEfMB0GA1UECwwWU0VSVklDSU9TIEVMR

UNUUk9OSUNPUzEdMBsGA1UEAwwUQ29ycmVvIFVydWd1YXlvIC0gQ0EwHhcNMTUwMjA1MTkzNDA4WhcNMTYwMjA1MTkzNDA4WjCB9D

EiMCAGCSqGSIb3DQEJARYTZ2Rvcm5lbGxAZGdpLmd1Yi51eTEeMBwGA1UECwwVU0VHVVJJREFEIElORk9STUFUSUNBMRgwFgYDVQQ

LDA9TT1BPUlRFIFRFQ05JQ08xHDAaBgNVBAsME1NPUE9SVEUgREUgU0lTVEVNQVMxHDAaBgNVBAoME0RHSS1SVUMgUFJVRUJBIENF

REUxEzARBgNVBAgMCk1vbnRldmlkZW8xCzAJBgNVBAYTAlVZMRgwFgYDVQQFEw9SVUMyMTk5OTk4MzAwMTkxHDAaBgNVBAMME0RHS

S1SVUMgUFJVRUJBIENFREUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKM2xtDISeTUqx7MRUIhqXHgzwr1zhiTxZeaIDSmCH

BkSF3cmY6aGOw3Qy9y93am6xO3Jcpw98t46jo3tN9WqW7ijeIQtS4l96OeS/in6YmQbX3Br5ViO4xYIpdFQVmRQMmP9uKxbwPoEgT

u9ztJ98z4QIziy8UnPwFSVdiXPHphAgMBAAGjggGmMIIBojBiBgNVHREEWzBZoEIGCisGAQQBgjcUAgOgNAwySURFMjg3OTM3MDYv

Q0VSVElGSUNBRE8gUFJVRUJBIEdVSUxMRVJNTyBET1JORUxMRVOBE2dkb3JuZWxsQGRnaS5ndWIudXkwDAYDVR0TAQH/BAIwADAOB

gNVHQ8BAf8EBAMCA/gwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMBEGCWCGSAGG+EIBAQQEAwIFoDAdBgNVHQ4EFgQUsT

nSf0fgZKinG9HkjuyX+gqfxAcwHwYDVR0jBBgwFoAUJY/fQy+OaroLvkZcV1CTt1G+/NkwVAYDVR0gBE0wSzBJBgwrBgEEAYH1TwE

BAQQwOTA3BggrBgEFBQcCARYraHR0cDovL3d3dy5jb3JyZW8uY29tLnV5L2NvcnJlb2NlcnQvY3BzLnBkZjAYBg0rBgEEAYH1TwEB

AQQBBAcMBURpc2NvMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly93d3cuY29ycmVvLmNvbS51eS9Db3JyZW9DZXJ0L2FuYy5jcmwwD

QYJKoZIhvcNAQEFBQADggIBAAFHZL/xZiIRGNE61uZc5hDJI/UW4ob3aAGGBlJrn19JBmzaB2MpNsrP4d62QHWXgR1Nvb3M5QCYHe

4mVJvB5p2JgF01RyrMzI6a+NxjYuNZHRQtYdwn7MeyFjaWRJbxqamnBZQxBrkIm+ub3fe6p92/BmsD7BlVr6RoyrupchfFHe0eMQH

GnGn2iSR3v6wH/fqPXZ1hrHgn3NeIlcnE/CAvsP0VSiAPVN4gcKeQ01zgoPa/v0i69qPs195RK40/bMcq/KdRwbBkQqTvU63R/ZjD

Y+dIBxNjnP1+tmL4FuYm7GIWubRmwATqqpzJYmjpnO9BFJgFiNafFUoX5cPT6kEmE1Du4l0K9itb2zV8FJT+yjMtAradZHgbSU97W

wxzVfy7ETql9PxDOFD4qVb82DzX3jGddu48UlLZeEE2lSrIPhXYypZuftdZmAR27vSeP9i/IwPEOf5W2DKwIg6RBeaEd3+wynoyJV

asXcFtFwQinnu8xyBm62wCwYaJzupM7zB/KNdKOS3ABZehzExOG6Fi9+8OuraSQml8HRBh2/EgoikjjE5AUJ7bXFeODUMWd4GFAS4

zDEn7ZAMDH7NkIGeQ4HX64yH+L9NOTpGaTg1WKFGIykyW3MrIDGfuVrCG+zenKMNrxU9KrqAKe4k/Edkag2XRCDnQJKOcc3U2T6vw

</ns2:X509Certificate>

<ns2:X509IssuerSerial>

<ns2:X509IssuerName>CN=Correo Uruguayo - CA, OU=SERVICIOS

ELECTRONICOS, O=ADMINISTRACION NACIONAL DE CORREOS, C=UY

</ns2:X509IssuerName>

<ns2:X509SerialNumber>112074828118854536858740124099264295960

</ns2:X509SerialNumber>

</ns2:X509IssuerSerial>

</ns2:X509Data>

</ns2:KeyInfo>

</ns2:Signature>

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

<ds:SignedInfo>

<ds:CanonicalizationMethod

Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />

<ds:SignatureMethod

Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />

<ds:Reference URI="">

<ds:Transforms>

<ds:Transform

Page 13: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 13 de 21

Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-

signature" />

<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-

c14n#" />

</ds:Transforms>

<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />

<ds:DigestValue>yQTQEc6SYwnDlCazQAyaGWMgMZgd/2l8KvqC9ISuc6U=

</ds:DigestValue>

</ds:Reference>

</ds:SignedInfo>

<ds:SignatureValue>GCcrsgyygIcTie35wdNiIcZnPHBZ/CwCbSkpkVmQwuWkIN2uxCO2GX9Rx1K1MSMxWDnfvlVWyw

4A

Dcqas+guuLPLeWESqghe8DvPPZMoWET/zmumb+a0lRhRCh7CfkOtqNSgrnreOHQkTG8/gxPhCohJ

xe9dMcjwHX7JzRK7sPUQBdbPtpAJQOLyxFXwm3d385d633u2ewz+6W2njLS6NQc6gi1T3SGduhLJ

ajxH9yUd2zhL/lwU+v30FDCjLBs+KwUtuWop+Lzuh1jqDsmSQVHuT66LG3Lg6ZRwVuNT2hY8sVUw

NioWQu7dRk+hapz8TBY8Gnpd43OFm7dJRC1j+Q==

</ds:SignatureValue>

</ds:Signature>

11.Validación del Reporte XML firmado.

Luego de haberse firmado el reporte, se puede realizar la validación utilizando el Esquema (CrsXML v1.0 - Domestico.xsd).

Page 14: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 14 de 21

12.Compresión del Reporte

IMPORTANTE: Antes de entrar en detalle de cómo se debe generar la compresión, es importante aclarar que los algoritmos de compresión trabajan sobre una cadena de bytes y no sobre caracteres. Dado que el reporte es un XML y se representa mediante caracteres, previo a la etapa de compresión, es necesario convertir el reporte a su representación en bytes, Para la conversión de caracteres a bytes, se debe considerar la codificación UTF-8, de manera de incluir caracteres especiales y letras de otros alfabetos. La siguiente rutina en Java, muestra cómo obtener un array de bytes a partir de un reporte XML representado mediante una instancia de org.w3c.dom.Document

public InputStream getInputStream(Document doc) throws Exception{

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

Source xmlSource = new DOMSource(doc);

Result outputTarget = new StreamResult(outputStream);

Transformer transformer =

TransformerFactory.newInstance().newTransformer();

transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

transformer.transform(xmlSource, outputTarget);

InputStream is = new ByteArrayInputStream(outputStream.toByteArray());

return is;

}

Luego de la firma del reporte, realizaremos el proceso de compresión del mismos, utilizando el tipo de formato ZLIB definido en el RFC 1950. Este formato incluye, aparte del binario comprimido, la siguiente información

método de compresión utilizado

nivel de compresión (a mayor nivel mayor eficiencia) Existen muchos métodos de compresión, el más ampliamente utilizado y que se aplicará en este caso será el DEFLATE, definido en el RFC 1951. En Java 8, el siguiente ejemplo permite realizar la compresión utilizando el formato ZLIB y DEFLATE.

private static byte[] comprimirArchivo(InputStream in) throws

FileNotFoundException, IOException{

byte[] buffer = new byte[1024];

ByteArrayOutputStream bos = new ByteArrayOutputStream();

DeflaterOutputStream zos = new DeflaterOutputStream(bos);

int len;

while ((len = in.read(buffer)) > 0) {

Page 15: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 15 de 21

zos.write(buffer, 0, len);

}

in.close();

zos.close();

return bos.toByteArray();

}

En este caso puntual, se están utilizando valores por defecto para el nivel de compresión. Por más información referirse a la documentación Java. La clase java.util.zip.Deflater se puede utilizar en conjunto con java.util.zip.DeflaterOutputStream, para definir los niveles de compresión, etc. Ejemplo:

Deflater deflater = new Deflater(9,false);

DeflaterOutputStream zos = new DeflaterOutputStream(bos,deflater);

En este caso, se utiliza el nivel de compresión 9 para la compresión por parte de las EF. El segundo parámetro cuyo valor es “false”, corresponde al NOWRAP, que en caso del envío debe estar en false. (mayor información referirse a javadoc de java.util.zip.Deflater). El resultado de este proceso DEBE ser entonces un estructura de datos binaria ZLIB.

Page 16: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 16 de 21

13.Generación del archivo XML de envío.

Luego de haber comprimido el archivo, se debe generar un nuevo XML para el envío del reporte. El XML resultante debe validarse contra el Esquema para el Envío de Reporte XSD (archivo.xsd), y será similar al siguiente:

<?xml version="1.0" encoding="UTF-8"?>

<envioArchivo xmlns="http://dgi.gub.uy/crs">

<id>UY2017FR.219000090011.01234567</id>

<contenido>UEsDBBQACAgI6koAAAAA</contenido>

<envioArchivo>

Valores que debe tomar cada elemento:

id : es el identificador del reporte que se envía y que se explicó en el punto 8. (Generación de ID).

contenido: es un campo del tipo base64Binary, y debe contener el archivo resultante del paso anterior, codificado en base 64. Esta codificación permite enviar binarios como texto plano.

14.Validación del archivo XML

Este, XML se valida contra el archivo.xsd siguiente:

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://dgi.gub.uy/crs" xmlns:tns="http://dgi.gub.uy/crs"

elementFormDefault="qualified">

<complexType name="envioArchivoType">

<sequence>

<element name="id" type="string"></element>

<element name="contenido" type="base64Binary"></element>

</sequence>

</complexType>

<element name="envioArchivo" type="tns:envioArchivoType"></element>

</schema>

Page 17: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 17 de 21

15.Cifrado del Archivo XML

Para el cifrado del archivo XML, sólo se considerará cifrar el elemento <contenido>, por lo cual el campo <id> queda sin cifrar. Se utilizará el estándar XML-Encryption, mediante el uso de algoritmo de cifrado simétrico AES (Advanced Encryption Standard) con clave de 256 bits generada aleatoriamente utilizando rutinas de generación segura. Por ejemplo, en Java 8, se pueden utilizar las siguientes librerías:

package dgi;

import java.security.NoSuchAlgorithmException;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

public class Ejemplo {

public static void main(String[] args) throws NoSuchAlgorithmException {

KeyGenerator keyGen = KeyGenerator.getInstance("AES");

keyGen.init(256);

SecretKey secretKey = keyGen.generateKey();

}

}

Recordar que en el caso de Java, deben bajarse las siguiente “Java Cryptography Extensions (JCE) Unlimited Strength Jurisdiction Policy Files”, ya que por políticas de seguridad, no se puede cifrar con una clave de 256 bits.

El sitio para bajar los archivos es:

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-32124.html

A su vez, la clave simétrica generada, será cifrada mediante algoritmo asimétrico RSA, utilizando la Clave Pública de DGI. La clave está autocontenida en el certificado de DGI.

Para el cifrado asimétrico, deberá utilizarse el algoritmo rsa-oaep-mgf1p (RFC 2437 sección 7.1). Como resultado de la aplicación de este algoritmo, se generarán elemento de cifrado donde se indica:

<xenc:EncryptionMethod Algorithm=”http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p”/>

Page 18: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 18 de 21

El siguiente diagrama describe el proceso completo:

Esqueleto del la parte del XML que es cifrada:

Page 19: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 19 de 21

Descripción de sus elementos:

El elemento KeyInfo, conteniendo la clave simétrica, que se encuentra cifrada mediante RSA.

Observando detenidamente dentro de este elemento, se describe el método utilizado para el cifrado (en este caso debe ser algoritmo RSA). Luego se incluye otro elemento CipherData, que contiene la clave simétrica cifrada.

El elemento CipherData, que está a continuación del elemento KeyInfo, contiene el reporte cifrado mediante AES-256 con la clave simétrica incluida en KeyInfo. Este elemento no debe confundirse con el elemento CipherData incluido en el tag KeyInfo.

Este elemento debe contener a su vez, el elemento CipherValue, conteniendo propiamente el reporte cifrado. El estándar XML-Encryption provee la posibilidad de utilizar un elemento denominado CipherReference, en lugar de CipherValue, que permite hacer una referencia a un enlace que contiene el reporte cifrado, pero la DGI no permite esta alternativa. Ejemplo de un reporte cifrado:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<tns:envioArchivo xmlns:tns="http://www.example.org/archivo"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.example.org/archivo archivo.xsd ">

<tns:id>12232</tns:id>

<tns:contenido>

<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"

Type="http://www.w3.org/2001/04/xmlenc#Content">

<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"

/>

<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

<xenc:EncryptedKey>

<xenc:EncryptionMethod

Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-

mgf1p" />

<xenc:CipherData>

Page 20: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 20 de 21

<xenc:CipherValue>nRo/KGbVWlV1cP11C86p05ifxZGKnWD2B1liz3JukwviE27hmffGHuB9MkbxYYA9QvD6QrJ2qGg

V

4oAfsG2/9NWP9Bo/EbY/zCOOeTEGLnquyKKZCDiyIbZspp7uyPbC1HctuzaN5VmvEZWakZGTymI8

fDlFBQWsUBRw7T4wEH9T1aeTVdLyhFWzhxHAABcX4SyA8N29i4x7aUrBor5CCkMawHD0Vkl8pZLR

bBS15FomndMsRCpAU5f1WmvCyZQHv66IO6CVSXVpx8w1l5TI77vy8j29zEg7y5WRjlLvExdxqW+X

BBJNQpdbMVYlFQFcBmF/Rzr+hjei01JXE6zACQ==

</xenc:CipherValue>

</xenc:CipherData>

</xenc:EncryptedKey>

</ds:KeyInfo>

<xenc:CipherData>

<xenc:CipherValue>TL20Q5zr3gNFtAw17jbNgo/qPGOcmZCnoB4XVhPP2Xk=

</xenc:CipherValue>

</xenc:CipherData>

</xenc:EncryptedData>

</tns:contenido>

</tns:envioArchivo>

Luego de cifrado, el archivo XML resultante se podrá validar utilizando el archivo_cifrado.xsd, como garantía de que el archivo cumple con el formato exigido. El siguiente es el correspondiente archivo_cifrado.xsd:

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://dgi.gub.uy/crs" xmlns:tns="http://dgi.gub.uy/crs"

elementFormDefault="qualified" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"

xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

<import namespace="http://www.w3.org/2000/09/xmldsig#"

schemaLocation="xmldsig-core-schema.xsd"/>

<import namespace="http://www.w3.org/2001/04/xmlenc#" schemaLocation="xenc-

schema.xsd"/>

<complexType name="contenidoType">

<sequence>

<element ref="xenc:EncryptedData"></element>

</sequence>

</complexType>

<complexType name="envioArchivoType">

<sequence>

<element name="id" type="string"></element>

<element name="contenido" type="tns:contenidoType"></element>

</sequence>

</complexType>

<element name="envioArchivo" type="tns:envioArchivoType"></element>

</schema>

Page 21: Documento Técnico DIVISIÓN INFORMÁTICA DESARROLLO DE …

CÓDIGO:

Documento Técnico DIVISIÓN INFORMÁTICA – DESARROLLO DE SISTEMAS

VERSIÓN: 2

FECHA: 18/01/18 Preparación del Reporte CRS para envío a DGI

Fecha de impresión: 26/01/2018 16:24 DGI – División Informática – Desarrollo – Proyectos 1 Página 21 de 21

16.Referencias.

Para la elaboración del presente estándar de documentación se tomaron como referencia los siguientes documentos: [1] https://www.w3.org/TR/2002/REC-xmlenc-core-20021210/Overview.html [2] https://www.w3.org/TR/xmldsig-core1/ [3] Cartilla Formato CRS-DGI. [4] Archivo XSD para el envío (Archivo.xsd) [5] RFC 1950 https://tools.ietf.org/html/rfc1950 [6] RFC 1951 https://tools.ietf.org/html/rfc1951 [7] RFC 2437 https://tools.ietf.org/html/rfc2437 [8] https://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/