Hablaré sobre las complejidades de la introducción de firmas digitales electrónicas (EDS) en sistemas de información (IS) basados en tecnologías web en el contexto del Centro de la Autoridad Nacional de Certificación de la República de Kazajstán (NTC RK) .
La atención se centrará en la formación de firmas digitales bajo documentos electrónicos y, en consecuencia, NCALayer : software criptográfico proporcionado por el Centro Nacional de Investigación de la República de Kazajstán. En particular, prestaré atención a los problemas relacionados con UX y el alcance de la funcionalidad compatible de NCALayer.
Dividiré el proceso en las siguientes etapas:
- formación de una representación invariable del documento firmado (por documento firmado me refiero a cualquier dato que deba firmarse, como: contrato, formulario de pedido, formulario de autenticación, etc.);
- firmar un documento en una interfaz web usando NCALayer;
- verificación de firma del lado del servidor;
- (si es necesario) preparar una firma para el almacenamiento a largo plazo.
Formación de la representación permanente del documento firmado.
Es importante que los desarrolladores entiendan que cualquier cambio en el documento firmado conducirá al hecho de que la firma debajo de este ya no se verificará. En este caso, los cambios pueden ser causados no solo editando los datos del documento en sí, sino también actualizando la estructura del documento o el mecanismo para su serialización.
Considere un ejemplo simple: los documentos se almacenan como registros en una base de datos. Para firmar un documento, es necesario formar su representación en forma de un solo bloque de datos (por supuesto, puede firmar cada campo de registro por separado, pero generalmente esto no se hace), esto se puede hacer, por ejemplo, de las siguientes maneras:
- extraer todos los campos del registro, convertirlos en cadenas y concatenarlos en una línea;
- generar representación XML o JSON;
- generar un documento PDF basado en una plantilla con algún diseño que contenga datos del 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);signXmls
—signXml
, 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 asegurarse de que el certificado no fue revocado al momento de la firma, debe usar la respuesta CRL u OCSP. Estas recomendaciones de matices e implementación se describen en el APÉNDICE B - Colocación de una firma en un punto particular en la sección de tiempo de RFC 3161 .