各種文書に対して署名ファイルをXML-DSigにより、外部ファイルとして書き出すプログラムです。
秘密鍵として、住基カードなどのスマートカードを使用します。
Mac OS X 10.10以上で動作します。
スマートカードリーダーとそのドライバーソフトウエア
/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist を参照すればサポートされるカードリーダーの見当がつきます。CCID対応でこのリストに載っていれば動作するものと思われます。例えばSCR3310-NTTComの場合は、"NTT Communications Corp. SCR3310-NTTCom USB SmartCard Reader"というifdFriendlyNameの値が書かれています。SCR331CL-NTTCom, ACR39-NTTCom, ACR1251DI-NTTComは載っていません。載っていなくてもCCID対応のカードリーダーならばInfo.plistに書き加えるという方法もあります。SCMなどのOEM製品ならば動作する可能性があります。
住基カードとそのドライバーソフトウエア
住基カードについてはOS X 10.6まではドライバーソフトが標準装備されていました。10.7からは標準装備されなくなりました。2016年9月8日にSmartCard ServicesのサイトからOS X10.12用のJPKIドライバーがダウンロードできるようになりました。/Libray/Security/tokend/以下にインストールされます。公的個人認証サービス共通基盤事業運用会議謹製のJPKI利用者ソフトをインストールしなくても、このプログラムは動作します。
OS X 10.10 以上用実行ファイル
zip形式でアーカイブと圧縮をしています。
ファイルアイコンをダブルクリックすれば,実行できます。
64ビットIntelに対応します。
使用している参考資料とframework
財団法人自治体衛星通信機構の利用者クライアントAPI仕様書が非常に役立ちます。このプログラムはこの仕様書どおりに動作させています。
wadetregaskisさんのKeychain.frameworkはC言語とObjective-Cとの橋渡しをします。このアプリケーションでは2009年1月版を使用しています。OS X 10.6以前用なのでdeprecateされるという警告が発せられる常数や構造体を非常に多数使用しています。警告を無視してコンパイルして、とにかくOS 10.9で動作するようにしました。
現在のところ、Detached署名のみに対応しています。
署名対象ファイルがXMLファイルだった場合には、c14nによる正規化を自動的に実行します。ダイジェスト値の計算アルゴリズムはsha1に固定しています。
SignedInfo要素のダイジェスト値の計算アルゴリズムをsha1に固定します。暗号化アルゴリズムは秘密鍵の仕様により決まります。従って署名値はrsa-sha1,dsa-dha1のうちいずれかの方法でないと対応できません。
署名対象ファイルは複数選択できますが、法務省の仕様では1つのファイルにつき、1つの署名ファイルとされているので、複数選択をすると法務省には通用しないかもしれません。