Se publica el Anexo 20 de la Resolución Miscelánea Fiscal 2014 en el Diario Oficial de la Federación el día de hoy 17 de febrero de 2014. Este famoso anexo contiene los requisitos oficiales de los Comprobantes Fiscales Digitales a Través de Internet CFDI. En este articulo se habla respecto a la generación del Sello Digital que va insertado en al momento de ser sellado el comprobante, aunque es demasiado técnica la publicación es necesario saber como se genera este sello para saber que se esta generando correctamente y así cumplir con dicho requisito:
Generación de sellos digitales para comprobantes fiscales digitales a través de Internet
Para toda cadena original a ser sellada digitalmente, la secuencia de algoritmos a aplicar es la siguiente:
I.- Aplicar el método de digestión SHA-1 a la cadena original a sellar incluyendo los nodos Complementarios. Este procedimiento genera una salida de 160 bits (20 bytes) para todo mensaje. La posibilidad de encontrar dos mensajes distintos que produzcan una misma salida es de 1 en 2160, 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.
SHA-1 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 podría generar los pasos I y II invocando una sola función y especificando una constante simbólica. 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 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 sobre escritura 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+Hg5q8aYhya63If2H
Fuente: DOF 17-02-2014

Nuestra labor es compartir a Contadores Públicos, Despachos y Empresas, nuestra experiencia en el ámbito contable, fiscal, financiero y de seguridad social, con el fin de promover la cultura contable en México.
Esperamos les sea de utilidad la información aquí publicada, puedes enviarnos tu consulta al correo electrónico: contacto@contadormx.net