Como eu decidi proteger documentos contra falsificação e "inventei" uma assinatura digital eletrônica

Sobre o que é isso


A idéia de criar meu pequeno projeto na Internet para proteger documentos contra falsificação foi motivada por uma discussão no fórum de defectoscopistas dedicada a uma falsificação total das conclusões do controle de qualidade que eles emitiram.

Durante a implementação do meu projeto, percebi que cheguei ao conceito de assinatura digital eletrônica, ou seja, uma bicicleta, é claro, não inventei, mas a história sobre o meu caminho pode ser instrutiva.

Relevância da tarefa de proteção contra falsificações


O fato é que, em nosso século de informações sem papel, nem uma única construção de capital, seja um gasoduto ou um shopping center, pode prescindir da preparação de um conjunto completo de documentação construída, que inclui conclusões de testes não destrutivos (visuais, radiográficos, ultrassonográficos).



Esta conclusão é um documento elaborado sob um determinado formulário com uma conclusão sobre a adequação ou inadequação de, por exemplo, uma solda. Serviços de teste não destrutivos custam dinheiro, e geralmente são bastante consideráveis. Um cliente / intermediário inescrupuloso pode contratar um laboratório credenciado, receber várias opiniões dele e interromper ou suspender o trabalho.

O que surpreende o operador do detector de falhas ou o chefe do laboratório quando descobre que, mesmo após o término do trabalho, são tiradas conclusões em seu nome, colocadas em selos falsos e assinaturas falsificadas. A reputação do laboratório está sofrendo e, de fato, a lei está sendo violada. É que, em vários casos, ninguém saberá sobre isso.

Como parte da discussão - como proteger seus documentos, foi expressa a idéia de colocar um código QR no documento em que o número da conclusão, a data e a conclusão sobre a adequação ou não do objeto de controle serão registrados. Por que esse método é bom - o código QR permanecerá claramente distinguível ao digitalizar e copiar um documento.

No entanto, os golpistas também poderão simplesmente gerar um código QR com o conteúdo necessário.

O nascimento de uma ideia


E então um pensamento me ocorreu - por que não criptografar o conteúdo de um código QR com um algoritmo confiável. Nesse caso, você precisa criar uma maneira de descriptografá-lo ao digitalizar, por exemplo, através da câmera de um smartphone. Aqui nasceu a idéia de descriptografar ao lado do serviço da web, que armazenará a chave para descriptografia.

A última vez que criei um site em 2000 no bloco de notas e não estou muito familiarizado com as modernas tecnologias de construção de sites, então escolhi o Wix, pensando que, com a ajuda do serviço, obteria uma bela imagem e possibilidades mínimas para trabalhar com um banco de dados, e com o código Wix codificarei isso. do que eu preciso.

Devo dizer imediatamente que o fiz sem muita dificuldade e, em algumas noites, como amador, consegui montar a solução de que precisava a partir de blocos mais ou menos prontos.

Criptografia


Peguei o algoritmo de criptografia AES de 128 bits finalizado com a implementação de Java Script no Github e o coloquei na seção de back-end do site.

Esta foi talvez a parte mais fácil do trabalho. Como a criptografia em si funciona não foi totalmente desinteressante para mim. Eu estava preocupado com a grandeza do plano.

O principal é não esquecer de traduzir o texto codificado em bytes, e a criptografia resulta em HEX.

// Convert text to bytes var textBytes = aesjs.utils.utf8.toBytes(text); // The counter is optional, and if omitted will begin at 1 var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); var encryptedBytes = aesCtr.encrypt(textBytes); // To print or store the binary data, you may convert it to hex var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); 

Geração de código QR


Eu usei a API pronta.

Para funcionar, basta criar um objeto html1 - para exibir código html arbitrário e chamar a função API

 let val = “ " $w("#html1").src = "https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=" + val.toString(); $w("#html1").show(); 

Trabalhar com usuários


O Wix suporta os recursos básicos de registro de usuário e edição de perfil. A ferramenta é um pouco buggy, mas viável.

Eu só precisava adicionar um campo que descreva o nome da organização que o usuário registrado representa, mas esse campo é somente leitura e é preenchido pelo administrador do serviço quando recebe a confirmação de que o usuário registrado realmente representa a organização especificada.

Também era necessário fixar a lógica mais simples associada ao acesso pago / gratuito a funções (até 20 documentos por mês podem ser protegidos gratuitamente) e o prazo para pagamento de serviços.

Princípio de funcionamento


Uma chave de criptografia privada exclusiva está vinculada à conta do usuário.

Um usuário conectado preenche um formulário com informações sobre a conclusão (número, data, resultado):



Em seguida, o algoritmo retorna uma URL que contém o texto cifrado TEXT e atua como a chave pública USER_ID, como no exemplo abaixo:

https:// * * /checkqr?user=3b01b0aa-68a0-4521-ab12-f17b86d3eabc&v=1.0&text=8a026594c26be959f4280e28fe8402c1acef233e369a31613d654d3b0a5bbaca206f3058d27d2fde66b65cb64a5a6caecb69b07ad39c0015e923dad89eb723

O URL se transforma em um código QR, que o usuário já coloca em seu documento, copiando-o para a área de transferência (você pode incluí-lo no arquivo de origem ou colá-lo como adesivo em um documento impresso finalizado).



O que é importante aqui - como tal, as informações não entram no banco de dados do site, mas permanecem apenas na forma deste link e em um código QR que contém esse link. Portanto, nenhuma informação sobre o conteúdo do documento protegido é armazenada no servidor.

O código é verificado pelo site ao analisar o link


Para analisar quando um site reconhece um link, usei a ajuda do código Wix
www.wix.com/code/reference/wix-http-functions.html

Se algo desse errado durante a descriptografia, seria possível fazer algumas alterações no código QR original
“O código do documento foi descriptografado com um erro. Possível falsificação. Entre em contato com a organização que preparou o documento para esclarecimentos. ”
Se a descriptografia for concluída com êxito, o texto descriptografado será emitido contendo o nome do laboratório, número do documento, data de emissão e resultado, e o usuário deverá comparar o resultado da descriptografia com o que vê no documento real.

Conclusão


Desde o nascimento da idéia, com a ajuda de vários tijolos prontos, cheguei a uma implementação de trabalho.

Convido você a uma discussão sobre a idéia que surgiu, uma tentativa de testar / hackear meu serviço.

O que falta ser concluído


  • Escreva nos resultados da implementação no habr
  • Entenda como redefinir a consulta se já houver uma verificação de link uma vez
  • Para descobrir como reduzir o texto cifrado, porque quando uma URL longa é codificada, o tamanho do código QR é muito grande
  • Adicione a capacidade de copiar o código para a área de transferência ou enviá-lo por e-mail com o clique de um botão (até descobrir como fazê-lo em javascript)
  • Melhore o trabalho com a versão móvel

Resposta preliminar a possíveis críticas:


Não é mais fácil para um laboratório manter um registro de conclusões em seu site e uma etiqueta QR semelhante levará a esse registro ou até exibirá uma cópia do relatório?
Isso pode ser feito, mas será necessário um trabalho manual significativo ou a introdução de sua própria solução de TI como a desenvolvida por mim, mas obviamente custará mais do que usar uma solução pronta.

É impossível tornar esse registro completamente acessível ao público, porque as informações não são públicas, mas só podem ser consideradas pelo contratado, pelo cliente e pela Rostekhnadzor.

Source: https://habr.com/ru/post/pt442210/


All Articles