assinatura digital - PKCS destacado#7 para xml -dsig
-
22-09-2019 - |
Pergunta
Estou lutando com o seguinte cenário:
Uma mensagem XML é criada no lado do cliente e assinada digitalmente usando a janela de Mozilla.crypto.signtext. Após a assinatura, a mensagem e a assinatura são transmitidas por um serviço da web (.NET) para o servidor. Tudo está bem até este ponto.
No servidor, o XML deve ser incluído em outro documento XML, que é acessível ao público. A assinatura também deve ser publicada para conceder a não repudiação.
P: Existe uma opção suave para converter o PKCS#7 destacado em XML-DSIG (por exemplo, funcionalidade dentro da estrutura .NET)?
P2: Ou é possível criar o XML-DSIG já do lado do cliente sem usar plugins externos?
TNX para sua ajuda!
Alois Paulin
Solução
Devido à natureza dos formatos de assinatura digital XML e PKCS#7, não é possível converter de um para o outro.
Em uma explicação muito simplificada, a assinatura em PKCS#7 O formato contém, entre outras coisas, alguma estrutura de dados específica chamada Digestinfo que contém o Data Digest e um OID (identificador de objeto) e foi cifrado com a chave privada do usuário. o Xml-dsig O formato aplica a etapa final do algoritmo criptográfico (novamente com a chave privada do usuário) a um valor de dados diferente calculado a partir da digerir os dados XML original e algumas estruturas de dados XML-DSIG específicas. Portanto, como os dois valores cifrados não serão os mesmos, é possível gerar a assinatura XML-DSIG assinando os dados com a chave privada do usuário, à qual você não terá acesso (portanto, o nome privado).
A partir dessa explicação, a resposta para sua primeira pergunta é "Não, não há opção suave, não é possível".
Portanto, a única opção é gerar o XML-DSIG diretamente no lado do cliente. Isso não é possível usando o JavaScript padrão, definitivamente não com a janela do Firefox.crypto (que gera apenas assinaturas destacadas do PKCS7). Na minha empresa (www.isigma.es), resolvemos que, ao usar um applet, é uma solução comum na indústria de assinatura digital (existem muitas soluções comerciais e também de código aberto). Isso pode não ser uma opção no seu caso, se você não deseja plugins do navegador.
Capicom (o componente ativo/x baseado no Windows que você pode usar em uma configuração da Microsoft) também não gera XML-DSIG, apenas CMS/PKCS7.