電子処方箋対応(自作モジュール編)

前回、「市販モジュールで管理サーバーと交信」はできた。

自力ベンダーとしては、しかし、電子処方箋モジュールも自作したいところである。

 

と或る電子カルテメーカーに、問い合わせると

電子処方箋の取り扱いには、電子署名、ICカードのハンドリング等の技術が必須になりますので、 かなりハードルが高いです。

 

 

自分でできる範囲内のことを、やることにする。


目標
  • ES型式の署名付き医師処方箋発行を目指す。調剤処方箋とか、ES-XLとかは一切触らない。
使用言語
  • C#:Base64エンコード、exc-c14n正規化、SHA256hash計算はできそう。
電子署名、ICカードのハンドリング
APDU Handling
  • HPKIカードで署名してみる は、APDUコマンドを直接カードに送り込んでいる。この手法は大部であるし、もっとオサレな方法はないのか?と調査したところ、、
High-Level API
  • 電子署名に使えるHigh-LevelAPIがあると判明。

    PKCS#11 CNG/CryptoAPI
    Cross-Platoform Yes No(Windows-only)
    Direct Token Aceess Yes Indirece(via middleware)
    Eas of Use Moderate High
    Dependency Vendor’s PKCS#11 library Windows CSP/KSP

    ☞ HPKIドライバーは提供されているので、PKCS#11でいく。

  • BouncyCastle:有名なライブラリだが、直接スマートカードにアクセスはできない。スマートカードをPCに接続しHPKI driverをインストールすれば、証明書ストアに公開鍵関連データが保存される。そのストアにアクセスする仕様。従って、証明書取り出しと検証(←公開鍵要、秘密鍵不要)は可能で、そこに関してはPKCS#11系でやるより美しく書ける。
  • 以上より、署名はPKCS#11で、証明書取り出しと検証はBouncyCastleを使う。
xmlの仕様

取り寄せた市販モジュールの出力xml、OSNに掲載されてる各社の電子処方箋xmlを諸所比較すると、結構違いがある。

  • xmlの名前空間:xsかdsか。
ds: xs:
Namespace URI http://www.w3.org/2000/09/xmldsig# http://www.w3.org/2000/09/xmldsig#
Primary Usage Digital signatures XML Schema definitions
Scope Ensures security (signatures, keys) Defines structure and data types
Common Context Security-related XML documents XML Schema files or validation rules

xsを使ってる例のほうが多いようだが、XAdES(XML Advanced Electronic Signatures) 型式なんだから、dsのほうが良いんじゃね? 仕様書もdsつかってるみたいだし。

  • PrescriptionDcoumentをexc-c14nで正規化するかどうか。
    正規化してもしなくてもいいようで、正規化しない例のほうが多い。
    ただ、KeyInfoとSignedPropertiesは正規化必須なので、PrescriptionDcoumentも正規化するほうが整うと感じる。
  • IssurerSerialをどうするか
    いれてない例もあるし、入れててもIssuerNameとSerialNumberを別々に載せている場合、IssuerNameとSerialNumberをくっつけるSigningCertificateV2を採用してる場合がある。
    SigningCertificateV2に移行するらしいので、これを使う。
完成したやつ
  • HPKISigner.exe “入力csvのパス” “出力xmlのパス” PIN
  • .net8.0なのでwin-64のみならず、linux・mac・mac-armとCross-platform(のはず)
  • 今一、全く自信ないので、いつでも市販モジュールと交換できるようにしてる。
  • Github に載せました

これで、一安心の一歩手前。しかし、肝心の本番カードは未入手である。。

 

2025/2/18追記

セカンドHPKIは「xs:を使っており、PrescriptionDcoumentはexc-c14nで正規化しておらず、IssurerSerialは加えず」

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)