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
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
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.