none
Proyecto Chileano - verificar una firma RRS feed

  • Debate general

  • Hola,

    Trato de intender un proyecto para verificar una firma sobre un archivo XML, en qué la documentación esta disponible aquí , pero me encuentro problemas para comprender lo qué debo hacer.

    Investigué y encontré un codigo vb a trabajar en este proyecto pero no es gratis, pero encontré un ejemplo de archivo xml generado y me gustaría trabajar en este ejemplo.

    En mi código vb, he considerado este ejemplo de codigo XML enviado por el servicio de los impuestos :

    <AUTORIZACION>
    <CAF version="1.0">
                        <DA>
                            <RE>97975000-5</RE>
                            <RS>RUT DE PRUEBA</RS>
                            <TD>33</TD>
                            <RNG>
                                <D>1</D>
                                <H>200</H>
                            </RNG>
                            <FA>2003-09-04</FA>
                            <RSAPK>
                                <M>0a4O6Kbx8Qj3K4iWSP4w7KneZYeJ+g/prihYtIEolKt3cykSxl1zO8vSXu397QhTmsX7SBEudTUx++2zDXBhZw==</M>
                                <E>Aw==</E>
                            </RSAPK>
                            <IDK>100</IDK>
                        </DA>
                        <FRMA algoritmo="SHA1withRSA">g1AQX0sy8NJugX52k2hTJEZAE9Cuul6pqYBdFxj1N17umW7zG/hAavCALKByHzdYAfZ3LhGTXCai5zNxOo4lDQ==</FRMA>
                    </CAF>
    <RSASK>contenido de la llave privada</RSASK>
    <RSAPUBK>contenido de la llave publica</RSAPUBK>
    </AUTORIZACION>

    Y en mi código vb, he hecho eso, para tratar de verificar la firma :

            Dim local_modulus_string As String = "0a4O6Kbx8Qj3K4iWSP4w7KneZYeJ+g/prihYtIEolKt3cykSxl1zO8vSXu397QhTmsX7SBEudTUx++2zDXBhZw=="
            Dim local_exponente_string As String = "Aw=="
            Dim local_signature_string As String = "g1AQX0sy8NJugX52k2hTJEZAE9Cuul6pqYBdFxj1N17umW7zG/hAavCALKByHzdYAfZ3LhGTXCai5zNxOo4lDQ=="
            Dim local_idk As String = "100"
    
            Dim local_modulus_bytes() As Byte = System.Convert.FromBase64String(local_modulus_string)
            Dim local_exponente_bytes() As Byte = System.Convert.FromBase64String(local_exponente_string)
            Dim local_signature_bytes() As Byte = System.Convert.FromBase64String(local_signature_string)
            Dim local_length_idk As Integer = local_idk.Length
    
            Dim l_nb_elem As Integer = local_signature_bytes.Length
            Dim l_reste(l_nb_elem - 1) As Byte
            Dim l_message As String = ""
            Dim l_messageString As String = ""
    
            For i = 0 To l_nb_elem - 1
                l_reste(i) = Math.Pow(local_signature_bytes(i), local_exponente_bytes(0)) Mod local_modulus_bytes(i)
                l_message = l_message & l_reste(i).ToString
            Next
    
            Dim l_pos As Integer = 1
            While l_pos <= l_message.Length
                l_messageString = l_messageString & ChrW(Microsoft.VisualBasic.Mid(l_message, l_pos, local_length_idk - 1))
                l_pos = l_pos + local_length_idk - 1
            End While
    Pero no sé como comparar este resulto con el "hash value", pues no existe en el archivo xml enviado del servicio de los impuestos. Gracias
    domingo, 28 de diciembre de 2014 16:18

Todas las respuestas

  • Estoy confundido, me encontré con esta pagina web, se dice que no puedo comprobar la firma , ¿es cierto ?

    http://www.edreams.cl/factura-electronica-obligatoria-sii-software-2014-dte-openssl-xmlsec/

    miércoles, 7 de enero de 2015 10:36
  • Pudiste verificar la firma, yo estoy tratando de realizarlo. Haber si me das un tips
    domingo, 3 de junio de 2018 0:25
  • Hola Amigos, yo estoy con la misma duda.

    Pero según lo que he podido investicar y ver, es que antes de todo hay que saber que el SII utiliza el metodo de firma denominado con "CLAVE PUBLICA" o Algoritmo Asimetrico. ( https://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica ).

    Teniendo claro como funciona eso, es que el SII utiliza dos certificados para validar la valides de un documento electronico.  El 100.cer y 300.cer que son un par de llaves publicas (certificacion y produccion respectivamente) usar para validar una firma.

    He estado trabando en esto ( https://social.msdn.microsoft.com/Forums/es-ES/e0bf9ca3-559f-48dc-a0b5-be792f7312e1/cmo-verificar-valides-de-una-firma-sha1withrsa?forum=vcses)

    pero me he estancado en la validacion del documento. Ya he tengo todos los parametros que se suponen son necesarios para validar. Pero no se a que funcion pasar los para validar.

    He usaso VerifyHash y VerifyData de RSACryptoServiceProvider sin resultados satisfactorios. Siempre me da la verificacion Erronea alguien que sepa como validar correctamente.

    Saludos!!

    jueves, 7 de junio de 2018 14:27