クレオパトラとロシア暗号の伝説(続き)

画像 ロシアの暗号化をサポートするGCrypt-1.7.0ライブラリ(GOST 28147-89、GOST R 34.11-94 / 2012およびGOST R 34.10-2001 / 2012)の登場により、 KleopatraKMailなどのプロジェクトでロシアのPKIサポートについて話すことが可能になりました。



画像 KMailは、S / MIMEプロトコルを使用してメッセージの署名と暗号化を行い、通信のセキュリティを確保できるメールクライアントです。 どちらも、PKIアーキテクチャ、X509証明書、およびCMS / PKCS#7プロトコルに基づいています。



画像



画像 Kleopatpaは、ファイルの署名と暗号化を可能にするだけでなく、証明書と秘密キーの保存と管理を提供するグラフィカルユーティリティです。



画像



画像 KleopatpaとKMailには暗号化が組み込まれていません。これらの暗号化変換はすべて、その従者とりわけGnuPgパッケージのgpgsmモジュールによって行われます。 暗号計算には、 LibGCryptライブラリが使用されます。 また、X509証明書、署名または暗号化されたメッセージ(CMS / PKCS#7、PKCS#10など)を解析するために、 libksbaライブラリが使用されます。 libgpgmeライブラリについて言及しますが、その役割については少し後で説明します。



そして、 クレオパッパ自身と彼女の忠実な使用人KMailはロシアの暗号化に対して何もありませんが、 LibGCryptを除いて、彼らの従者は彼女と友達になることをきっぱりと拒否します。



最も無害な従者 、つまりlibgpgmeライブラリーから始めましょう。 まず、署名されたメッセージのソースコードを見てみましょう。



画像



「Content-Type」フィールドには変数micalgがあり、署名の生成または検証時に使用されるハッシュのタイプを示します。 KMailを含む多くの電子メールクライアントでは、このフィールドに値がなくても電子署名の検証には影響しませんが、ThunderbirdおよびSeamonkeyの検証には影響しません。 したがって、このフィールドとKMail thがいっぱいになることが望ましいです。 さらに、これには最小限の労力しか必要ありません。 必要なのは、ロシアのハッシュアルゴリズムの数をgpgme.h.inファイルに追加することだけです。



/* Hash algorithms (the values match those from libgcrypt). */ typedef enum { GPGME_MD_NONE = 0, . . . GPGME_MD_CRC24_RFC2440 = 304, /* from gcrypt.h.in !!!!*/ GPGME_MD_GOSTR3411_94 = 308, /* GOST R 34.11-94 */ GPGME_MD_STRIBOG256 = 309, /* GOST R 34.11-2012, 256 bit. */ GPGME_MD_STRIBOG512 = 310, /* GOST R 34.11-2012, 512 bit. */ GPSME_MD_GOSTR3411_CP = 311 , /* GOST R 34.11-94 with CryptoPro-A S-Box. */ } gpgme_hash_algo_t;
      
      





さらに、これらの番号は、 libgcryptライブラリのgcrypt.h.inファイルの対応する番号と厳密に相関する必要があります。



 /************************************ * Cryptograhic Hash Functions * ************************************/ /* Algorithm IDs for the hash functions we know about. Not all of them are implemented. */ enum gcry_md_algos { GCRY_MD_NONE = 0, . . GCRY_MD_TIGER2 = 307, /* TIGER2 variant. */ /*  */ GCRY_MD_GOSTR3411_94 = 308, /* GOST R 34.11-94. */ GCRY_MD_STRIBOG256 = 309, /* GOST R 34.11-2012, 256 bit. */ GCRY_MD_STRIBOG512 = 310, /* GOST R 34.11-2012, 512 bit. */ GCRY_MD_GOSTR3411_CP = 311, /* GOST R 34.11-94 with CryptoPro-A S-Box. */ . . . GCRY_MD_SHAKE256 = 317 };
      
      





それだけです。libgpgmeライブラリ 、ロシアの暗号化をサポートしています。



画像 主な改良点は、特にPKCS#12セキュアコンテナからX509個人証明書をインポートする GnuPg( gpg-protect-toolモジュール)、特に証明書、署名、暗号化されたメッセージの生成と分析を行うgpgsmモジュールでした。 (CMS、PKCS#7)と彼の見習いライブラリlibksba



修辞的な質問は、個人証明書を取得する場所です。 X509証明書と秘密鍵? しかし、今日では、もちろん認証局(CA)にこれに関する質問はありません。 現在、ロシアでは、通信省にのみ登録されているCAが100以上あります。 ただし、これは有料サービスであることを忘れないでください! テスト(およびメール通信を含む企業内の安全なワークフロー)の場合、PKCS#12の安全なコンテナー内の個人証明書は、opensslユーティリティを使用するか、無料のテストCAの1つで取得できます。



画像 個人証明書をCleopatraの環境にインポートするには(GnuPgの証明書と秘密キーストアで言う方が正確です)、個人証明書をPKCS#12コンテナーにアップロード(エクスポート)する必要があります。 コンテナがTK-26の要件に従って形成されたことが判明する場合があります。 現在(現時点では強調しています)、GnuPgはTK-26の要件に従って形成されたPKCS#12コンテナーとうまくいきませんが、これは怖いことではありません。 opensslユーティリティを手元に置いて、簡単なスクリプトで新しいコンテナをリリースすることで、この欠点をすぐに取り除きます。



 #cat CONVERT_P12_for_GPGSM.sh #   /etc/ssl/openssl.cnf    - engine export OPENSSL_CONF=/etc/ssl/openssl.cnf openssl pkcs12 -in $1.p12 -nodes -out $1.txt.p12 -nomacver openssl pkcs12 -export -in $1.txt.p12 -nodes -out $1\_openssl_cert_key.p12 rm –f $1.txt.p12 echo "    GPGSM: $1\_openssl_cert_key.p12" # #sh CONVERT_P12_for_GPGSM.sh -2001-2016 Enter Import Password: Enter Export Password: Verifying - Enter Export Password:     GPGSM: -2001-2016_openssl_cert_key.p12 #
      
      





これで、インポートするPKCS#12コンテナーができました。



画像



[ 開く ]ボタンをクリックすると、PKCS#12コンテナーを解析するためのパスワードを入力するよう求められます。



画像



そして、パスワードの入力と確認が提供され、インポートされた証明書の秘密鍵へのアクセスが実行されます:



画像



すべて、個人証明書がインポートされます。 サードパーティの証明書とルート証明書は、DER形式とPEM形式の両方からインポートされます。



クレオパトラは証明書を所有しているので、彼女は自分の証明書で文書に署名できます。



画像



秘密鍵にアクセスするためのパスワードを入力します:



画像



受信者証明書を使用して、機密ファイルを暗号化できるようになりました。



画像



originatorKey publicKeyキーと受信者の公開キーに対応する秘密キーを使用してキー暗号化キー(KEK)を生成する暗号化でCMC / PKCS#7を作成する場合、 VKO GOST Rアルゴリズムが使用されます。 残念ながら、GCryptの現在のバージョンでは、このアルゴリズムの実装はありません。 このアルゴリズムの実装は、LCC-2016ライブラリから借用され、 ecc-gost.cファイルに追加されました。



そして、 「続ける」ボタンを大胆にクリックしてください:



画像



KMailメールクライアントについては、通信(電子署名、暗号化)を保護するために、まず、メールメッセージに署名する個人証明書(秘密鍵を持つ証明書)と参加する証明書を選択する必要があります。メッセージの暗号化:



画像



[ 証明書マネージャーの実行 ]ボタンをクリックします。Cleopatraがサービスを開始し、選択した証明書のプロパティを詳細に表示できます。



メールメッセージの署名と暗号化の両方ができるようになりました。



画像



[ 送信 ]をクリックすると、KMailは暗号化の事実の確認を求めます。



画像



そして、秘密鍵にアクセスするためのパスワードの入力を求められます:



画像



画像 しかし、もっと欲しい。 同じロシアの暗号化をサポートするPKCS#1ファームウェアとハ​​ードウェアトークンを使用することです。 PKCS#11トーンを接続するには、変更されたgnu-pkcs11-scdモジュールをシステムにインストールし、 gpg-agent.conf構成ファイルに次の行を追加する必要があります。



 scdaemon-program /usr/local/bin64/gnupg-pkcs11-scd pinentry-program /usr/bin/pinentry-qt
      
      





その後、 gnu-pkcs11-scd.conf構成ファイルで使用されるトークンのPKCS#11ライブラリを指定する必要があります。



 #    -  #  /usr/local/lib64/libls11usb2016.so … # Comma-separated list of available provider names. Then set # attributes for each provider using the provider-[name]-attribute # syntax. providers libls11usb2016 provider-libls11usb2016-library /usr/local/lib64/libls11usb2016.so provider-libls11usb2016-cert-private …
      
      





gpg-agen tが実行されていることを確認します。



 $ gpg-agent --daemon --use-standard-socket GPG_AGENT_INFO=/home/a513/.gnupg/S.gpg-agent:19092:1; export GPG_AGENT_INFO; $
      
      





これで、KleopatraまたはKMailを開始した後、トークンにアクセスするためのPINコードが要求されます。



画像



無料のp11confユーティリティを使用して、トークン名を確認できます。



 $ /usr/local/bin64/p11conf -A /usr/local/lib64/libls11usb2016.so -h usage: /usr/local/bin64/p11conf [-hitsmIupPred] -A APIpath [-c slotID -U userPin -S SOPin -n newPin -L label] -h display usage -i display PKCS#11 library info -s display slot(s) info (-c slotID is optional) -t display token(s) info (-c slotID is optional) Others must use -c slotID -m display mechanism list -I initialize token -u initialize user PIN -p set the user PIN -P set the SO PIN -r remove all objects -e enumerate objects -d dump all object attributes Copyright(C) 2011-2016 bash-4.3$
      
      





トークンに関するインポーターを表示するには、次のコマンドを実行します。



画像



PINコードを正常に入力すると、証明書のリスト全体がGnuGPGリポジトリから受信され、接続されたPKCS#11トークン/スマートカードに保存されます。



画像



さらに、 GnuPg / SMIMEメカニズムを使用する他の電子メールクライアント( Claws、Evolutionなど )は、S / MIMEでロシアの暗号化を使用して、通信に署名および暗号化できます。



画像



画像



画像 それだけです-クレオパトラと彼女の王室は、ロシアの暗号に誠実に奉仕しています!



次は?



画像 そして、近い将来、KleopatraがGOST R 34.10-2001 / 2012のPKCS#10リクエストも生成することを願っています。



画像



その後、認証局に転送し、最終的に証明書を受け取ることができます。



しかし、それは別の物語になります。



All Articles