« Arranjo simples - Código delphi - Parte 2 | Home | Diferenças entre a CAT-102/2007 e a CAT-13/2008 »
Como utilizar o LockBox para gerar EAD / CAT-52 / Delphi
By Paulo (CincoBytes) | February 12, 2008
Devido a dificuldade que muitos estão encontrando para gerar o registro EAD da portaria CAT-52, resolvi postar um pequeno exemplo com o LockBox da TurboPower:
1 - Baixe o LockBox/TurboPower em http://sourceforge.net/projects/tplockbox/
2 - Adicionar em uses … LbCipher, LbClass, LbUtils, LbAsym, LbRSA;
3 - Os seguintes passos devem ser seguidos para gerar a Assinatura digital:
(A) - Criar uma chave privada de 1024 bits, equivalente a um número hexadecimal de 256 dígitos. Para isso você pode utilizar o programa exemplo que vem com o LockBox…

-
Tendo em mãos o par de chaves é só seguir os passos abaixo; é importante frisar que não é preciso gerar uma chave nova para cada arquivo, mas por questões de segurança cada cliente deve (mas não obrigatoriamente) ter seu próprio par de chaves.
var
MD5Digest: TMD5Digest;
HashDoArquivo: string;
EAD: string;
RSA: TLbRSASSA;
begin
// (B) - Aplicar a função unidirecional MD5 uma única vez em
// todo o arquivo, com exceção do registro EAD. O resultado
// será um código de 128 bits, ou 16 caracteres ASCII,
// correspondendo a um número hexadecimal de 32 dígitos.
// Utilizar nos cálculos o número hexadecimal,
// considerando-o como um único bloco.
StringHashMD5(MD5Digest, ArquivoCAT52);
HashDoArquivo := BufferToHex(MD5Digest, SizeOf(MD5Digest));
// (C) - Criptografar o código hexadecimal gerado no item (B),
// utilizando a chave do item (A), pelo algoritmo RSA
// de chave pública. O resultado dessa critptografia,
// um número hexadecimal com até 256 dígitos,
// que deverá ser informado no campo Assinatura digital.
RSA := TLbRSASSA.Create(self);
RSA.HashMethod := hmMD5;
RSA.KeySize := aks1024;
RSA.PrivateKey.ExponentAsString := '9B5D607C0FB0E0FC561A6AD3A' +
'12C8C544D8765EF77BB21A9164B91DCEAA5F710B8B16982377FAB7BC9D' +
'D680164FD63955308A8D3571CCCB41B409121F3CEAC67DEE49EFE24150' +
'AC0AD4AE2B593D4B7C925A7CFE70B8D3103F1AC627FE9A5F05D1E3CDAD' +
'ECE37FD4C030B6D03583BBA940475EAB5732DE57A9259485EA8155A45';
RSA.PrivateKey.ModulusAsString := 'BBD2D411FDAE44EE99B1EC81FF' +
'2AC00ED6421BDBE51867DAB246BB0D4F3C10CA80928DE2A7F6897DCEDA' +
'EF337262E283E10C859750C3215EC03CE4D6FF70AA05366B56DA57BA20' +
'0D7E16F65E92F46FCE5220B519846A2C928F6D9BCFCEAE9D29509BA762' +
'24DF2EF867A4A8FB6172E8DAF34B96A964A5B87D00122C3DB7206558';
RSA.SignString(HashDoArquivo);
EAD := RSA.Signature.IntStr;
// Agora com a assinatura pronta é só adiciona-la ao arquivo!
Nota: Para fins didáticos o exemplo acima utiliza a chave de maneira literal, mas você pode optar por gravar a chave em arquivo e utilizar o comando RSA.PrivateKey.LoadFromFile(’X:\Caminho\SuaChavePrivada.pem’);
Mais detalhes sobre o uso do LockBox pode ser obtido junto a sua documentação ou nos programas exemplos que vem no pacote.
Leia também: Cat-52-md5-rsa-ead-um-enigma-por-enquanto
Abraço a todos!

April 12th, 2008 at 11:58 pm
Valeu, foi muito util para mim, pois não tinha a menor ideia de como fazer isso.
Abraços
César
May 6th, 2008 at 3:13 pm
Desculpe incomodar mas onde eu arrumo a chave para gerar esse código, só preciso de uma chave não é ?
Sem mais,
Guilherme
May 6th, 2008 at 4:19 pm
Guilherme…
Você pode baixar o pacote do lockbox e
compilar o programa exemplo ou se preferir
eu lhe envio o programa já compilado por email.
[]
May 16th, 2008 at 4:53 pm
Boa tarde,
Eu baixei esse pacote, rodei o projeto no Delphi, mas dá erro num arquivo de biblioteca.
Eu sou programador com linguagem progress.
Tem uma maneira de eu arrumar um executável seu, onde eu possa passar como parametros as chaves privadas e publicas, e o texto a ser encriptado?
Obrigado.
May 19th, 2008 at 9:04 am
Fabiano…
Enviei (hoje) com instruções para o seu email,
se tudo estiver Ok vou postar aqui para todos!
[]
August 5th, 2008 at 2:43 pm
Paulo,
Muito obrigado pela dica.
Estava tentando gerar via Crypto API, mas muito complicado,
pelo LockBox é bem mais simples.
Valeu…
August 18th, 2008 at 6:19 pm
Valeu,
Muito Obrigado,
Que Deus te de em Dobro,
Atitudes como está são louváveis, e raras.
October 13th, 2008 at 6:39 pm
O que garante que cada sistema tenha uma chave única? A chave publica entra em qual ponto, ela é fornecida ao fisco? Independente disso, show mesmo sua explicação visual, estava tentando usar OpenSSl mas ia ser um parto.