Intégration d'EDS de NCA RK dans des systèmes d'information basés sur les technologies web

Je parlerai des subtilités de l'introduction des signatures numériques électroniques (EDS) dans les systèmes d'information (SI) basés sur les technologies Web dans le contexte du Centre national des autorités de certification de la République du Kazakhstan (NTC RK) .



L'accent sera mis sur la formation de signatures numériques dans des documents électroniques et, par conséquent, sur NCALayer - un logiciel cryptographique fourni par le Centre national de recherche de la République du Kazakhstan. En particulier, je porterai attention aux problèmes liés à l'UX et à la quantité de fonctionnalités prises en charge par NCALayer.



Je vais diviser le processus en plusieurs étapes:



  • la formation d'une présentation invariable du document signé (par le document signé, j'entendrai toutes les données à signer, telles que: contrat, bon de commande, formulaire d'authentification, etc.);
  • signer un document dans l'interface Web à l'aide de NCALayer;
  • vérification de signature côté serveur;
  • (si nécessaire) préparation d'une signature pour un stockage à long terme.


Formation d'une présentation constante d'un document signé



Il est important pour les développeurs de comprendre que tout changement dans le document signé entraînera le fait que la signature en dessous ne sera plus vérifiée. Dans ce cas, des changements peuvent être provoqués non seulement en éditant les données du document lui-même, mais également en mettant à jour la structure du document ou le mécanisme de sa sérialisation.



Prenons un exemple simple - les documents sont stockés sous forme d'enregistrements dans une base de données. Pour signer un document, il est nécessaire de former sa représentation sous la forme d'un seul bloc de données (bien sûr, vous pouvez signer chaque champ de l'enregistrement séparément, mais ce n'est généralement pas fait), cela peut être fait, par exemple, de la manière suivante:



  • extraire tous les champs de l'enregistrement, les convertir en chaînes et les concaténer en une seule ligne;
  • générer une représentation XML ou JSON;
  • générer un document PDF basé sur un modèle avec une conception contenant des données de l'enregistrement;
  • 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), . , .



Afin de garantir que le certificat n'a pas été révoqué au moment de la signature, une réponse CRL ou OCSP doit être utilisée. Cette nuance et les recommandations de mise en œuvre sont décrites dans l'APPENDICE B - Placer une signature à un moment particulier dans la RFC 3161 .




All Articles