BOLETIN INFORMATIVO
Núm. P116
SIFEP
Con
el presente informo a ustedes que en la
página www.aduanas.gob.mx en el
apartado de NOTICIAS/Clave de Acceso al SAAI, se encuentra la opción SISTEMA DE
FIRMA DIGITAL DE PEDIMENTOS (SIFEP). En dicha opción se podrá extraer el
programa que instala el SIFEP, el cual servirá para generar la firma digital
del pedimento, utilizando el NIP de acceso al SAAI M3.
Derivado de las diferencias en
las distintas versiones de WINDOWS se les solicita realicen la prueba de
instalación de dicho sistema, en sus equipos y de presentarse algún problema,
notificarlo a los correos de monica.marcela@sat.gob.mx o teresa.macias@sat.gob.mx
con la finalidad de corregir cualquier inconveniente en el mismo y una vez
recibido el NIP de acceso al SAAI M3, estar en posibilidad de generar las
firmas digitales de los pedimentos enviados a validar.
Así mismo se anexa al presente
el archivo Algoritmos de Criptografía, el cual contiene la documentación
necesaria para que los desarrolladores de sistemas de captura de pedimentos
puedan incorporar la funcionalidad del SIFEP en sus sistemas.
Sin más por el momento reciban un cordial saludo.
Algoritmos
de Criptografía
Recibos
"auto-verificables"
Definición
Un recibo auto-verificable es un documento digital o
impreso que el Banco entrega a sus clientes como resultado del pago de
impuestos, derechos o aprovechamientos en el contexto de la Nueva Hacienda
Distributiva, y que el SAT publica y entrega a sus contribuyentes como
comprobación del cumplimiento de sus obligaciones (en adelante, al Banco y al
SAT se les denominará el emisor para
efectos de la descripción del recibo auto-verificable y sus procesos). El
recibo auto-verificable contiene la información suficiente de la transacción
efectuada (en adelante el mensaje)
junto con elementos imprimibles de seguridad que permiten hacer juicios sobre
la autenticidad del emisor, la integridad de su contenido y su validez como documento
probatorio.
Los elementos de seguridad mencionados se
implementan con la tecnología denominada "Criptografía de Llave Pública", utilizando los algoritmos RSA (por sus desarrolladores: Ron
Rivest, Adi Shamir y Leonard Adleman, mayor información en http://www.rsa.com).
La criptografía de Llave 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
llave de encripción a uno de los dos números, produce una mensaje alterado en
su significado que solo puede ser devuelto a su estado original mediante la
operación de desencripción correspondiente tomando como llave 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 "llave privada",
mientras que el otro número llamado "llave
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 digital".
Este último 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 digital",
que consiste en una característica observable de un mensaje, verificable por
cualquiera con acceso al certificado digital del emisor, que sirve para
garantizar la integridad, autenticidad, certidumbre de origen y no repudiación
del mensaje firmado.
La firma digital asocia a un mensaje con un emisor
en particular, siendo este último un individuo. Se denomina "sello digital" a la firma digital de
un mensaje producida por un sistema, un servicio automático, una página de
Internet, etc. que tiene asociado un certificado digital con el propósito de
emitir documentos con autenticidad e integridad verificables y no repudiables
por el sistema, servicio, página, etc. emisor. Para ello bastará tener acceso
al mensaje original, al sello digital y al certificado digital del emisor.
Los algoritmos utilizados son los siguientes:
MD51, que es una función hash de un solo
sentido tal que para cualquier entrada produce una salida compleja de 16 bytes
denominada "digestión".
RSAPrivateEncrypt2, que utiliza la llave
privada del emisor para encriptar la digestión del mensaje.
RSAPublicDecrypt3, que utiliza la llave
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
Elementos de
un recibo auto-verificable
Un recibo auto-verificable consta de tres elementos:
a) La información suficiente
sobre la transacción desarrollada, incluyendo la fecha de emisión. La
información estará separada por delimitadores
fácilmente interpretables, en este caso el carácter "pipe" ( | ).
b) El número de serie del
certificado digital del emisor.
c) El sello digital, cuyo
mensaje será la información de los incisos a) y b).
Certificación
3.1.1
Certificados
y Claves
Los certificados digitales utilizados para los
procesos descritos en este documento deberán atenerse a las siguientes reglas:
a) Deberán cumplir con el
estándar de Certificados Digitales X.509 V31
b) La generación del par de
llaves pública y privada deberá ocurrir en el equipo de cada emisor, quien
desde ese momento deberá velar por mantener el secreto de su llave privada. El
estándar PKCS12 establece que la estructura de datos que conforman
la llave privada deberá almacenarse encriptada, debiendo elegirse para ello una
clave de entre 8 y 255 caracteres, que no deberá ser fácilmente adivinable y al
mismo tiempo que sea fácil de recordar. Deberá evitarse el denominado
"ataque de diccionario", por lo que no se deberá elegir una clave que
no consista en una palabra o serie de palabras con significado en cualquier
idioma, ni fechas, marcas, nombres propios, etc.
c) La longitud de la llave
privada será de 1024 bits.
d) Las llaves públicas
incorporadas al requerimiento de certificación deberán ser certificadas por una
Autoridad Certificadora elegida de común acuerdo, como la AC del SAT, Banxico u
otras que el Banco someta a consideración del SAT.
1.-
www.ietf.org/rfc/rfc2459.txt
2.-
www.rsa.com/rsalabs/pkcs/pkcs-1/
Cadena Original
La Cadena Original consta de la información
suficiente acerca de la transacción, incluyendo fecha de emisión, separada por
delimitadores, para cuya función se ha seleccionado al carácter
"pipe" ( | ). Además, deberá integrarse a esta información el número
de serie del certificado digital del emisor.
Generación del Sello Digital
El sello digital consiste en una característica
observable de un mensaje, que lo relaciona íntimamente con su emisor de tal
manera que dicho sello digital resulta ser autentificable respecto del mensaje
para todo emisor, no puede ser elaborado salvo por el emisor auténtico, no es
reutilizable en el sentido de que cada mensaje tiene asociado uno y solo un
sello digital, es inalterable por la misma razón, y finalmente no puede ser
repudiado en virtud de la estrecha relación que se establece entre el mensaje,
el emisor y el sello digital.
La relación mencionada se establece mediante una
secuencia de algoritmos bien conocidos que permiten una implementación
homogénea y sencilla del procedimiento de sellado digital.
Para garantizar las características de
autentificación y no repudiación mencionadas antes, se utiliza criptografía de
llave pública, por lo que se requiere acordar los algoritmos a utilizar y
establecer los certificados digitales que serán utilizados para este efecto. La
razón de ello es que el sello deberá asociarse a acuses de recibo impresos en
una pantalla o en un papel, por lo que resulta inadecuado el uso tradicional de
archivos con formatos estandarizados donde es posible indicar estos valores.
Para todo mensaje a sellar digitalmente, la
secuencia de algoritmos a aplicar es la siguiente:
I.- Aplicar el método de digestión MD5 al mensaje 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 216, y por lo tanto en esta posibilidad se basa la
inalterabilidad del sello, así 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.
II.- Con la llave 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 llave privada solo 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.
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 |
0 |
A |
65 |
|
32 |
g |
103 |
1 |
B |
66 |
|
33 |
h |
104 |
2 |
C |
67 |
|
34 |
i |
105 |
3 |
D |
68 |
|
35 |
j |
106 |
4 |
E |
69 |
|
36 |
k |
107 |
5 |
F |
70 |
|
37 |
l |
108 |
6 |
G |
71 |
|
38 |
m |
109 |
7 |
H |
72 |
|
39 |
n |
110 |
8 |
I |
73 |
|
40 |
o |
111 |
9 |
J |
74 |
|
41 |
p |
112 |
10 |
K |
75 |
|
42 |
q |
113 |
11 |
L |
76 |
|
43 |
r |
114 |
12 |
M |
77 |
|
44 |
s |
115 |
13 |
N |
78 |
|
45 |
t |
116 |
14 |
O |
79 |
|
46 |
u |
117 |
15 |
P |
80 |
|
47 |
v |
118 |
16 |
Q |
81 |
|
48 |
w |
119 |
17 |
R |
82 |
|
49 |
x |
120 |
18 |
S |
83 |
|
50 |
y |
121 |
19 |
T |
84 |
|
51 |
z |
122 |
20 |
U |
85 |
|
52 |
0 |
48 |
21 |
V |
86 |
|
53 |
1 |
49 |
22 |
W |
87 |
|
54 |
2 |
50 |
23 |
X |
88 |
|
55 |
3 |
51 |
24 |
Y |
89 |
|
56 |
4 |
52 |
25 |
Z |
90 |
|
57 |
5 |
53 |
26 |
a |
97 |
|
58 |
6 |
54 |
27 |
b |
98 |
|
59 |
7 |
55 |
28 |
c |
99 |
|
60 |
8 |
56 |
29 |
d |
100 |
|
61 |
9 |
57 |
30 |
e |
101 |
|
62 |
+ |
43 |
31 |
f |
102 |
|
63 |
/ |
47 |
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.
Generación del
recibo con sello digital
El recibo con sello digital deberá ser contenido en
un espacio claramente delimitado, definiendo con claridad el inicio y fin de la
Cadena Original del recibo y del sello digital.
Verificación
del recibo con sello digital.
La impresión del recibo y su correspondiente sello
digital deberá incluir el recibo (mensaje) y el resultado de los pasos I, II, y
III. También deberá considerarse la impresión del número de serie del
certificado digital del emisor y la fecha de emisión del sello digital, con el
propósito de verificar que en dicha fecha el certificado no haya sido revocado.
La verificación de un sello digital deberá seguir
los siguientes pasos:
Ia.- Obtener el recibo (mensaje), el sello digital y el
certificado digital del emisor.
IIa.- Obtener la digestión del mensaje mediante el
algoritmo MD5. Esto producirá la conocida salida de 16 bytes.
IIIa.- Obtener la secuencia binaria original del sello
digital mediante la aplicación de la función inversa de Base 64.
IVa.- Con la llave pública contenida en el certificado
digital del emisor, desencriptar mediante el algoritmo RSA la secuencia binaria
obtenida en el paso IIIa. Este resultado debe contener una secuencia binaria de
16 bytes que es la digestión del mensaje original obtenida en el paso I.
Nota.- Al obtener la llave pública del emisor, es
necesario verificar que el certificado digital sea emitido por una Autoridad
Certificadora reconocida y confiable, que se encuentre dentro del período de
validez y que no sea un certificado revocado en la fecha de emisión del sello
digital.
Va.- Comparar los valores obtenidos en IIa y IVa; si
estos son iguales, entonces el sello digital es el único sello auténtico y
válido posible generado por el emisor poseedor del certificado digital
utilizado, en relación con el recibo (mensaje) que se está validando.