Integração do EDS da NCA RK em sistemas de informação baseados em tecnologias da web

Vou falar sobre os meandros da introdução de assinaturas digitais eletrônicas (EDS) em sistemas de informação (SI) baseados em tecnologias da Web no contexto do Centro Nacional de Autoridades de Certificação da República do Cazaquistão (NTC RK) .



O foco será a formação de um EDS sob documentos eletrônicos e, consequentemente, o software criptográfico NCALayer fornecido pela NCA RK. Em particular, prestarei atenção aos problemas relacionados ao UX e à quantidade de funcionalidades suportadas do NCALayer.



Dividirei o processo nas seguintes etapas:



  • a formação de uma apresentação invariável do documento assinado (pelo documento assinado, significarei quaisquer dados que precisam ser assinados, como: contrato, formulário de pedido, formulário de autenticação etc.);
  • assinar um documento na interface da web usando o NCALayer;
  • verificação de assinatura no servidor;
  • (se necessário) preparação de uma assinatura para armazenamento a longo prazo.


Formação da representação permanente do documento assinado



É importante que os desenvolvedores entendam que qualquer alteração em um documento assinado levará ao fato de que a assinatura abaixo dele não passará mais na verificação. Nesse caso, as alterações podem ser causadas não apenas pela edição dos dados do documento, mas também pela atualização da estrutura do documento ou do mecanismo para sua serialização.



Vamos dar um exemplo simples - os documentos são armazenados como registros em um banco de dados. Para assinar um documento, é necessário formular sua apresentação na forma de um único bloco de dados (é claro, você pode assinar cada campo individualmente, mas geralmente eles não o fazem), você pode fazer isso, por exemplo, das seguintes maneiras:



  • extrair todos os campos do registro, convertê-los em seqüências de caracteres e concatená-los em uma linha;
  • gerar representação XML ou JSON;
  • gerar um documento PDF com base em um modelo com algum design contendo dados do registro;
  • etc.


:



  • ( ) ;
  • .


, , , :



  • ;
  • ( , , ).


, - , .



, — ( ) , . , , , . . .



NCALayer



NCALayer WebSocket , 127.0.0.1, ( ) . NCALayer — .



API NCALayer . , NCALayer WebSocket KAZTOKEN mobile (KAZTOKEN mobile API NCALayer).



NCALayer WebSocket, ncalayer-js-client async .



NCALayer kz.gov.pki.knca.commonUtils, kz.gov.pki.knca.applet.Applet ( Java ) , , , , — ( -) .



kz.gov.pki.knca.commonUtils , ( , ), . :



  • , 'PKCS12',
  • ( -), , , getActiveTokens.


, NCALayer , :



  • getActiveTokens, , 'PKCS12' ;
  • getActiveTokens, , , , , , , 'PKCS12'.


( ):



  • createCAdESFromBase64 — CMS (CAdES);
  • createCMSSignatureFromBase64 — , (TSP) CMS (CAdES) ;
  • signXml — XML , (XMLDSIG);
  • signXmlssignXml, XML .


, , .



kz.gov.pki.knca.commonUtils :



  • 'AUTHENTICATION' — ;
  • 'SIGNATURE' — .


NCLayer , .



ncalayer-js-client:



async function connectAndSign(base64EncodedData) {
  const ncalayerClient = new NCALayerClient();

  try {
    await ncalayerClient.connect();
  } catch (error) {
    alert(`    NCALayer: ${error.toString()}`);
    return;
  }

  let activeTokens;
  try {
    activeTokens = await ncalayerClient.getActiveTokens();
  } catch (error) {
    alert(error.toString());
    return;
  }

  const storageType = activeTokens[0] || NCALayerClient.fileStorageType;

  let base64EncodedSignature;
  try {
    base64EncodedSignature = await ncalayerClient.createCAdESFromBase64(storageType, base64EncodedData);
  } catch (error) {
    alert(error.toString());
    return;
  }

  return base64EncodedSignature;
}




, , .



, — , . , , - , , , . , , .



“ ”. . , .



, , SIGEX.





. , , , , .



TSP. ( createCMSSignatureFromBase64 CMS), . , .



Para garantir que o certificado não foi revogado no momento da assinatura, uma resposta CRL ou OCSP deve ser usada. Essas nuances e recomendações de implementação estão descritas na seção APÊNDICE B - Colocando uma assinatura em um momento específico da RFC 3161 .




All Articles