Actuacion digital
gatitos302 de Febrero de 2013
6.191 Palabras (25 Páginas)361 Visitas
Base64
Base64 es un método de codificación aplicado a datos binarios para representar la información obtenida en una cadena de caracteres en código ASCII. Esto es, la información binaria se lee en grupos de bits y cada grupo se traduce en su representacion ASCII-Base64.
Se usa principalmente para enviar información sobre medios que estan hechos para lidiar con texto y no con información binaria.
Este procesamiento de datos es usado por Solución Factible® para asegurar su inalterabildiad cuando ésta sea recibida por nuestros servidores, por lo tanto, la información que el desarrollador o el sistema genere como output será exactamente la misma que se recibirá como input en nuestro sistema para su posterior manipulación.
Este tipo de codificación se usa en el elemento sello de los CFD's (comprobantes fiscales digitales como factura electronica, comprobantes de pago...) el cual será descrito con más detalle a continuación.
1.1.1. Encoding
Si tomamos la cadena de caracteres (String):
Hola mundo
Al codificarlo en base64 el resultado es:
SG9sYSBtdW5kbw==
Las letras "Hol" de la frase codificada anteriormente equivalen a la codificación en base 64: "SG9s", el proceso para la conversión se detalla en la tabla a continuación.
Texto H o l
ASCII 72 6F 6C
Patron de bites 0 1 0 0 1 0 0 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0
Index 18 6 61 44
Codificación-Base64 S G 9 s
Tabla index base64
Value Char Value Char Value Char Value Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
1.1.2. Decoding
Para decodificar la información se debe usar un proceso especial. Primero, se agrupa cada 4 caracteres codificados en base64 y se realinean como 3 bytes. Sin embargo, hay 2 casos que tienen que ser considerados al final del conjunto de bytes. Si los últimos caracteres de la cadena codificada en base64 se encuentran 1 o 2 caracteres '=' ó '=='. Si se encuentra un '=' entonces se debe desechar el último byte que se viene arrastrando. Si se encuentran '==' al final de la cadena, entonces, se deben desechar los 2 últimos bytes de la secuencia.
Otro proceso importante que se tiene que hacer es ignorar todo caracter de la cadena que no sea un caracter base64 válido.
1.1.3. Ejemplos de Código
JAVA
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import org.bouncycastle.util.encoders.Base64;
public class Main{
public static void main(String[] args) {
if (args.length > 0) {
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-e") || args[i].equals("--encode")) {
String toEncode = args[i + 1] != null && args[i + 1].length() > 0 ? args[i + 1] : "";
toEncode = new String(toEncode.getBytes());
byte[] data = Base64.encode(toEncode.getBytes());
String encoded = new String(data);
System.out.println("Resultado de la codificación: " + encoded);
} else if (args[i].equals("-d") || args[i].equals("--decode")) {
String toDecode = args[i + 1] != null && args[i + 1].length() > 0 ? args[i + 1] : "";
byte[] data = Base64.decode(toDecode.getBytes());
String decoded = new String(data);
System.out.println("Resultado de la decodificación: " + decoded);
}
}
}else{
System.out.println("Nada que hacer... finalizando programa...");
}
}
}
1.1.4. Herramientas
Codificar
Descripción: Codifica un mensaje en base64.
Mensaje a codificar:
Decodificar
Descripción:Decodifica un mensaje base64.
Mensaje a decodificar:
1.2. CSD o Certificado de Sello Digital
El CSD, está compuesto de una Llave Pública, una Privada y su respectiva contraseña. Sin embargo, es fundamental entender que el CSD es diferente pero no totalmente independiente de la FIEL (para tramitar un CSD el SAT necesita una FIEL) pero NO pueden ser usadas para el mismo objetivo. Su manejo debe ser bien diferenciado y utilizarlos correctamente para los trámites y procedimientos correspondientes.
El certificado de sello digital es expedido por el SAT y es para uso específico de la generación de Comprobantes Fiscales Digitales (CFD). Por medio de ellos el contribuyente podrá sellar (firmar) electrónicamente la cadena original de los comprobantes fiscales digitales (como facturas electronicas u otros) que emita en cada una de sus sucursales; así se tendrá identificado el origen del comprobante fiscal digital, junto con la unicidad y las demás características que tienen los certificados digitales (Integridad, no repudio, autenticidad y confidencialidad). El contribuyente puede optar por pedir un sello digital para cada una de las sucursales, establecimientos o locales, donde emita comprobantes fiscales digitales.
Un CSD consta de:
Archivo “.cer” (Llave Pública)
Archivo “.key” (Llave Privada)
Contraseña de Llave Privada
Adicionalmente y en caso de requerir cancelar, la Contraseña de Revocación
La extensión del certificado del CSD (certificado de sello digital) emitido por el SAT es: ".cer", que a su vez es de tipo X509 DER, a continuación un ejemplo de comando usando openssl para ver el contenido del certificado del CSD contenido en base64:
openssl x509 -inform DER -in aaa010101aaa_csd_01.cer
Cuando Solución Factible® genera una Factura Electronica (u cualquier otro CFDI) se utiliza un CSD para poder “firmar” electrónicamente el comprobante fiscal digital, esto es, se usan en conjunto los 2 archivos pertenecientes al CSD, el ".cer" y el ".key" + la contraseña para firmar eletrónicamente la factura.
Se sella electrónicamente la cadena original de las facturas electrónicas que se emiten para garantizar su origen, unicidad y demás propiedades que se heredan de los certificados.
1.2.1. FIEL, FEA o Firma Electrónica Avanzada
El SAT define la FIEL como:
"Conjunto de datos asociados a un mensaje, que permiten asegurar la identidad del contribuyente y la integridad (no modificación posterior) del mensaje. Además de contar con un certificado digital expedido por el SAT o por un prestador de servicios de certificación autorizado por Banco de México, esta firma tiene las cualidades de Reconocimiento por el marco legal, Fiabilidad técnica basada en infraestructura de llave o clave pública, otorgando las garantías de Integridad, No repudio, Autenticidad y Confidencialidad."
NOTA: La FIEL no es válida para la generación de sello digital del CFD.
1.2.2. Diferenciar un CSD de una fiel
Una manera posible de identificar el tipo de certificado es tratar de iniciar sesión en el portal del SAT para ver si podemos ingresar. En caso de que sí podamos, entonces se trata de la FIEL, en el caso de no poder ingresar entonces es posible que se trate del CSD. Y es posible porque si bien puede no dejarnos entrar pero puede ser debido a que la contraseña sea incorrecta, o se haya intentado con los archivos intercalados entre otros certificados(.key de FIEL con .cer de CSD).
Otra opción es extraer el "subject" del certificado y fijarse en el valor "OU" (organization unit), si este tiene valor entonces es un CSD. ejemplo de comando con openssl mostrando este comportamiento:
openssl x509 -inform DER -in aaqm610917qja.cer -subject
Resultado:
subject= /CN=MARTIN ARBAIZA QUIROZ/name=MARTIN ARBAIZA QUIROZ/O=MARTIN ARBAIZA QUIROZ/x500UniqueIdentifier=AAQM610917QJA/serialNumber=AAQM610917MDFNSR08/OU=SucursalAVL
En el ejemplo anterior, se encuentra la cadena: /OU=SucursalAVL, por lo tanto es un CSD.
1.2.3. Lista de Contribuyentes Obligados (LCO)
La LCO es una lista que emite el SAT que, en resumen, contiene los RFC y CSD emitidos, generalmente, hasta el día anterior a su publicación.
La lista contiene:
RFC
Número de serie de CSD
Fecha de inicio de vigencia del CSD
Fecha de fin de vigencia del CSD
Status del CSD (Activo, Revocado o Caduco)
Validez de las obligaciones fiscales
En Solución Factible® como PAC consultamos la situación fiscal y el estado de los CSD de cada contribuyente que quiere timbrar con nosotros, antes de timbrar un CFDI, buscamos
...