Ir al contenido
Ravisign

Registro de auditoría

El registro de auditoría es el registro de todo lo que sucede con un sobre, desde el momento en que se crea hasta la conclusión. Es la principal evidencia de una firma electrónica avanzada: muestra quién hizo qué, cuándo, desde dónde y con qué confirmación de identidad.

Qué se registra#

Evento Cuándo ocurre
envelope_criado Se creó el sobre (panel, API o ChatISP)
envelope_enviado Se envió el sobre para firma
notificacao_enviada Se entregó una invitación a un firmante
link_aberto El firmante abrió el enlace personal
documento_visualizado El firmante abrió el documento
otp_enviado Se generó y envió un código de confirmación
otp_validado El firmante escribió el código correcto
otp_falhou El firmante escribió un código incorrecto
assinado El firmante firmó
recusado El firmante rechazó, con el motivo
lembrete_enviado Se envió un recordatorio
expirado El plazo venció sin todas las firmas
cancelado Quien lo envió canceló el sobre, con el motivo
documento_final_gerado La copia final fue armada y firmada por la plataforma
concluido Se concluyó el sobre
conclusao_retomada La conclusión se reanudó manualmente después de una falla
webhook_entregue Se entregó un aviso de evento al sistema de la cuenta
ancoragem El hash del día se selló con sello de tiempo (vea más abajo)

Cada evento guarda la fecha y hora en UTC con microsegundos, la IP y el navegador de quien actuó (cuando hay una persona actuando), la ubicación cuando el firmante dio su consentimiento, y datos propios del tipo de evento (por ejemplo, el canal del código o el hash de la copia final).

Nota el registro de auditoría nunca guarda nombre, correo electrónico, teléfono, CPF, selfie ni documento de identidad. Se refiere al firmante solo mediante un identificador interno; los datos personales se guardan por separado y cifrados.

Encadenamiento por hash#

Los eventos forman una cadena: el hash de cada evento se calcula a partir del contenido del evento y del hash del evento anterior. Modificar, insertar o eliminar cualquier registro antiguo cambia todos los hashes siguientes, y la ruptura aparece en la verificación. Además, los registros son solo de inserción: ningún camino del sistema modifica ni elimina un evento.

La cadena es única para toda la plataforma y atraviesa todas las cuentas. Esto significa que ni siquiera la reescritura de todo el registro de auditoría de un sobre pasaría desapercibida: rompería la secuencia de los eventos de todos los demás sobres registrados después.

El hash del último evento de cada sobre se imprime en el manifiesto de la copia final y se muestra en el validador público.

Fórmula#

Para quien necesita verificar el registro de auditoría de forma independiente (un perito, por ejemplo), la fórmula es pública:

Texto
hash = SHA-256( hash_anterior + "\n" + json_canonico(registro) )

Donde:

  • hash_anterior es el hash del evento anterior en la cadena, en 64 caracteres hexadecimales en minúscula. El primer evento de la plataforma usa 64 ceros.
  • "\n" es un salto de línea (un único byte 0x0A).
  • registro es el objeto con exactamente estos campos: conta_id, envelope_id, signatario_id, tipo, dados, ip, user_agent, geo y ocorrido_em. El identificador secuencial del propio evento no entra en el cálculo.
  • El resultado se escribe en hexadecimal en minúscula.

JSON canónico#

json_canonico produce siempre el mismo texto para el mismo contenido:

  1. Las claves se ordenan alfabéticamente en todos los niveles (incluso dentro de dados y geo).
  2. Sin espacios ni saltos de línea entre los elementos.
  3. Los caracteres acentuados y otros caracteres Unicode quedan tal como están (no se convierten en \u00e7), y la barra / no se escapa.
  4. Los números enteros salen como enteros (42, no "42").
  5. Un campo ausente o vacío sale como null.
  6. ocorrido_em es un texto en UTC con el formato AAAA-MM-DD HH:MM:SS.uuuuuu (con seis posiciones de microsegundos).

Ejemplo de verificación#

El fragmento siguiente recalcula el hash de un evento a partir del hash anterior y de los campos del registro:

PHP
<?php
function ordenar($valor) {
    if (!is_array($valor)) return $valor;
    if (array_is_list($valor)) return array_map('ordenar', $valor);
    ksort($valor, SORT_STRING);
    return array_map('ordenar', $valor);
}

function hashEvento(string $hashAnterior, array $registro): string {
    $canonico = json_encode(ordenar([
        'conta_id'      => $registro['conta_id'],
        'envelope_id'   => $registro['envelope_id'],
        'signatario_id' => $registro['signatario_id'],
        'tipo'          => $registro['tipo'],
        'dados'         => $registro['dados'],
        'ip'            => $registro['ip'],
        'user_agent'    => $registro['user_agent'],
        'geo'           => $registro['geo'],
        'ocorrido_em'   => $registro['ocorrido_em'],
    ]), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    return hash('sha256', $hashAnterior . "\n" . $canonico);
}

Para verificar una secuencia, comience por el hash_anterior del primer evento del intervalo, recalcule cada evento en orden y compárelo con el hash registrado. La primera diferencia señala exactamente el registro modificado.

Anclaje diario#

Una vez al día, Ravisign toma el hash del último evento del día anterior y obtiene para él un sello de tiempo ICP-Brasil. El sello prueba, mediante una autoridad independiente, que ese hash (y, por lo tanto, toda la cadena hasta él) ya existía en esa fecha. El propio sello se registra en el registro de auditoría como un evento ancoragem.

Así, aunque alguien con acceso total a la plataforma intentara recalcular la cadena entera a partir de un punto, los hashes ya anclados en los días anteriores dejarían de coincidir con los sellos emitidos.

Dónde consultar el registro de auditoría#

  • Panel: en el detalle del sobre, en la sección Historial, con la IP y el hash de cada evento.
  • API: la acción envelopes/eventos devuelve los eventos en orden con el hash de cada uno. Por privacidad, la API no devuelve datos personales, IP ni navegador. Consulte Sobres en la API.
  • Validador público: muestra el hash del último evento, el mismo impreso en el manifiesto.

Consejo para un peritaje que exija recalcular la cadena con todos los campos, el titular de la cuenta puede solicitar los registros completos del sobre al soporte de Ravi Systems.

Retención#

El registro de auditoría es prueba: se conserva incluso cuando los documentos y los datos personales de una cuenta se eliminan, durante el plazo necesario para el ejercicio regular de derechos. Consulte Privacidad y seguridad.

¿No encontró lo que buscaba?

Escriba al soporte de Ravi Systems al correo de abajo.

contato@ravisystems.com.br