カザフスタン共和国国立研究センターのデジタル署名とWebテクノロジーに基づく情報システムの統合

カザフスタン共和国国立認証局センター(NTC RK)に関連して、Webテクノロジーに基づく情報システム(IS)に電子デジタル署名(EDS)を導入する複雑さについてお話します。



焦点は、電子文書の下でのEDSの形成であり、したがってNCALayer -NCA RKによって提供される暗号化ソフトウェアです。特に、UXに関連する問題と、NCALayerのサポートされる機能の範囲に注目します。



プロセスを次の段階に分けます。



  • 署名された文書の不変の提示の形成(署名された文書とは、契約書、注文書、認証書などの署名が必要なデータを意味します);
  • NCALayerを使用してWebインターフェイスでドキュメントに署名する。
  • サーバー側の署名検証。
  • (必要な場合)長期保管用の署名を準備します。


署名された文書の永続的な表現の形成



署名されたドキュメントに変更を加えると、その下の署名が検証されなくなるという事実を理解することは、開発者にとって重要です。この場合、変更は、ドキュメント自体のデータを編集するだけでなく、ドキュメントの構造またはシリアル化のメカニズムを更新することによっても発生する可能性があります。



簡単な例を見てみましょう。ドキュメントはデータベースにレコードとして保存されます。ドキュメントに署名するには、その表現を単一のデータブロックの形式で形成する必要があります(もちろん、レコードの各フィールドに個別に署名できますが、通常はこれは行われません)。これは、たとえば次の方法で行うことができます。



  • レコードのすべてのフィールドを抽出して文字列に変換し、それらを1行に連結します。
  • XMLまたはJSON表現を生成します。
  • レコードからのデータを含むデザインを含むテンプレートに基づいてPDFドキュメントを生成します。


:



  • ( ) ;
  • .


, , , :



  • ;
  • ( , , ).


, - , .



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



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), . , .



署名時に証明書が取り消されていないことを確認するには、CRLまたはOCSP応答を使用する必要があります。このニュアンスと実装に関する推奨事項は、RFC 3161の付録B-特定の時点での署名の配置のセクションで説明されています




All Articles