Ir para o conteúdo
Ravisign
DocumentaçãoAssinatura

Trilha de auditoria

A trilha de auditoria é o registro de tudo o que acontece com um envelope, do momento em que é criado até a conclusão. Ela é a principal evidência de uma assinatura eletrônica avançada: mostra quem fez o quê, quando, de onde e com qual confirmação de identidade.

O que é registrado#

Evento Quando acontece
envelope_criado O envelope foi criado (painel, API ou ChatISP)
envelope_enviado O envelope foi enviado para assinatura
notificacao_enviada Um convite foi entregue a um signatário
link_aberto O signatário abriu o link pessoal
documento_visualizado O signatário abriu o documento
otp_enviado Um código de confirmação foi gerado e enviado
otp_validado O signatário digitou o código correto
otp_falhou O signatário digitou um código errado
assinado O signatário assinou
recusado O signatário recusou, com o motivo
lembrete_enviado Um lembrete foi enviado
expirado O prazo venceu sem todas as assinaturas
cancelado Quem enviou cancelou o envelope, com o motivo
documento_final_gerado A via final foi montada e assinada pela plataforma
concluido O envelope foi concluído
conclusao_retomada A conclusão foi retomada manualmente depois de uma falha
webhook_entregue Um aviso de evento foi entregue ao sistema da conta
ancoragem O hash do dia foi selado com carimbo do tempo (veja abaixo)

Cada evento guarda data e hora em UTC com microssegundos, o IP e o navegador de quem agiu (quando há uma pessoa agindo), a localização quando o signatário consentiu, e dados próprios do tipo de evento (por exemplo, o canal do código ou o hash da via final).

Nota a trilha nunca guarda nome, e-mail, telefone, CPF, selfie nem documento de identidade. Ela se refere ao signatário só por um identificador interno; os dados pessoais ficam separados e cifrados.

Encadeamento por hash#

Os eventos formam uma cadeia: o hash de cada evento é calculado a partir do conteúdo do evento e do hash do evento anterior. Alterar, inserir ou apagar qualquer registro antigo muda todos os hashes seguintes, e a quebra aparece na verificação. Além disso, os registros são somente de inclusão: nenhum caminho do sistema altera ou apaga um evento.

A cadeia é única para a plataforma inteira, atravessando todas as contas. Isso significa que nem mesmo a reescrita de toda a trilha de um envelope passaria despercebida: ela quebraria a sequência dos eventos de todos os outros envelopes registrados depois.

O hash do último evento de cada envelope é impresso no manifesto da via final e mostrado no validador público.

Fórmula#

Para quem precisa verificar a trilha de forma independente (um perito, por exemplo), a fórmula é pública:

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

Onde:

  • hash_anterior é o hash do evento anterior na cadeia, em 64 caracteres hexadecimais minúsculos. O primeiro evento da plataforma usa 64 zeros.
  • "\n" é uma quebra de linha (um único byte 0x0A).
  • registro é o objeto com exatamente estes campos: conta_id, envelope_id, signatario_id, tipo, dados, ip, user_agent, geo e ocorrido_em. O identificador sequencial do próprio evento não entra no cálculo.
  • O resultado é escrito em hexadecimal minúsculo.

JSON canônico#

json_canonico produz sempre o mesmo texto para o mesmo conteúdo:

  1. As chaves são ordenadas em ordem alfabética em todos os níveis (inclusive dentro de dados e geo).
  2. Sem espaços nem quebras de linha entre os elementos.
  3. Caracteres acentuados e outros caracteres Unicode ficam como estão (não viram \u00e7), e a barra / não é escapada.
  4. Números inteiros saem como inteiros (42, não "42").
  5. Campo ausente ou vazio sai como null.
  6. ocorrido_em é um texto em UTC no formato AAAA-MM-DD HH:MM:SS.uuuuuu (com seis casas de microssegundos).

Exemplo de verificação#

O trecho abaixo recalcula o hash de um evento a partir do hash anterior e dos campos do 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 uma sequência, comece pelo hash_anterior do primeiro evento do intervalo, recalcule cada evento em ordem e compare com o hash registrado. A primeira diferença aponta exatamente o registro alterado.

Ancoragem diária#

Uma vez por dia, o Ravisign pega o hash do último evento do dia anterior e obtém para ele um carimbo do tempo ICP-Brasil. O carimbo prova, por uma autoridade independente, que aquele hash (e, portanto, toda a cadeia até ele) já existia naquela data. O próprio carimbo é registrado na trilha como um evento ancoragem.

Com isso, mesmo que alguém com acesso total à plataforma tentasse recalcular a cadeia inteira a partir de um ponto, os hashes já ancorados nos dias anteriores deixariam de conferir com os carimbos emitidos.

Onde consultar a trilha#

  • Painel: no detalhe do envelope, na seção Histórico, com IP e hash de cada evento.
  • API: a ação envelopes/eventos devolve os eventos em ordem com o hash de cada um. Por privacidade, a API não devolve dados pessoais, IP nem navegador. Veja Envelopes na API.
  • Validador público: mostra o hash do último evento, o mesmo impresso no manifesto.

Dica para uma perícia que exija recalcular a cadeia com todos os campos, o titular da conta pode solicitar os registros completos do envelope ao suporte da Ravi Systems.

Retenção#

A trilha é prova: ela é mantida mesmo quando os documentos e os dados pessoais de uma conta são expurgados, pelo prazo necessário ao exercício regular de direitos. Veja Privacidade e segurança.

Não encontrou o que procurava?

Fale com o suporte da Ravi Systems pelo e-mail abaixo.

contato@ravisystems.com.br