Ich werde im Kontext des Nationalen Zentrums der Zertifizierungsstelle der Republik Kasachstan (NTC RK) über die Feinheiten der Einführung elektronischer digitaler Signaturen (EDS) in Informationssystemen (IS) auf der Basis von Webtechnologien sprechen .
Der Schwerpunkt wird auf der Bildung eines EDS unter elektronischen Dokumenten und dementsprechend auf NCALayer - kryptografischer Software von NCA RK liegen. Insbesondere werde ich auf Probleme im Zusammenhang mit UX und die Menge der unterstützten Funktionen von NCALayer achten.
Ich werde den Prozess in die folgenden Schritte unterteilen:
- die Bildung einer unveränderlichen Präsentation des unterschriebenen Dokuments (mit dem unterschriebenen Dokument meine ich alle Daten, die unterschrieben werden müssen, wie z. B.: Vereinbarung, Bestellformular, Authentifizierungsformular usw.);
- Signieren eines Dokuments in einer Weboberfläche mit NCALayer;
- Überprüfung der serverseitigen Signatur;
- (falls erforderlich) Erstellung einer Unterschrift für die Langzeitlagerung.
Bildung der ständigen Vertretung des unterzeichneten Dokuments
Für Entwickler ist es wichtig zu verstehen, dass jede Änderung an einem signierten Dokument dazu führt, dass die Signatur darunter die Überprüfung nicht mehr besteht. In diesem Fall können Änderungen nicht nur durch Bearbeiten der Dokumentdaten selbst verursacht werden, sondern auch durch Aktualisieren der Struktur des Dokuments oder des Mechanismus für dessen Serialisierung.
Stellen Sie sich ein einfaches Beispiel vor: Dokumente werden als Datensätze in einer Datenbank gespeichert. Um ein Dokument zu signieren, muss seine Präsentation in Form eines einzelnen Datenblocks formuliert werden (natürlich können Sie jedes Feld einzeln signieren, normalerweise jedoch nicht). Dies können Sie beispielsweise auf folgende Arten tun:
- Extrahieren Sie alle Felder des Datensatzes, konvertieren Sie sie in Zeichenfolgen und verketten Sie sie in einer Zeile.
- XML- oder JSON-Darstellung generieren;
- Generieren eines PDF-Dokuments basierend auf einer Vorlage mit einem Design, das Daten aus dem Datensatz enthält.
- usw.
:
- ( ) ;
- .
, , , :
- ;
- ( , , ).
, - , .
, — ( ) , . , , , . . .
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), . , .
Um sicherzustellen, dass das Zertifikat zum Zeitpunkt der Signatur nicht widerrufen wurde, sollten Sie die CRL- oder OCSP-Antwort verwenden. Diese Nuancen- und Implementierungsempfehlung ist in ANHANG B - Platzieren einer Signatur zu einem bestimmten Zeitpunkt in RFC 3161 beschrieben .