Skip navigation.
ホーム
BLOG-ROMMER 日高のブログ

Windows 10 デバイスドライバーの署名

最近、各方面からWindows 10ドライバの署名に関する問い合わせが多い。最新の状況を調べてみた結果、各所で記述されている説明は頻繁に更新されていて、しかもわかり難い。実際の動作も非常に不可解な状態であることを確認した。すでにWindows 10の新しい署名要件は開始されているので、SPC署名されているドライバであっても次の様に署名が認識されない場合がある。

現時点の状況をなるべく分かり易くまとめると次の通りである。

サードパーティーが開発したWindows 10用のカーネルモードのドライバには「原則として」Microsoftによる署名が必要
このMicrosoftによる署名を取得する方法は次の2種類

  • HLKによる署名
  • HLKテストをパスして、その結果をダッシュボードに提出。(従来のロゴテストによる署名と同様。古くはWHQLとも。)

  • Windows 10 Desktop Attestation Signing(日本語:Windows 10 デスクトップの構成証明署名)
  • 申請者がEV証明書による署名で身元を証明した後、署名が欲しいドライバをダッシュボードに提出。従来のSPC署名に相当するが、Windows 8.1以前やWindows Serverでは動作しない点が異なる。

「原則として」の例外については、現時点で不明確な点がある
そのためHLKまたはWindows 10 Desktop Attestation Signingのどちらかとなる。今後出荷されるWindows Server 2016での動作も目指すのであれば、HLKしか無い。

わかり難いコード署名に関するMicrosoftのホームページの情報

コード署名に関する情報はほぼ、次のページに記載されている。

コード署名証明書の取得(日本語)
https://msdn.microsoft.com/ja-jp/library/windows/hardware/hh801887#code_...

Get a code signing certificate(上記の英語)
https://msdn.microsoft.com/en-us/library/windows/hardware/hh801887#code_...

Windows Enforcement of Authenticode Code Signing and Timestamping
http://social.technet.microsoft.com/wiki/contents/articles/32288.windows...

これらのページは不定期に更新されるので、注意が必要である。実際にこの記事を書いている途中に内容が変わったので驚いた。

比較的わかり易い情報とヒントは、ドライバ開発コンサルタントのOSR社の6月2日の記事にある。
Driver Signing — More Details Emerge

不可解な例外条件

しかしこの記事と、記事が参照しているWinHECビデオのスライドには間違いがある。
過去の事だが Hardware Certification blogによれば、古いクロス署名は2016年5月1日まで有効だった。

また実際にテストしたところ、実際には上記記述とは異なり、次のように動作することがわかった。

  • Windows 7, 8, 8.1からアップデートしたシステム(UEFI セキュアブート無効)
  • インストール済は勿論のこと、Windows 10にアップデート後2016年5月1日以降に署名したドライバも動作。

  • UEFI セキュアブートが無効になっている、新規にWindows 10をインストールしたシステム
  • 正常にインストール完了して動作するシステムと、インストール時に署名を認識せずにインストールできないシステムがある。原因不明。

このテスト結果は、あくまでも実験環境の数台のマシン(いずれもx64)で試しただけである。8月2日のWindows 10 Anniversary Update(Red Stone 1)のリリースやその後のWindows Update等で状況が変わる可能性があることに注意頂きたい。また、前述記事やビデオにあるレジストリ操作での回避方法については不明のままだ。前後関係からするとこのレジストリ操作は、署名無しドライバのインストール方法とは違うはずだ。

クロス署名の有効期間

SPC署名とは、ベリサイン等の証明機関がドライバ開発者に対して発行したSPC(Software Publisher Certificate)証明書に基づいた署名である。SPCはコードサイニング証明書とも呼ぶ。一方でSPC証明書の代わりに、最近登場したEV証明書でも同様にデジタル署名ができる。EV証明書(EV Certificate)は最近登場した新しいタイプの証明書で、ハードウェアとともに提供される。従ってSPC証明書よりもセキュリティ強化されているが高価である。Windows 10以降のMicrosoftの解説では、SPC証明書とEV証明書による署名を合わせてクロス署名(Cross-Signing)と呼んでいる。署名の効果は同じである。

前述のコード署名に関するFAQには、クロス署名に関するわかり難い説明がある。Windows 10用のクロス署名を付加する際は、タイムスタンプ・サーバーを指定しないのが推奨ということだ。タイムスタンプ・サーバーを指定した場合、発行元にも依存するが署名の有効期限は付加時から20年とか99年有効になる。指定しない場合は、発行時に使用した証明書の期間(通常1年~3年)だけ有効になる。ドライバのクロス署名は、前述の通りWindows 10のカーネルモードのドライバーではいくつかの制約や不可解な動作のため使いに難いが、全てのユーザーモードのドライバーとWindows 8.1以前の環境やWindows 10 IoT Coreでは有効に動作する。

SHA-1からSHA-2

この時期に合わせて、署名に使用するハッシュアルゴリズムがSHA-1からSHA-2(SHA-256)に変更になっている。すでにWindows Updateを導入したWindows 7以降のシステムはSHA-2に対応しているのと、操作も下記の様に「/fd sha256」コマンドライン・オプションを付加するだけで簡単なので、今後はすべてSHA-2の利用で問題ない。

署名済みファイルのプロパティは次の様に表示される。