国営企業および商業企業
記事の最初の部分では 、営利企業での電子署名の使用を扱いました。 国有企業と銀行では、状況は少し異なります。 ここでは、認定された暗号化プロバイダーを使用する必要があり、キー自体はトークンに保存する必要があります。 したがって、この記事の第2部では、認証された暗号化プロバイダーとトークンを使用してコンピューターの外部にキーを保存する方法を示します。 まず、暗号プロバイダーについて説明し、次にプログラムの実用化を検討します。
ロシアの広大な地域では、Crypto-PRO LLC、Lissi LLC、InfoTeKS OJSC、Signal-COM CJSC、その他いくつかの企業が認定暗号プロバイダーを提供していません。
CyberSafeプログラムは、ロシア標準GOST R 34.11-94 / GOST R 34.11-2012およびGOST R 34.10-2001 / GOST R 34.10-に従って電子署名を生成および検証する機能を提供するKRIPTO-PRO LLCの認定暗号プロバイダーとの連携をサポートしています。 2012年。
CyberSafeを使用できますか?
個人用ファイルの暗号化は1つのことですが、州と銀行のセクターは完全に異なります。 ロシアのFSBによって認定されたSKZIを使用するプログラムであり、適切な認定を必要としないプログラムとしてCyberSafeを許可する基準は何ですか? この質問に対する答えは、CryptoPro CSPソフトウェア製品のパスポート(フォーム)と、自動化ツールを使用して個人データ情報システムで処理する際に暗号通貨で個人データのセキュリティを確保するための方法論的な推奨事項で取得できます。 後者は、2008年2月21日のNo. 149 / 54-144にロシアのFSBによって承認されました。
CryptoPro CSPのパスポートでは、セクション2の段落1を読みました。
個人データの暗号保護のために暗号保護手段を使用することが許可されています
次に、方法論的な推奨事項を開き、セクション5の段落1を読みます。
5.1。 クラスKC1およびKC2の暗号通貨の埋め込みは、ロシアのFSBによる制御なしで実行されます(この制御が情報システムの開発(近代化)のための技術タスクによって提供されていない場合)。
2011年12月27日付けロシア連邦連邦安全保障局の命令796により承認された電子資金の要件およびCA資金の要件に従って、6つのクラスの暗号通貨が確立されました-KS1、KS2、KS3、KV1、KV2、KA1。 クラスKC3、KV1、KV2、KA1の暗号通貨の埋め込みは、ロシアのFSBの監督下でのみ実行されます。 クラスKS1およびKS2に関しては、FSBによる制御はありません。 暗号化保護クラスの詳細については、記事の最後にあるリンクをご覧ください。
ご覧のとおり、CyberSafeは使用できるだけでなく、必要でもあります。 プログラムで使用される暗号化ライブラリのソースコードは、誰でも入手できます(リンクは、 cybersafesoft.com Webサイトのメインページにあります): www.assembla.com/spaces/cybersafe-encryption-library/wiki
以下は、実装の信頼性を検証するための暗号化および署名機能のコードです(シート1)。
リスト1.暗号化および署名機能(GOST)
関数EncryptAndSign(ASignCertContent:string; AEncCerts:TStringList; FileName、OutFileName:文字列; out ErrText:String):ブール値; var hProv:HCRYPTPROV; hStoreHandle:HCERTSTORE; pSignerCert:jwawincrypt.PCCERT_CONTEXT; encCert:jwawincrypt.CRYPT_DATA_BLOB; SigParams:jwawincrypt.CRYPT_SIGN_MESSAGE_PARA; pCertContext:PCCERT_CONTEXT; ストリーム:TMemoryStream; 証明書:PCCERT_CONTEXTの配列[0 .. 100]。 EncParams:CRYPT_ENCRYPT_MESSAGE_PARA; cbEncrypted:DWORD; i:整数; pszObjId:LPSTR; 始める 結果:= False; for i:= 0から100 do 証明書[i]:= nil; jwawincrypt.CryptAcquireContext(hProv、nil、nil、PROV_GOST_2001_DH、 CRYPT_VERIFYCONTEXT)その後 出口 hStoreHandle:= CertOpenSystemStore(hProv、 'MY'); if(hStoreHandle = nil)then 始める ErrText:= 'ErrorOpenStore'; 出口 終わり; for i:= 0からAEncCerts.Count-1 do 始める 試してみる encCert:= GetCertContent(FileToStr(AEncCerts.Strings [i])); を除く ErrText:= 'ErrorCertLoad'; 続ける 終わり; pCertContext:= jwawincrypt.CertCreateCertificateContext(MYTYPE、 encCert.pbData、encCert.cbData); pCertContext:= jwawincrypt.CertFindCertificateInStore(hStoreHandle、MYTYPE、 0、CERT_FIND_EXISTING、pCertContext、nil); if(pCertContext = nil)then 始める ErrText:= 'ErrorCertInStoreNotFound'; 続ける 終わり; 証明書[i]:= pCertContext; 終わり; encCert:= GetCertContent(FileToStr(ASignCertContent)); //証明書ストアを開きます pSignerCert:= nil; pSignerCert:= jwawincrypt.CertCreateCertificateContext(MYTYPE、 encCert.pbData、encCert.cbData); pSignerCert:= jwawincrypt.CertFindCertificateInStore(hStoreHandle、MYTYPE、0、 CERT_FIND_EXISTING、pSignerCert、nil); if(pSignerCert = nil)then 始める 出口 終わり; TMemoryStream.Createで 試してみる LoadFromFile(FileName); 試してみる 試してみる //デジタル署名に必要な構造を初期化します pszObjId:= szOID_RSA_MD5; //証明書アルゴリズムを取得します FillChar(SigParams、SizeOf(CRYPT_SIGN_MESSAGE_PARA)、#0); SigParams.cbSize:= SizeOf(CRYPT_SIGN_MESSAGE_PARA); SigParams.dwMsgEncodingType:= MYTYPE; SigParams.pSigningCert:= pSignerCert; SigParams.HashAlgorithm.pszObjId:= pszObjId; //シグナル用-Com szOID_RSA_MD5; // 1.2.643.2.2.21 SigParams.HashAlgorithm.Parameters.cbData:= 0; SigParams.cMsgCert:= 1; SigParams.rgpMsgCert:= @pSignerCert; SigParams.cAuthAttr:= 0; SigParams.dwInnerContentType:= 0; SigParams.cMsgCrl:= 0; SigParams.cUnauthAttr:= 0; SigParams.dwFlags:= 0; SigParams.pvHashAuxInfo:= nil; SigParams.rgAuthAttr:= nil; ZeroMemory(@ EncParams、SizeOf(CRYPT_ENCRYPT_MESSAGE_PARA)); EncParams.cbSize:= SizeOf(CRYPT_ENCRYPT_MESSAGE_PARA); EncParams.dwMsgEncodingType:= MYTYPE; EncParams.HCRYPTPROV:= hProv; EncParams.ContentEncryptionAlgorithm.pszObjId:= szOID_CP_GOST_28147; // GOST 28147-89 1.2.643.2.2.21暗号化アルゴリズム CryptSignAndEncryptMessage(@ SigParams、@ EncParams、AEncCerts.Count、 @ Certificates、Memory、Size、nil、cbEncrypted)then 始める ストリーム:= TMemoryStream.Create; 試してみる Stream.SetSize(cbEncrypted); CryptSignAndEncryptMessage(@ SigParams、@ EncParams、 AEncCerts.Count、@ Certificates、Memory、Size、Stream.Memory、 cbEncrypted)その後 始める Stream.SetSize(cbEncrypted); Stream.SaveToFile(OutFileName); 結果:= True; 終わり 他に ErrText:= SysErrorMessage(GetLastError); ついに FreeAndNil(ストリーム); 終わり; 終わり 他に ErrText:= SysErrorMessage(GetLastError); を除く ErrText:= SysErrorMessage(GetLastError); 終わり; ついに CertCloseStore(hStoreHandle、CERT_CLOSE_STORE_CHECK_FLAG); 終わり; ついに 無料 終わり; 終わり;
プログラムの実用化
まず、認定された暗号プロバイダー「CryptoPro CSP」をインストールする必要があります。 ソフトウェア製品のダウンロードは完全に無料ですが、事前登録後に
www.cryptopro.ru/downloads
インストールファイルをダウンロードして実行します。 [ インストール ]ボタンをクリックし、ソフトウェア製品のインストールが成功したことを示すメッセージを待ちます(図1)。

図 1. CryptoPro CSPが正常にインストールされました
次に、CyberSafeプログラムを実行します。 CryptoPro CSPをインストールした後に初めて起動する場合、CyberSafe GOST CA証明書をインストールする必要があります(図2)。

図 2.証明書をインストールする
CyberSafe GOST CA証明書をインストールしたら、トークンについて説明します。 トークンは、ユーザーの認証、電子通信の保護、リモート情報リソースへの安全なアクセス、および暗号化キーの保存に使用されるUSBデバイスです。 トークンは非常に高価なデバイスであるため、CyberSafeは代わりに通常のフラッシュドライブを使用できます。 フラッシュドライブにキーが保存されます。 ただし、トークンでは、キーはコピーから保護されますが、フラッシュドライブでは保護されません。 しかし、トークンのコストを考えると、この決定は正当化されます。 つまり、CyberSafeはお金を節約します。
キーの保存にトークンと通常のフラッシュドライブの両方を使用する場合、キーはコンピューターではなく外部メディア(トークンまたはフラッシュドライブ)に保存されます。
それでは、Crypto-Pro証明書を作成しましょう。 メニューコマンド[ 証明書 ]、[ 作成 ]を選択します。 [ 証明書の作成]ウィンドウで、電子メールアドレス、パスワード、名前、その他の情報を入力します。 [ Crypto-Pro証明書の作成]ボックスがオンになっていることを確認してください(図3)。 このチェックボックスが選択されていない場合は、CryptoPro CSPをインストールし、インストール後にCyberSafeを再起動したことを確認してください。

図 3. Crypto-Pro証明書の作成
次のステップは非常に重要です。 USBドライブ(図4a)またはトークン(図4b)の秘密キーコンテナーを保存する場所を選択する必要があります。 証明書を保存するトークンまたはリムーバブルドライブを選択します(正しい選択を行ったことを確認してください)。または、証明書をコンピューターに保存する場合は、 レジストリを選択します。

図 4a。 証明書はフラッシュドライブに保存されます

図 4b。 証明書はトークンに保存されます。
さらに、少し物理的な作業が必要になります-キーボードのキーを押すか、キーが作成されるまでマウスポインターを移動する必要があります(図5)。

図 5.キー作成プロセス
次に、コンテナ自体のパスワード(図6a)またはトークンのPINコード(図6b)を作成する必要があります。 セキュリティ上の理由から、このパスワードは証明書のパスワードとは異なる必要があります。

図 6a。 コンテナパスワード(フラッシュドライブ)

図 6b。 コンテナのピンコード(トークン)
次に、証明書が正常に作成されたことを示すメッセージが表示され(図7)、( 完了)をクリックした後、メールボックスを開き、証明書を発行するための確認コードを見つける必要があります(もちろん、証明書を発行することを選択した場合を除き)、表示されるウィンドウに入力しますウィンドウ(図8)。

図 7.証明書が正常に作成されました

図 8.証明書発行確認コードを入力します
証明書を公開すると、6つのファイルで構成されていることがわかります(図9)。 証明書が公開されると、サーバーでの公開の成功に関するメッセージが表示されます。 公開時には、インターネット接続を確立する必要があることは明らかです。 エクスプローラーを開き、フラッシュドライブの内容を表示します。 <name> .000ディレクトリには秘密鍵があります(図10)。

図 9.証明書を公開するプロセス

図 10.秘密鍵
[ キーと証明書]セクション、[すべてのキー]に移動し、作成した証明書が証明書のリストにあることを確認します(図11)。

図 11.一般リストに作成された証明書
さらに、作成された証明書は通常どおり使用できます(記事の最初の部分で示したとおり)。 たとえば、ファイルの暗号化に使用できます。 暗号化プロセスは同じであるため、詳細に検討しません。 ファイルを暗号化するときは、暗号プロバイダーを選択するリストから暗号プロバイダーCrypto Pro GOSTを選択する必要があるとしか言えません(図12)。 次に、この暗号化プロバイダーに対応するキーのリストが表示されます。

図 12. GOSTに準拠したファイル暗号化
同様に、フォルダーを透過的に暗号化する場合(このフォルダーのすべてのファイルを暗号化する必要がある場合)、対応するリストからCrypto Pro GOST暗号化プロバイダーを選択する必要があります(図13)。

図 13.透過的暗号化を使用する暗号化プロバイダーの選択
ディスク/パーティションを暗号化するときに、GOSTに従って暗号化を選択することもできます(図14を参照)。 [ 暗号化の種類]リストで[ GOST]を選択し、暗号化パラメーターを設定します。

図 14.ドライブ暗号化
結論
CyberSafeプログラムは可能なだけでなく、政府機関や銀行でも使用する必要があります。このプログラムは認証済みの暗号プロバイダー(Crypto Pro)をサポートし、コンピューターに証明書(キー)を保存せずに外部メディアに転送できるためです。
参照資料
電子署名で保護された電子メッセージの交換を実装するときの暗号保護のレベル
フォームZHTIA.00050-03 30 01(CryptoPro CSP)
ガイドライン
暗号化ライブラリソース
記事の最初の部分