ANEXO 20 VERSIÓN 3.3 - Publicado DOF: 28.07.2017

Rubro I-B


Generación de sellos digitales para comprobantes fiscales digitales por Internet.


Elementos utilizados en la generación de Sellos Digitales:

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 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 un 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 "certificado para sellos digitales" en adelante Certificado.

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 confirmación de estar de acuerdo con su contenido, ambos mediante el proceso denominado "firmado electrónico avanzado", 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:

Estos servicios de seguridad proporcionan las siguientes características a un mensaje con firma electrónica avanzada:

Los certificados de sello digital se generan de manera idéntica a los certificados de e.firma y al igual que las firmas electrónicas avanzadas el propósito del sello digital es emitir comprobantes fiscales con autenticidad, integridad, verificables y no repudiables por el emisor. Para ello basta tener acceso al mensaje original o cadena original, al sello digital y al certificado de sello digital del emisor.

Al ser el certificado de sello digital idéntico en su generación a un certificado de e.firma, proporciona los mismos servicios de seguridad y hereda las características de las firmas digitales. Por consecuencia un comprobante fiscal digital firmado digitalmente por el contribuyente tiene las características señaladas previamente.

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

A manera de referencia y para obtener información adicional, se recomienda consultar el sitio de comprobantes fiscales digitales que se encuentran dentro del portal del SAT: www.sat.gob.mx

Cadena Original


Se entiende como cadena original, a la secuencia de datos formada con la información contenida dentro del comprobante fiscal digital por Internet, establecida en el Rubro I.A. de este anexo, construida aplicando las siguientes reglas.

Reglas Generales:

Secuencia de Formación:

La secuencia de formación siempre se registra en el orden que se expresa en el apartado correspondiente a cada uno de los comprobantes fiscales, complementos y del timbre fiscal digital del SAT, tomando en cuenta las reglas generales expresadas en el párrafo anterior.

Generación del Sello Digital


Para toda cadena original a ser sellada digitalmente, la secuencia de algoritmos a aplicar es la siguiente:


Codificación en base 64.


La codificación en base 64, así como su decodificación, se realiza 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
0 A 65
1 B 66
2 C 67
3 D 68
4 E 69
5 F 70
6 G 71
7 H 72
8 I 73
9 J 74
10 K 75
11 L 76
12 M 77
13 N 78
14 O 79
15 P 80
16 Q 81
17 R 82
18 S 83
19 T 84
20 U 85
21 V 86
22 W 87
Elemento del alfabeto Valor B64 Valor ASCII
23 X 88
24 Y 89
25 Z 90
26 a 97
27 b 98
28 c 99
29 d 100
30 e 101
31 f 102
32 g 103
33 h 104
34 i 105
35 j 106
36 k 107
37 l 108
38 m 109
39 n 110
40 o 111
41 p 112
42 q 113
43 r 114
44 s 115
45 t 116
Elemento del alfabeto Valor B64 Valor ASCII
46 u 117
47 v 118
48 w 119
49 x 120
50 y 121
51 z 122
52 0 48
53 1 49
54 2 50
55 3 51
56 4 52
57 5 53
58 6 54
59 7 55
60 8 56
61 9 57
62 + 43
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.

Ejemplo de Sello digital generado con un certificado de 2048 bits:

AM0PWKyhvpj1Pf7AJVzAAGjaYU0t6r5hjk0DOj+wISCSdA2LZj7jmnBKivivgU8J5svcto9kABfNm246HG2y8 Q6YcQJmB6Dw2bUBoZfrPE54yP+S5MfPtCw5QhS948Pc91gJcLPrHmaRXINaEqq0mTGWr4aWSAZxcb9 Dql9KnvLcXt30KISnbc2+4m9RtpsTPLk2joKFGxf8eejGL69vO8txtmLqioInFDhTPWQcIKMdUutUbREsSsQ SfmOuoQdVBCCMY7SUK2ZtGDaCnshQSOVz/GHGfLQT4Qj0hetPtaDi60YPM5Mf3cekonBHb4jc2+FuCJ W+JKCsnI7sJ4+iYg==



Fundamento Legal