Mundo Fiscal   Manuales   Productos  

 Estudios Fiscales

 

 

 

 

 

Anexo 20 de la Resolución Miscelánea Fiscal para 2004

 

Contenido

Medios electrónicos

A. Características técnicas del archivo que contenga informe mensual de comprobantes fiscales digitales emitidos.

B. Estándares y especificaciones técnicas para la utilización de aplicaciones informáticas para la generación de claves distintas al SOLCEDI.

C. Estándar de comprobante fiscal digital extensible.

D. Generación de sellos digitales para comprobantes fiscales digitales.

 

 

 

A.      Características técnicas del archivo que contenga informe mensual de comprobantes fiscales digitales emitidos

Campos del encabezado

No.

 

Campo

 

Descripción

 

Tamaño

 

Obligado

 

 

1

 

RFC Emisor

 

Es quien genera el comprobante utilizado

 

12 o 13 caracteres para personas físicas o morales

 

SI

 

 

2

 

Periodo que reporta

 

Es el mes y el año concatenado que reporta

 

Mmyyyy 6 caracteres

 

SI

 

 

 

Campos del detalle:

No.

 

Campo

 

Descripción

 

Tamaño

 

Obligado

 

 

1

 

RFC del cliente

 

13 posiciones del RFC del receptor del CFD (En caso de comprobantes fiscales digitales globales que amparen una o más operaciones efectuadas con público en general, se deberán reportar con el RFC genérico XAXX010101000)

 

 

12 - 13 Caracteres

 

SI

 

 

2

 

Serie

 

Son letras mayúsculas incluyendo la Ñ con un máximo de 10 letras. Se permite el valor nulo.

 

De 0 - 10 caracteres

 

SI

 

 

3

 

Folio del CFD

 

Número del folio utilizado en el CFD

 

Rango valido
1-2147483647

 

SI

 

 

4

 

No. de Aprobación

 

De la solicitud de rangos de comprobantes fiscales. Este número lo genera el acuse de la solicitud de folios. (En el caso de los comprobantes establecidos en el primer y segundo párrafo del artículo 29 del Código, no se deberá capturar el año “Yyyy”).

 

Yyyy + 2147483647 = 14 números

 

SI

 

 

5

 

Fecha de emisión y hora de emisión

 

Del CFD hacia el receptor en (dd/mm/yyyy hh:mm:ss)

 

19 caracteres de fecha

 

SI

 

 

6

 

Monto de la operación

 

Cantidad total de la transacción

 

10 números sin formato

 

SI

 

 

7

 

Monto del Impuesto al Valor Agregado

 

Cantidad del impuesto

 

10 números sin formato

 

SI

 

 

8

 

Estado del comprobante

 

0.- cancelado 1.- vigente

 

1 caracter

 

SI

 

 

 

B.      Estándares y especificaciones técnicas para la utilización de aplicaciones informáticas para la generación de claves distintas al SOLCEDI.

Los contribuyentes que opten por utilizar aplicaciones informáticas distintas al SOLCEDI, para la generación de claves, deberán cumplir con las especificaciones y estándares siguientes:

1.- Los requerimientos digitales deberán estar construidos de acuerdo con el estándar PKCS10

2.- Los campos requeridos para el procesamiento adecuado del requerimiento son los que a continuación se enlistan:

a.      La clave del RFC a 12 posiciones para las personas morales y a 13 posiciones para personas físicas. Si el requerimiento pertenece a una persona moral, se debe agregar la clave del RFC del representante legal, separada de la del contribuyente con un caracter (/).

 Ejemplo: RFC del contribuyente / RFC del Representante Legal.

 Este valor deberá registrarse en el campo de los “Nombres Distinguidos” denominado “UniqueIdentifier”, con respeto a las reglas de composición y longitud de este campo según la descripción del PKCS10.

b.      Correo Electrónico, registrado en el campo de “Nombres Distinguidos” denominado “mailAddress”, con respeto a las reglas de composición y longitud de este campo según la descripción del PKCS10.

c.      Clave de Revocación, registrada en el atributo extendido denominado “ChallengePassword”, con respeto a las reglas de composición y longitud de este campo según la descripción del PKCS10. Cabe mencionar que según este estándar, el valor corresponde al resultado de aplicar el algoritmo SHA1 sobre el texto de la Clave de Revocación, expresado en Base 64.

d.      El tamaño de las claves pública y privada deberá ser RSA 1024 bit respectivamente.

3.- Adicionalmente y de manera optativa se podrá incluir la clave CURP en el campo de “Nombres Distinguidos” denominado “SerialNumber”. La selección de este campo se debe a su correspondencia según el estándar con la intención de almacenar un identificador de objeto en un campo de tipo alfanumérico.

4.- De acuerdo al software por el que se opte, campos adicionales podrán ser incluidos en el requerimiento.

C.      Estándar de comprobante fiscal digital extensible.

Esquema comprobante.xsd

Elementos

 

Tipos Complejos

 

Tipos Simples

 

 

Comprobante

 

t_Ubicación

 

t_RFC

 

 

Concepto

 

t_UbicaciónFiscal

 

 

 

 

DomicilioFiscal

 

 

 

 

 

 

Elemento Comprobante

Documentación

 

Estándar para la expresión de comprobantes fiscales digitales. Los comprobantes expresados en este formato, deberán hacerlo usando el juego de caracteres de la especificación UTF-8 (Unicode Transformation Format 8)

 

 

Diagrama

 

 

 

Elementos Hijo

 

Emisor Receptor Conceptos Impuestos Addenda

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

Versión

xs:string

requerido

Atributo requerido con valor prefijado a 1.0 que indica la versión del estándar bajo el que se encuentra expresado el comprobante

 

serie

xs:string

opcional

Atributo opcional para definir la serie a la que corresponde el comprobante. Este atributo acepta una cadena de caracteres alfabéticos de 1 a 5 caracteres sin incluir caracteres acentuados

 

folio

xs:long

requerido

Atributo requerido que acepta un valor numérico entero superior a 0 que expresa el folio del comprobante

 

fecha

xs:dateTime

requerido

Atributo requerido para la expresión de la Fecha y hora de expedición del comprobante fiscal. Se expresa en la forma aaaa-mm-ddThh:mm:ss, de acuerdo a la especificación ISO 8601

 

sello

xs:string

requerido

Atributo requerido para contener el sello digital del comprobante fiscal, a que hace referencia las reglas de resolución miscelánea aplicable. El sello deberá ser expresado como una cadena de texto en formato Base 64

 

No Aprobacion

xs:integer

requerido

Atributo requerido para definir el número de autorización emitido por el SAT para el rango de folios al que pertenece el folio particular que ampara el presente comprobante fiscal

 

forma De Pago

xs:string

Opcional

Atributo opcional que sirve para definir la forma de pago que aplica para este comprobante fiscal, aplicable en el caso de bienes o servicios pagados en parcialidades

 

noCertificado

xs:string

opcional

Atributo opcional que sirve para expresar el número de serie del certificado de sello digital que ampara al comprobante. Se vuelve obligatorio si no se expresa el certificado.

 

certificado

xs:string

opcional

Atributo opcional que sirve para expresar el certificado de sello digital que ampara al comprobante como texto, en formato base 64. Se vuelve obligatorio si no se expresa el número del certificado.

 

 

 

 

 

. Elemento Comprobante/Emisor

Documentación

 

Nodo requerido para definir la información del contribuyente emisor del comprobante

 

 

Diagrama

 

 

 

Elementos Hijo

 

DomicilioFiscal ExpedidoEn

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

rfc

t_RFC

requerido

Atributo requerido para definir la Clave del Registro Federal de Contribuyentes correspondiente al contribuyente emisor del comprobante

 

nombre

xs:string

requerido

Atributo requerido para definir el nombre o razón social del contribuyente emisor del comprobante

 

 

 

 

 

Elemento Comprobante/Emisor/ExpedidoEn

Documentación

 

Nodo opcional para definir la información de ubicación del domicilio en donde es emitido el comprobante fiscal en caso de que sea distinto del domicilio fiscal del contribuyente emisor

 

 

Diagrama

 

 

 

Tipo

 

t_Ubicacion

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

calle

xs:string

requerido

Este atributo requerido sirve para definir la avenida, calle, camino o carretera donde se da la ubicación.

 

noExterior

xs:string

opcional

Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada.

 

noInterior

xs:string

opcional

Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa

 

colonia

xs:string

opcional

Este atributo opcional sirve para definir la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas

 

localidad

xs:string

opcional

Atributo opcional que sirve para definir la ciudad, pueblo o poblado donde se da la ubicación

 

referencia

xs:string

opcional

Atributo opcional para expresar una referencia de ubicación adicional

 

municipio

xs:string

opcional

Atributo opcional que sirve para definir el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación

 

estado

xs:string

opcional

Atributo opcional que sirve para definir el estado o entidad federativa donde se da la ubicación

 

pais

xs:string

requerido

Atributo requerido que sirve para definir el país donde se da la ubicación

 

codigoPostal

xs:string

opcional

Atributo opcional que sirve para definir el código postal en donde se da la ubicación

 

 

 

 

Elemento Comprobante/Receptor

Documentación

 

Nodo requerido para definir la información del contribuyente receptor del comprobante

 

 

Diagrama

 

 

 

Elementos Hijo

 

Domicilio

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

rfc

t_RFC

opcional

Atributo opcional para definir la Clave del Registro Federal de Contribuyentes correspondiente al contribuyente receptor del comprobante en caso de que el mismo esté registrado ante el SAT

 

nombre

xs:string

requerido

Atributo requerido para definir el nombre o razón social del contribuyente receptor

 

 

 

 

 

Elemento Comprobante/Receptor/Domicilio

Documentación

 

Nodo para la definición de la ubicación donde se da el domicilio del receptor del comprobante fiscal

 

 

Diagrama

 

 

 

Tipo

 

t_Ubicacion

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

calle

xs:string

requerido

Este atributo requerido sirve para definir la avenida, calle, camino o carretera donde se da la ubicación

 

noExterior

xs:string

opcional

Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada

 

noInterior

xs:string

opcional

Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa

 

colonia

xs:string

opcional

Este atributo opcional sirve para definir la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas

 

localidad

xs:string

opcional

Atributo opcional que sirve para definir la ciudad, pueblo o poblado donde se da la ubicación

 

referencia

xs:string

opcional

Atributo opcional para expresar una referencia de ubicación adicional

 

municipio

xs:string

opcional

Atributo opcional que sirve para definir el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación

 

estado

xs:string

opcional

Atributo opcional que sirve para definir el estado o entidad federativa donde se da la ubicación

 

país

xs:string

requerido

Atributo requerido que sirve para definir el país donde se da la ubicación

 

código postal

xs:string

opcional

Atributo opcional que sirve para definir el código postal en donde se da la ubicación

 

 

 

 

Elemento Comprobante/Conceptos

Documentación

 

Nodo requerido para enlistar los conceptos cubiertos por el comprobante

 

 

Diagrama

 

 

 

Elementos Hijo

 

Concepto

 

 

 

Elemento Comprobante/Impuestos

Documentación

 

Nodo requerido para la definición de impuesto aplicable

 

 

Diagrama

 

 

 

Elementos Hijo

 

Retenciones Traslados

 

 

 

Elemento Comprobante/Impuestos/Retenciones

Documentación

 

Nodo opcional para enlistar los impuestos retenidos aplicables

 

 

Diagrama

 

 

 

Elementos Hijo

 

Retencion

 

 

 

Elemento Comprobante/Impuestos/Retenciones/Retención

Documentación

 

Nodo para la definición de información detallada de una retención de impuesto específica

 

 

Diagrama

 

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

impuesto

xs:string

requerido

Atributo requerido para definir el tipo de impuesto retenido

 

importe

xs:decimal

requerido

Atributo requerido para definir el importe o monto del impuesto retenido

 

 

 

 

 

Elemento Comprobante/Impuestos/Traslados

Documentación

 

Nodo opcional para enlistar los impuestos trasladados aplicables

 

 

Diagrama

 

 

 

 

Elementos Hijo

 

Traslado

 

 

Elemento Comprobante/Impuestos/Traslados/Traslado

Documentación

 

Nodo para la definición de información detallada de un traslado de impuesto específico

 

 

Diagrama

 

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

impuesto

xs:string

requerido

Atributo requerido para definir el tipo de impuesto trasladado

 

importe

xs:decimal

requerido

Atributo requerido para definir el importe o monto del impuesto trasladado

 

 

 

 

 

Elemento Comprobante/Addenda

Documentación

 

Nodo opcional para recibir las extensiones al presente formato que sean de utilidad al contribuyente. Para las reglas de uso del mismo, referirse a el estándar

 

 

Diagrama

 

 

 

 

Elemento Concepto

Documentación

 

Nodo para la definición de la información detallada de un bien o servicio cubierto por el comprobante

 

 

Diagrama

 

 

 

Elementos Hijo

 

InformacionAduanera CuentaPredial

 

 

used by

 

element

Comprobante/Conceptos

 

 

 

 

. Atributos

 

Nombre

Tipo

Uso

Documentación

 

cantidad

xs:decimal

requerido

Atributo requerido para definir la cantidad de bienes o servicios del tipo particular definido por el presente concepto

 

unidad

xs:string

opcional

Atributo opcional para definir la unidad de medida aplicable para la cantidad expresada en el concepto

 

descripcion

xs:string

requerido

Atributo requerido para definir la descripción del bien o servicio cubierto por el presente concepto

 

valorUnitario

xs:decimal

requerido

Atributo requerido para definir el valor o precio unitario del bien o servicio cubierto por el presente concepto

 

importe

xs:decimal

requerido

Atributo requerido para definir el importe total de los bienes o servicios del presente concepto. Debe ser equivalente al resultado de multiplicar la cantidad por el valor unitario expresados en el concepto

 

 

 

 

 

Elemento Concepto/Información Aduanera

Documentación

 

Nodo opcional para la definición de información aduanera aplicable cuando se trate de ventas de primera mano de mercancías importadas

 

 

Diagrama

 

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

numero

xs:string

requerido

Atributo requerido para definir el número del documento aduanero que ampara la importación del bien

 

fecha

xs:date

requerido

Atributo requerido para definir la fecha de expedición del documento aduanero que ampara la importación del bien

 

aduana

xs:string

requerido

Atributo requerido para definir la aduana por la que se dió la importación del bien

 

 

 

 

 

Elemento Concepto/Cuenta Predial

Documentación

 

Nodo opcional para la definición del dato de identificación del inmueble como fue registrado en el registro predial

 

 

Diagrama

 

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

número

xs:string

requerido

Atributo requerido para definir el número de la cuenta predial del inmueble cubierto por el presente concepto en caso de recibos de arrendamiento.

 

 

 

 

 

Elemento DomicilioFiscal

Documentación

 

Nodo para la definición de la ubicación donde se da el domicilio fiscal de un contribuyente

 

 

Diagrama

 

 

 

Tipo

 

t_UbicacionFiscal

 

 

Usado por

 

Comprobante/Emisor

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

calle

xs:string

requerido

Este atributo requerido sirve para definir la avenida, calle, camino o carretera donde se da la ubicación

 

noExterior

xs:string

opcional

Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada

 

noInterior

xs:string

opcional

Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa

 

colonia

xs:string

opcional

Este atributo opcional sirve para definir la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas

 

localidad

xs:string

opcional

Atributo opcional que sirve para definir la ciudad, pueblo o poblado donde se da la ubicación

 

referencia

xs:string

opcional

Atributo opcional para expresar una referencia de ubicación adicional

 

municipio

xs:string

requerido

Atributo requerido que sirve para definir el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación

 

estado

xs:string

requerido

Atributo requerido que sirve para definir el estado o entidad federativa donde se da la ubicación

 

pais

xs:string

requerido

Atributo requerido que sirve para definir el país donde se da la ubicación

 

codigoPostal

xs:string

requerido

Atributo requerido que sirve para definir el código postal en donde se da la ubicación

 

 

 

 

 

Tipo Complejo t_Ubicacion

Documentación

 

Tipo definido para expresar domicilios o direcciones

 

 

Diagrama

 

 

 

Usado por

 

Comprobante/Receptor/Domicilio Comprobante/Emisor/ExpedidoEn

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

calle

xs:string

requerido

Este atributo requerido sirve para definir la avenida, calle, camino o carretera donde se da la ubicación.

 

noExterior

xs:string

opcional

Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada.

 

noInterior

xs:string

opcional

Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa

 

colonia

xs:string

opcional

Este atributo opcional sirve para definir la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas

 

localidad

xs:string

opcional

Atributo opcional que sirve para definir la ciudad, pueblo o poblado donde se da la ubicación

 

referencia

xs:string

opcional

Atributo opcional para expresar una referencia de ubicación adicional

 

municipio

xs:string

opcional

Atributo opcional que sirve para definir el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación

 

estado

xs:string

opcional

Atributo opcional que sirve para definir el estado o entidad federativa donde se da la ubicación

 

pais

xs:string

requerido

Atributo requerido que sirve para definir el país donde se da la ubicación

 

codigoPostal

xs:string

opcional

Atributo opcional que sirve para definir el código postal en donde se da la ubicación

 

 

 

 

 

Tipo Complejo t_UbicacionFiscal

Documentación

 

Tipo definido para expresar domicilios o direcciones

 

 

Diagrama

 

 

 

Usado por

 

DomicilioFiscal

 

 

Atributos

 

Nombre

Tipo

Uso

Documentación

 

calle

xs:string

requerido

Este atributo requerido sirve para definir la avenida, calle, camino o carretera donde se da la ubicación

 

noExterior

xs:string

opcional

Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada

 

noInterior

xs:string

opcional

Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa

 

colonia

xs:string

opcional

Este atributo opcional sirve para definir la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas

 

localidad

xs:string

opcional

Atributo opcional que sirve para definir la ciudad, pueblo o poblado donde se da la ubicación

 

referencia

xs:string

opcional

Atributo opcional para expresar una referencia de ubicación adicional

 

municipio

xs:string

requerido

Atributo requerido que sirve para definir el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación

 

estado

xs:string

requerido

Atributo requerido que sirve para definir el estado o entidad federativa donde se da la ubicación

 

pais

xs:string

requerido

Atributo requerido que sirve para definir el país donde se da la ubicación

 

codigoPostal

xs:string

requerido

Atributo requerido que sirve para definir el código postal en donde se da la ubicación

 

 

 

 

 

Tipo Simple t_RFC

Tipo

 

restriction of xs:string

 

 

Usado por

 

Atributos

Comprobante/Emisor/@rfc Comprobante/Receptor/@rfc

 

 

 

 

Restricciones

 

Longitud Min

12

Longitud Max

13

 

 

 

 

Documentaci

 

Tipo definido para expresar claves del Registro Federal de Contribuyentes

 

 

 

Código Fuente

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

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

 elementFormDefault="qualified" attributeFormDefault="unqualified">

       <xs:element name="Comprobante">

    <xs:annotation>

  <xs:documentation>Estándar para la expresión de comprobantes fiscales digitales.
Los comprobantes expresados en este formato, deberán hacerlo usando el juego de caracteres de la especificación UTF-8 (Unicote Transformation Format 8)</xs:documentation>

    </xs:annotation>

    <xs:complexType>

  <xs:sequence>

<xs:element name="Emisor">

      <xs:annotation>

    <xs:documentation>Nodo requerido para definir la información del contribuyente emisor del comprobante</xs:documentation>

      </xs:annotation>

      <xs:complexType>

    <xs:sequence>

  <xs:element ref="DomicilioFiscal">

<xs:annotation>

      <xs:documentation>Nodo requerido para definir la información de ubicación del domicilio fiscal del contribuyente emisor</xs:documentation>

.</xs:annotation>

  </xs:element>

  <xs:element name="ExpedidoEn" type="t_Ubicacion" minOccurs="0">

<xs:annotation>

      <xs:documentation>Nodo opcional para definir la información de ubicación del domicilio en donde es emitido el comprobante fiscal en caso de que sea distinto del domicilio fiscal del contribuyente emisor</xs:documentation>

</xs:annotation>

  </xs:element>

    </xs:sequence>

    <xs:attribute name="rfc" type="t_RFC" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido para definir la Clave del Registro Federal de Contribuyentes correspondiente al contribuyente emisor del comprobante</xs:documentation>

  </xs:annotation>

    </xs:attribute>

    <xs:attribute name="nombre" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido para definir el nombre o razón social del contribuyente emisor del comprobante</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

      </xs:complexType>

</xs:element>

<xs:element name="Receptor">

      <xs:annotation>

    <xs:documentation>Nodo requerido para definir la información del contribuyente receptor del comprobante</xs:documentation>

      </xs:annotation>

      <xs:complexType>

    <xs:sequence>

  <xs:element name="Domicilio" type="t_Ubicacion">

<xs:annotation>

      <xs:documentation>Nodo para la definición de la ubicación donde se da el domicilio del receptor del comprobante fiscal</xs:documentation>

</xs:annotation>

  </xs:element>

    </xs:sequence>

    <xs:attribute name="rfc" type="t_RFC" use="optional">

  <xs:annotation>

<xs:documentation>Atributo opcional para definir la Clave del Registro Federal de Contribuyentes correspondiente al contribuyente receptor del comprobante en caso de que el mismo esté registrado ante el SAT</xs:documentation>

  </xs:annotation>

    </xs:attribute>

    <xs:attribute name="nombre" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido para definir el nombre o razón social del contribuyente receptor</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

       </xs:complexType>

</xs:element>

<xs:element name="Conceptos">

      <xs:annotation>

    <xs:documentation>Nodo requerido para enlistar los conceptos cubiertos por el comprobante</xs:documentation>

      </xs:annotation>

      <xs:complexType>

    <xs:sequence>

  <xs:element ref="Concepto" maxOccurs="unbounded"/>

    </xs:sequence>

      </xs:complexType>

</xs:element>

<xs:element name="Impuestos">

      <xs:annotation>

    <xs:documentation>Nodo requerido para la definición de impuesto aplicables.</xs:documentation>

      </xs:annotation>

      <xs:complexType>

    <xs:sequence>

  <xs:element name="Retenciones" minOccurs="0">

<xs:annotation>

      <xs:documentation>Nodo opcional para enlistar los impuestos retenidos aplicables</xs:documentation>

</xs:annotation>

<xs:complexType>

      <xs:sequence>

    <xs:element name="Retencion" maxOccurs="unbounded">

 <xs:annotation>

<xs:documentation>Nodo para la definición de información detallada de una retención de impuesto específica</xs:documentation>

 </xs:annotation>

 <xs:complexType>

<xs:attribute name="impuesto" use="required">

      <xs:annotation>

   <xs:documentation>Atributo requerido para definir el tipo de impuesto retenido</xs:documentation>

      </xs:annotation>

      <xs:simpleType>

   <xs:restriction base="xs:string">

 <xs:enumeration value="ISR">

<xs:annotation>

     <xs:documentation>Impuesto sobre la renta</xs:documentation>

</xs:annotation>

 </xs:enumeration>

 <xs:enumeration value="IVA">

<xs:annotation>

     <xs:documentation>Impuesto al Valor Agregado</xs:documentation>

</xs:annotation>

 </xs:enumeration>

   </xs:restriction>

      </xs:simpleType>

</xs:attribute>

<xs:attribute name="importe" type="xs:decimal" use="required">

      <xs:annotation>

   <xs:documentation>Atributo requerido para definir el importe o monto del impuesto retenido</xs:documentation>

      </xs:annotation>

</xs:attribute>

 </xs:complexType>

    </xs:element>

      </xs:sequence>

</xs:complexType>

  </xs:element>

  <xs:element name="Traslados" minOccurs="0">

<xs:annotation>

      <xs:documentation>Nodo opcional para enlistar los impuestos trasladados aplicables</xs:documentation>

</xs:annotation>

<xs:complexType>

      <xs:sequence>

    <xs:element name="Traslado" maxOccurs="unbounded">

 <xs:annotation>

<xs:documentation>Nodo para la definición de información detallada de un traslado de impuesto específico</xs:documentation>

 </xs:annotation>

 <xs:complexType>

<xs:attribute name="impuesto" use="required">

      <xs:annotation>

   <xs:documentation>Atributo requerido para definir el tipo de impuesto trasladado</xs:documentation>

      </xs:annotation>

      <xs:simpleType>

   <xs:restriction base="xs:string">

 <xs:enumeration value="IVA">

<xs:annotation>

     <xs:documentation>Impuesto al Valor Agregado</xs:documentation>

</xs:annotation>

 </xs:enumeration>

 <xs:enumeration value="IEPS">

<xs:annotation>

     <xs:documentation>Impuesto Especial sobre Productos y Servicios</xs:documentation>

</xs:annotation>

 </xs:enumeration>

   </xs:restriction>

      </xs:simpleType>

</xs:attribute>

<xs:attribute name="importe" type="xs:decimal" use="required">

      <xs:annotation>

   <xs:documentation>Atributo requerido para definir el importe o monto del impuesto trasladado</xs:documentation>

      </xs:annotation>

</xs:attribute>

 </xs:complexType>

    </xs:element>

      </xs:sequence>

</xs:complexType>

  </xs:element>

    </xs:sequence>

      </xs:complexType>

</xs:element>

<xs:element name="Addenda" minOccurs="0">

      <xs:annotation>

    <xs:documentation>Nodo opcional para recibir las extensiones al presente formato que sean de utilidad al contribuyente. Para las reglas de uso del mismo, referirse a el . estándar</xs:documentation>

      </xs:annotation>

      <xs:complexType>

    <xs:all/>

      </xs:complexType>

</xs:element>

  </xs:sequence>

  <xs:attribute name="version" type="xs:string" use="required" fixed="1.0">

<xs:annotation>

      <xs:documentation>Atributo requerido con valor prefijado a 1.0 que indica la versión del estándar bajo el que se encuentra expresado el comprobante</xs:documentation>

</xs:annotation>

  </xs:attribute>

  <xs:attribute name="serie" use="optional">

<xs:annotation>

      <xs:documentation>Atributo opcional para definir la serie a la que corresponde el comprobante. Este atributo acepta una cadena de caracteres alfabéticos de 1 a 5 caracteres sin incluir caracteres acentuados</xs:documentation>

</xs:annotation>

<xs:simpleType>

      <xs:restriction base="xs:string">

    <xs:maxLength value="5"/>

    <xs:whiteSpace value="collapse"/>

    <xs:minLength value="1"/>

    <xs:pattern value="[a-zA-ZñÑ]+"/>

      </xs:restriction>

</xs:simpleType>

  </xs:attribute>

  <xs:attribute name="folio" use="required">

<xs:annotation>

      <xs:documentation>Atributo requerido que acepta un valor numérico entero superior a 0 que expresa el folio del comprobante</xs:documentation>

</xs:annotation>

<xs:simpleType>

      <xs:restriction base="xs:long">

    <xs:minInclusive value="1"/>

      </xs:restriction>

</xs:simpleType>

  </xs:attribute>

  <xs:attribute name="fecha" type="xs:dateTime" use="required">

<xs:annotation>

      <xs:documentation>Atributo requerido para la expresión de la fecha y hora de expedición del comprobante fiscal. Se expresa en la forma aaaa-mm-ddThh:mm:ss, de acuerdo a la especificación ISO 8601</xs:documentation>

</xs:annotation>

  </xs:attribute>

  <xs:attribute name="sello" type="xs:string" use="required">

<xs:annotation>

      <xs:documentation>Atributo requerido para contener el sello digital del comprobante fiscal, a que hace referencia las reglas de resolución miscelánea aplicable. El sello deberá ser expresado cómo una cadena de texto en formato Base 64</xs:documentation>

</xs:annotation>

  </xs:attribute>

  <xs:attribute name="noAprobacion" type="xs:integer" use="required">

<xs:annotation>

      <xs:documentation>Atributo requerido para definir el número de autorización emitido por el SAT para el rango de folios al que pertenece el folio particular que ampara el presente comprobante fiscal</xs:documentation>

</xs:annotation>

  </xs:attribute>

  <xs:attribute name="formaDePago" type="xs:string" use="optional">

<xs:annotation>

      <xs:documentation>Atributo opcional que sirve para definir la forma de pago que aplica para este comprobante fiscal, aplicable en el caso de bienes o servicios pagados en parcialidades</xs:documentation>

</xs:annotation>

  </xs:attribute>

  <xs:attribute name="noCertificado" type="xs:string" use="optional">

<xs:annotation>

      <xs:documentation> Atributo opcional que sirve para expresar el número de serie del certificado del sello digital que ampara al comprobante. Se vuelve obligatorio si no se expresa el certificado.</xs:documentation>

</xs:annotation>

  </xs:attribute>

  <xs:attribute name="certificado" type="xs:string" use="optional">

<xs:annotation>

      <xs:documentation>Atributo opcional que sirve para expresar el certificado de sello digital como texto, en formato base 64. Se vuelve obligatorio si no se expresa el número de certificado.</xs:documentation>

</xs:annotation>

.  </xs:attribute>

    </xs:complexType>

       </xs:element>

       <xs:complexType name="t_Ubicacion">

    <xs:annotation>

  <xs:documentation>Tipo definido para expresar domicilios o direcciones</xs:documentation>

    </xs:annotation>

    <xs:attribute name="calle" use="required">

  <xs:annotation>

<xs:documentation>Este atributo requerido sirve para definir la avenida, calle, camino o carretera donde se da la ubicación.</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="noExterior" use="optional">

  <xs:annotation>

<xs:documentation>Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada.</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="noInterior" use="optional">

  <xs:annotation>

<xs:documentation>Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="0"/>

.       <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="colonia" use="optional">

  <xs:annotation>

<xs:documentation>Este atributo opcional sirve para definir la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="0"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="localidad" use="optional">

  <xs:annotation>

<xs:documentation>Atributo opcional que sirve para definir la ciudad, pueblo o poblado donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="referencia" type="xs:string" use="optional">

  <xs:annotation>

<xs:documentation>Atributo opcional para expresar una referencia de ubicación adicional</xs:documentation>

  </xs:annotation>

    </xs:attribute>

    <xs:attribute name="municipio" use="optional">

  <xs:annotation>

<xs:documentation>Atributo opcional que sirve para definir el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="0"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="estado" use="optional">

  <xs:annotation>

<xs:documentation>Atributo opcional que sirve para definir el estado o entidad federativa donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="pais" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido que sirve para definir el país donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="codigoPostal" use="optional">

  <xs:annotation>

<xs:documentation>Atributo opcional que sirve para definir el código postal en donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="0"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

       </xs:complexType>

       <xs:complexType name="t_UbicacionFiscal">

    <xs:annotation>

  <xs:documentation>Tipo definido para expresar domicilios o direcciones</xs:documentation>

    </xs:annotation>

    <xs:attribute name="calle" use="required">

  <xs:annotation>

<xs:documentation>Este atributo requerido sirve para definir la avenida, calle, camino o carretera donde se da la ubicación.</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="noExterior" use="optional">

  <xs:annotation>

<xs:documentation>Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada.</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="noInterior" use="optional">

  <xs:annotation>

<xs:documentation>Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="0"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="colonia" use="optional">

  <xs:annotation>

<xs:documentation>Este atributo opcional sirve para definir la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="0"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="localidad" use="optional">

  <xs:annotation>

<xs:documentation>Atributo opcional que sirve para definir la ciudad, pueblo o poblado donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="referencia" type="xs:string" use="optional">

  <xs:annotation>

<xs:documentation>Atributo opcional para expresar una referencia de ubicación adicional</xs:documentation>

  </xs:annotation>

    </xs:attribute>

    <xs:attribute name="municipio" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido que sirve para definir el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="0"/>

</xs:restriction>

.  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="estado" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido que sirve para definir el estado o entidad federativa donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="pais" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido que sirve para definir el país donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="codigoPostal" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido que sirve para definir el código postal en donde se da la ubicación</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="5"/>

      <xs:maxLength value="5"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

       </xs:complexType>

       <xs:simpleType name="t_RFC">

    <xs:annotation>

  <xs:documentation>Tipo definido para expresar claves del Registro Federal de Contribuyentes</xs:documentation>

    </xs:annotation>

    <xs:restriction base="xs:string">

  <xs:minLength value="12"/>

  <xs:maxLength value="13"/>

    </xs:restriction>

       </xs:simpleType>

       <xs:element name="DomicilioFiscal" type="t_UbicacionFiscal">

    <xs:annotation>

  <xs:documentation>Nodo para la definición de la ubicación donde se da el domicilio fiscal de un contribuyente</xs:documentation>

    </xs:annotation>

       </xs:element>

       <xs:element name="Concepto">

    <xs:annotation>

  <xs:documentation>Nodo para la definición de la información detallada de un bien o servicio cubierto por el comprobante</xs:documentation>

    </xs:annotation>

    <xs:complexType>

  <xs:choice minOccurs="0">

<xs:element name="InformaciónAduanera" minOccurs="0">

      <xs:annotation>

    <xs:documentation>Nodo opcional para la definición de información aduanera aplicable cuando se trate de ventas de primera mano de mercancías importadas</xs:documentation>

      </xs:annotation>

      <xs:complexType>

    <xs:attribute name="numero" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido para definir el número del documento aduanero que ampara la importación del bien</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

    <xs:attribute name="fecha" type="xs:date" use="required">

.  <xs:annotation>

<xs:documentation>Atributo requerido para definir la fecha de expedición del documento aduanero que ampara la importación del bien</xs:documentation>

  </xs:annotation>

    </xs:attribute>

    <xs:attribute name="aduana" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido para definir la aduana por la que se dio la importación del bien</xs:documentation>

  </xs:annotation>

  <xs:simpleType>

<xs:restriction base="xs:string">

      <xs:minLength value="1"/>

      <xs:whiteSpace value="collapse"/>

</xs:restriction>

  </xs:simpleType>

    </xs:attribute>

      </xs:complexType>

</xs:element>

<xs:element name="CuentaPredial" minOccurs="0">

      <xs:annotation>

    <xs:documentation>Nodo opcional para la definición del dato de identificación del inmueble como fue registrado en el registro predial</xs:documentation>

      </xs:annotation>

      <xs:complexType>

    <xs:attribute name="numero" type="xs:string" use="required">

  <xs:annotation>

<xs:documentation>Atributo requerido para definir el número de la cuenta predial del inmueble cubierto por el presente concepto en caso de recibos de arrendamiento</xs:documentation>

  </xs:annotation>

    </xs:attribute>

      </xs:complexType>

</xs:element>

  </xs:choice>

  <xs:attribute name="cantidad" use="required">

<xs:annotation>

      <xs:documentation>Atributo requerido para definir la cantidad de bienes o servicios del tipo particular definido por el presente concepto</xs:documentation>

</xs:annotation>

<xs:simpleType>

      <xs:restriction base="xs:decimal"/>

</xs:simpleType>

  </xs:attribute>

  <xs:attribute name="unidad" type="xs:string" use="optional">

<xs:annotation>

      <xs:documentation>Atributo opcional para definir la unidad de medida aplicable para la cantidad expresada en el concepto</xs:documentation>

</xs:annotation>

  </xs:attribute>

  <xs:attribute name="descripcion" use="required">

<xs:annotation>

      <xs:documentation>Atributo requerido para definir la descripción del bien o servicio cubierto por el presente concepto</xs:documentation>

</xs:annotation>

<xs:simpleType>

      <xs:restriction base="xs:string">

    <xs:minLength value="1"/>

    <xs:whiteSpace value="collapse"/>

      </xs:restriction>

.</xs:simpleType>

  </xs:attribute>

  <xs:attribute name="valorUnitario" type="xs:decimal" use="required">

<xs:annotation>

      <xs:documentation>Atributo requerido para definir el valor o precio unitario del bien o servicio cubierto por el presente concepto</xs:documentation>

</xs:annotation>

  </xs:attribute>

  <xs:attribute name="importe" type="xs:decimal" use="required">

<xs:annotation>

      <xs:documentation>Atributo requerido para definir el importe total de los bienes o servicios del presente concepto. Debe ser equivalente al resultado de multiplicar la cantidad por el valor unitario expresados en el concepto</xs:documentation>

</xs:annotation>

  </xs:attribute>

    </xs:complexType>

       </xs:element>

</xs:schema>

D.      Generación de sellos digitales para comprobantes fiscales digitales.

Elementos utilizados en la generación de Sellos Digitales:

·Cadena Original, el elemento a sellar, en este caso un comprobante fiscal digital.

·Certificado para Sellos digitales y su correspondiente clave pública.

·Algoritmos de criptografía de clave pública para firma electrónica avanzada.

·Especificaciones de conversión de la firma electrónica avanzada a Base 64.

Para la generación de sellos digitales se utiliza criptografía de clave pública aplicada a una cadena original.

Criptografía de la Clave Pública

La criptografía de Clave Pública se basa en la generación de una pareja de números muy grandes relacionados íntimamente entre sí, de tal manera que una operación de encripción sobre un mensaje tomando como clave de encripción a uno de los dos números, produce una mensaje alterado en su significado que sólo puede ser devuelto a su estado original mediante la operación de desencripción correspondiente tomando como clave de desencripción al otro número de la pareja.

Uno de estos dos números, expresado en una estructura de datos que contiene un módulo y un exponente, se conserva secreta y se le denomina "clave privada", mientras que el otro número llamado "clave pública", en formato binario y acompañado de información de identificación del emisor, además de una calificación de validez por parte de un tercero confiable, se incorpora a un archivo denominado "certificado de firma electrónica avanzada o para sellos digitales".

El Certificado puede distribuirse libremente para efectos de intercambio seguro de información y para ofrecer pruebas de autoría de archivos electrónicos o acuerdo con su contenido mediante el proceso denominado "firma electrónica avanzada", que consiste en una característica observable de un mensaje, verificable por cualquiera con acceso al certificado digital del emisor, que sirve para implementar servicios de seguridad para garantizar: La integridad (facilidad para detectar si un mensaje firmado ha sido alterado), autenticidad, certidumbre de origen (facilidad para determinar qué persona es el autor de la firma y valida el contenido del mensaje) y no repudiación del mensaje firmado (capacidad de impedir que el autor de la firma niegue haber firmado el mensaje).

Estos servicios de seguridad proporcionan las siguientes características a un mensaje firmado digitalmente:

Es infalsificable.

La firma electrónica avanzada no es reciclable (es única por mensaje).

Un mensaje con firma electrónica avanzada alterado es detectable.

Un mensaje con firma electrónica avanzada no puede ser repudiado.

Por definición establecemos que: Las firmas electrónicas avanzadas sólo pueden ser generadas por personas y que un sistema o servicio informático emiten “sellos digitales”, los cuales se generan de manera idéntica a la firma electrónica avanzada.

Es propósito del sello digital emitir documentos con autenticidad e integridad verificables y no repudiables por el emisor (sistema o servicio informático). Para ello bastará tener acceso al mensaje original, al sello digital y al certificado digital del emisor.

Al ser el sello digital idéntico en su generación a una firma electrónica avanzada, proporciona los mismos servicios de seguridad y hereda las características de las firmas digitales.

Por consecuencia un comprobante fiscal digital sellado digitalmente por el contribuyente tiene las siguientes características:

Es infalsificable.

El sello digital de un comprobante fiscal digital no es reciclable (es único por documento).

Un comprobante fiscal digital sellado digitalmente alterado es detectable.

Un comprobante fiscal digital sellado digitalmente no puede ser repudiado.

Los algoritmos utilizados en la generación de un sello digital son los siguientes:

MD51, que es una función hash (digestión, picadillo o resumen) de un sólo sentido tal que para cualquier entrada produce una salida compleja de 16 bytes denominada "digestión".

RSAPrivateEncrypt2, que utiliza la clave privada del emisor para encriptar la digestión del mensaje.

RSAPublicDecrypt3, que utiliza la clave pública del emisor para desencriptar la digestión del mensaje.

1.- www.rsa.com/rsalabs/faq/3-6-6.html, www.ietf.org/rfc/rfc1321.txt

2.- www.dcs.uky.edu/~calvert/old-classes/645/assign4.ps

3.- web.mit.edu/crypto/arch/sgi_62/sbin/sshd

Cadena Original

Lo contenido en el formato establecido en el Rubro C “Estándar de comprobante fiscal digital extensible” de este Anexo, desde el tag de apertura del comprobante “<Comprobante” hasta el tag de cierre del mismo “</Comprobante>” inclusive los tags mencionados y el contenido del nodo Addenda.

Generación del Sello Digital

Para toda cadena original (o comprobante fiscal digital) a sellar digitalmente, la secuencia de algoritmos a aplicar es la siguiente:

I.- Aplicar el método de digestión MD5 cadena original a sellar. Este procedimiento genera una salida de 16 bytes para todo mensaje. La posibilidad de encontrar dos mensajes distintos que produzcan una misma salida es de 1 en 2135, y por lo tanto en esta posibilidad se basa la inalterabilidad del sello, así como su no reutilización. Es de hecho una medida de la integridad del mensaje sellado, pues toda alteración del mismo provocará una digestión totalmente diferente, por lo que no se podrá autentificar el mensaje.

El algoritmo de digestión MD5 no requiere del uso de secuencias de relleno (padding).

MD5 no requiere semilla alguna. El algoritmo cambia su estado de bloque en bloque de acuerdo a la entrada previa.

II.- Con la clave privada correspondiente al certificado digital del emisor del mensaje y del sello digital, encriptar la digestión del mensaje obtenida en el paso I utilizando para ello el algoritmo de encripción RSA.

Nota: La mayor parte del software comercial puede generar los pasos I y II invocando una sola función
y especificando la constante simbólica "RSAwithMD5Encryption". En el SAT este procedimiento se hace en pasos separados, lo cual es totalmente equivalente. Es importante resaltar que prácticamente todo el software criptográfico comercial incluye APIs o expone métodos en sus productos que permiten implementar la secuencia de algoritmos aquí descrita. La clave privada sólo debe mantenerse en memoria durante la llamada a la función de encripción; inmediatamente después de su uso debe ser eliminada de su registro de memoria mediante la sobreescritura de secuencias binarias alternadas de "unos" y "ceros".

III.- El resultado será una cadena binaria que no necesariamente consta de caracteres imprimibles, por lo que deberá traducirse a una cadena que sí conste solamente de tales caracteres. Para ello se utilizará el modo de expresión de secuencias de bytes denominado "Base 64", que consiste en la asociación de cada 6 bits de la secuencia a un elemento de un "alfabeto" que consta de 64 caracteres imprimibles. Puesto que con 6 bits se pueden expresar los números del 0 al 63, si a cada uno de estos valores se le asocia un elemento del alfabeto se garantiza que todo byte de la secuencia original puede ser mapeado a un elemento del alfabeto Base 64, y los dos bits restantes formarán parte del siguiente elemento a mapear. Este mecanismo de expresión de cadenas binarias produce un incremento de 25% en el tamaño de las cadenas imprimibles respecto de la original.

La codificación en base 64, así como su decodificación, se hará tomando los bloques a procesar en el sentido de su lectura, es decir, de izquierda a derecha.

El alfabeto a utilizar se expresa en el siguiente catálogo:

Elemento del Alfabeto

 

Valor B64

 

Valor
ASCII

 

 

 

Elemento del
Alfabeto

 

Valor
B64

 

Valor
ASCII

 

 

 

Elemento
del
Alfabeto

 

Valor
B64

 

Valor
ASCII

 

 

0

 

A

 

65

 

 

 

23

 

X

 

88

 

 

 

46

 

u

 

117

 

 

1

 

B

 

66

 

 

 

24

 

Y

 

89

 

 

 

47

 

v

 

118

 

 

2

 

C

 

67

 

 

 

25

 

Z

 

90

 

 

 

48

 

w

 

119

 

 

3

 

D

 

68

 

 

 

26

 

a

 

97

 

 

 

49

 

x

 

120

 

 

4

 

E

 

69

 

 

 

27

 

b

 

98

 

 

 

50

 

y

 

121

 

 

5

 

F

 

70

 

 

 

28

 

c

 

99

 

 

 

51

 

z

 

122

 

 

6

 

G

 

71

 

 

 

29

 

d

 

100

 

 

 

52

 

0

 

48

 

 

7

 

H

 

72

 

 

 

30

 

e

 

101

 

 

 

53

 

1

 

49

 

 

8

 

I

 

73

 

 

 

31

 

f

 

102

 

 

 

54

 

2

 

50

 

 

9

 

J

 

74

 

 

 

32

 

g

 

103

 

 

 

55

 

3

 

51

 

 

10

 

K

 

75

 

 

 

33

 

h

 

104

 

 

 

56

 

4

 

52

 

 

11

 

L

 

76

 

 

 

34

 

i

 

105

 

 

 

57

 

5

 

53

 

 

12

 

M

 

77

 

 

 

35

 

j

 

106

 

 

 

58

 

6

 

54

 

 

13

 

N

 

78

 

 

 

36

 

k

 

107

 

 

 

59

 

7

 

55

 

 

14

 

O

 

79

 

 

 

37

 

l

 

108

 

 

 

60

 

8

 

56

 

 

15

 

P

 

80

 

 

 

38

 

m

 

109

 

 

 

61

 

9

 

57

 

 

16

 

Q

 

81

 

 

 

39

 

n

 

110

 

 

 

62

 

+

 

43

 

 

17

 

R

 

82

 

 

 

40

 

o

 

111

 

 

 

63

 

/

 

47

 

 

18

 

S

 

83

 

 

 

41

 

p

 

112

 

 

 

 

 

 

 

 

 

 

19

 

T

 

84

 

 

 

42

 

q

 

113

 

 

 

 

 

 

 

 

 

 

20

 

U

 

85

 

 

 

43

 

r

 

114

 

 

 

 

 

 

 

 

 

 

21

 

V

 

86

 

 

 

44

 

s

 

115

 

 

 

 

 

 

 

 

 

 

22

 

W

 

87

 

 

 

45

 

t

 

116

 

 

 

 

 

 

 

 

 

 

 

Por tanto, los caracteres utilizados en el alfabeto de Base 64 son:

A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, /

y en el orden descrito les corresponden los índices del 0 al 63 en un arreglo de 64 elementos.
Para traducir de binario a Base 64, se examina la secuencia binaria evaluando 6 bits a la vez; si el valor de los primeros 6 bits es 0, entonces se imprime la letra A; si es 1, entonces se imprime la letra B y así . sucesivamente hasta completar la evaluación de todos los bits de la secuencia binaria evaluados de 6 en 6.

La función inversa consiste en reconstruir la secuencia binaria original a partir de la cadena imprimible que consta de los elementos del alfabeto de Base 64. Para ello se toman 4 caracteres a la vez de la cadena imprimible y sus valores son convertidos en los de los tres caracteres binarios correspondientes (4 caracteres B64 x 6 bits = 3 caracteres binarios x 8 bits), y esta operación se repite hasta concluir la traducción de la cadena imprimible.

Ejemplo de Sello digital:

GqDiRrea6+E2wQhqOCVzwME4866yVEME/8PD1S1g6AV48D8VrLhKUDq0Sjqnp9IwfMAbX0ggwUCLRKa+Hg5q8aYhya63If2HVqH1sA08poer080P1J6Z+BwTrQkhcb5Jw8jENXoErkFE8qdOcIdFFAuZPVT+9mkTb0Xn5Emu5U8=

Atentamente

Sufragio Efectivo. No Reelección.

México, D.F., a 24 de mayo de 2004.- El Jefe del Servicio de Administración Tributaria, José María . . . . . . . . . Zubiría Maqueo.- Rúbrica.