BOLETIN INFORMATIVO

 

Núm. P116

Septiembre 17 de 2002

 

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.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ADMINISTRACION CENTRAL DE INFORMATICA

Ing. Jorge Montoya Castro