2017年7月5日

PerlのEncode::JIS2KとPython

以前に自分が書いた記事が矢野さんに取り上げられて大変嬉しかったので、引き続きいろいろな処理系でのJIS X 0213の実装状況を調べていたのですが、Pythonと同様な変換を持った実装を見付けました。

Unicode の嫌なところを触ってしまった Python
http://yanok.net/2017/06/unicode-python.html

それがPerlのEncode::JIS2Kモジュールなのですが、

Encode::JIS2K - search.cpan.org
http://search.cpan.org/~dankogai/Encode-JIS2K/JIS2K.pm

こちらもPythonと同様にこのような変換を持っていました。

JIS X 0213Unicode
1面2区54点U+2985LEFT WHITE PARENTHESIS
1面2区55点U+2986RIGHT WHITE PARENTHESIS

もしかすると、PerlのEncode::JIS2Kモジュールを実装された方とPythonのcodecsモジュールを実装された方が、偶々どこかの同じ資料を参照していたのかもしれません。

ちなみに、その他の実装では大抵このような変換になっています。

JIS X 0213Unicode
1面2区54点U+FF5FFULLWIDTH LEFT WHITE PARENTHESIS
1面2区55点U+FF60FULLWIDTH RIGHT WHITE PARENTHESIS

Encode::JIS2Kは、
  • JIS X 0213の2004年改正に未対応
  • Unicodeへの変換結果が結合文字列となる文字に未対応
といった特徴があるので、特段の理由が無ければEncode::JISX0213およびEncode::ShiftJIS2003を使用したほうが良いかもしれません。

Encode::JISX0213 - search.cpan.org
http://search.cpan.org/~nezumi/Encode-JISX0213-0.04/lib/Encode/JISX0213.pm
Encode::ShiftJIS2004 - search.cpan.org
http://search.cpan.org/~nezumi/Encode-JISX0213-0.04/lib/Encode/ShiftJIS2004.pm

2017年2月25日

Certum Opensource Code Signing

2017年2月からコード署名の運用が少し厳しくなったようで、FIPS 140-2の暗号化モジュールが必須になるなどの変更がありました。

Leading Certificate Authorities and Microsoft Introduce New Standards to Protect Consumers Online - CA Security Council
https://casecurity.org/2016/12/08/leading-certificate-authorities-and-microsoft-introduce-new-standards-to-protect-consumers-online/

Certum が販売しているオープンソースプロジェクト向けコードサイニング証明書でも暗号化モジュールが必須になったので、購入に際して嵌った点などをまとめてみました。

Opensource Code Signing - Certum
https://www.certum.eu/certum/cert,offer_en_open_source_cs.xml
https://www.certum.eu/en/cert_offer_en_open_source_cs/


おおまかな手続きの流れ

  1. Certumのアカウントが無い場合はアカウントを作成します。
  2. PKI対応スマートカードを持っている場合は Activation Code、持っていない場合は Code Signing Suite を購入します。Code Signing Suite を購入した場合はSIMサイズのスマートカードと2GBのMicroSDカードを内蔵したUSBトークンがポーランドからDHLなどで郵送されます。(以降、Code Signing Suiteを購入したという前提で記述します。)
  3. USBトークンをPCに差し、後述の USBトークンのドライバと proCertum CardManager をインストールした状態で証明書を申請します。この時点では秘密鍵のみがスマートカードに保存されるようです。
  4. 証明書の承認に必要な書類のコピーとオープンソースプロジェクトのURLをメールで送ります。
  5. 承認されると公開鍵が発行されるので、proCertum CardManager からインポートします。

証明書の申請手続きの詳細は、次のリンクのPDFファイルを参照してください。

How to install the CS certificate - Certum
https://www.certum.eu/certum/cert,expertise_How_to_install_the_CS.xml
https://www.certum.eu/en/cert_expertise_How_to_install_the_CS/


USBトークン

Code Signing Suite を購入すると送られてくるUSBトークンは Advanced Card Systems の ACR101 でした。内蔵のMicroSDカードにもドライバが入っていますが、ACSのサイトのほうが若干新しいバージョンとなっているようです。

Card reader ACS ACR 101 SIMicro (CCID) - Certum
https://www.certum.eu/certum/cert,offer_Czytnik_kart_ACS_ACR_101_SIMicro_(CCID)_en.xml
https://www.certum.eu/en/cert_offer_czytnik_kart_acs_acr_101_simicro_ccid_en/

PC-Linked Readers with Mass Storage - ACR101 SIMicro | ACS
https://www.acs.com.hk/en/products/141/acr101i-simicro-ccid/

実機のスマートカードを使わずにTPMによる仮想スマートカードやHyper-Vの仮想TPMによる仮想スマートカードを使う手もあるようですが、ハードウェア要件が厳しいので実機があったほうが手軽かと思います。





proCertum CardManager

スマートカードに保存された証明書を管理するソフトです。内蔵のMicroSDカードにも入っていました。

Software and Libraries - Certum
https://www.certum.eu/certum/cert,offer_software_and_libraries.xml
https://www.certum.eu/en/cert_offer_software_and_libraries/

proCertum CardManager - Certum
https://www.certum.eu/certum/cert,offer_card_manager.xml
https://www.certum.eu/en/cert_offer_card_manager/
(英語版マニュアルのリンクが間違っているようです。正しくは https://www.certum.eu/upload_module/wysiwyg/certum/nowe_certum/instructions/proCertumCardManager-en_3_2_0_146.pdf https://www.certum.pl/pl/upload_module/wysiwyg/certum/nowe_certum/instructions/proCertumCardManager-en_3_2_0_146.pdf です。)

proCertum CardManager – FAQ - Certum
http://certum.eu/certum/cert,offer_proCertum_CardManager_support.xml
https://www.certum.eu/en/support/cert_offer_procertum_cardmanager_support/

オプションで「EV Code Signing」をチェックしてからOSを再起動すると signtool のダイジェストアルゴリズムとしてSHA-256が使用可能になります。

オプションで「EV Code Signing」をチェックしたとき proCertum CardManager に含まれる cryptoCardRegister.exe が起動されるようですが、version 3.2.0.154 では起動に失敗してしまうようなので proCertum CardManager がインストールされたディレクトリに予めパスを通しておくと良いみたいです。

Code Signing Suite に付属するスマードカード限定かもしれませんが、proCertum CardManager から見ると「Secure profile」と「Common profile」の2つのプロファイルが用意されています。Secure profile には Certum が予め PUK を設定しているようなので使用できません。コードサイニング証明書は Common profile のほうにインポートします。

Common profile を初期化する際に PUK と PIN を設定しますが、PIN は signtool を実行する度に入力する必要があるので短か目にしておいたほうが良いかもしれません。当然ですが PUK と PIN を忘れるとそのスマートカードは使用不可になってしまいます。


証明書の承認に必要な書類など

以下の書類などが必要です。
  1. identity document (ID card, passport, residency card, driver's license) - in Latin characters - of the person placing the order. The copy should depict the entire document (both sides)
  2. a utility bill (e.g. water, electric power, natural gas, etc.), bank statement, credit card statement, government‐issued tax document belonging to the Subscriber
  3. internet address of the project

1番はパスポートか国際運転免許証が使用可能だと思います。私はパスポートを使用しました。

2番は公共料金の明細の類なのですが、Certumの担当者の方と何度か遣り取りしたところ大体以下のような要件となっているようです。
  1. ラテン文字 (キリル文字も多分OKかも?)
  2. 住所の記載がある
  3. 手書きではなく印刷されている (おそらく担当者のサインのみ手書きOKだと思われる)
  4. 13ヶ月以内に発行されている
いろいろ探した結果、住所の記載があるゆうちょ銀行の英文残高証明書が使用できました。
小さな郵便局では所定のフォーマットの紙に手書きするところもあるようなので、大きな郵便局が良いかもしれません。20~30分くらいで発行してもらえます。

3番はオープンソースプロジェクトのURLです。おそらくソースが公開されていてOSIに認定されているライセンスであればOKだと思います。


signtool

SignTool.exe - MSDN
https://msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
https://docs.microsoft.com/en-us/dotnet/framework/tools/signtool-exe

PFXファイルが使えなくなったので /a, /i, /n, /sha1 などのオプションでPCにインポートされた証明書を指定します。



以上です。