メインコンテンツまでスキップ

コード署名とは、署名ツールとデジタル証明書を使用して、実行可能ファイルとスクリプトにデジタルに署名するプロセスです。 このプロセスは、公開鍵インフラストラクチャ(PKI)と呼ばれるテクノロジーに基づいています。

コードに署名するには、署名するファイルの種類に応じて、MicrosoftのSignTool、JavaのJarsigner、さらにはOpenSSLなの専用の署名ツールが必要です。 署名自体は、ファイルの内容をデジタル証明書にバインドする暗号化操作です。

コード署名は、特にインターネットのような安全でないチャネルから実行可能なプログラムファイルをダウンロードする際に、ソフトウェアの改ざんから企業、パートナー、およびエンド-ユーザーを保護します。 Entrustはコード署名ソリューションのプロバイダーとして、効率的で高保証のコード署名ソリューションの実装を支援し、アプリケーションを偽造または改ざんする攻撃から御社と御社の顧客を保護します。

コードにデジタル署名する目的は何ですか?

コードにデジタル署名する主な理由は2つあります:

  1. 署名されたファイルを公開している組織のIDをユーザーに提供するためです
  2. ファイルの整合性を検証する手段を提供するためです。つまり、署名されてからファイルが破損したり、悪意を持って変更されたりしていないことが確認できます

コード署名証明書とは?

コード署名証明書は、ソフトウェア開発者がアプリケーション、ドライバ、実行ファイル、ソフトウェアプログラムに電子署名を行うために使用されます。 これは、エンド-ユーザーのために、コードが第三者によって侵害されたり、ハッキングされたりしていないことを確認するものです。 公開鍵を関連するユーザー(秘密鍵の所有者)にバインドするために、公開鍵インフラストラクチャ(PKI)はデジタル証明書を使用します

コード署名ベストプラクティス

コード署名証明書のベストプラクティスは次の通りです。

  • 秘密鍵へのアクセス制御
  • FIPS-140-2レベル3のハードウェアセキュリティモジュール(HSM)で秘密鍵を保護
  • タイムスタンプコード
  • テスト署名とリリース署名の違いを理解する
  • 署名されるコードを認証する
  • 複数の証明書にリスクを分散させる
  • 漏洩した証明書を失効させる

Entrustは、TLS/SSL証明書、セキュアメール証明書、ドキュメント署名証明書、モバイルデバイス証明書など、あらゆる種類のコード署名証明書とその包括的な管理方法を提供します。

コード署名の仕組み

コード署名を実現するために、ソフトウェアの発行元が秘密公開鍵ペアを生成し、その公開鍵をコード署名証明書の発行要求とともに認証局に提出する必要があります。 認証局は、ソフトウェア発行元のIDを確認し、発行元のデジタル署名付き証明書要求を認証します。 この審査と鍵の検証プロセスが正常に完了すると、認証局は発行元のIDと公開鍵をバンドルし、バンドルに署名します。 これにより、コード署名証明書が作成されます。

コード署名の実装については、このホワイトペーパーをご覧ください。

コード署名のイラスト

デジタル署名の方法

様々なアプリケーションプラットフォームが、コード署名をサポートし、署名を実行するための様々なツールを提供しています。 以下に、より一般的なコード署名の種類を示します。

  • Adobe AIR
  • Apple Mac OS X Developer Library
  • Firefox XPI
  • Java
  • Microsoft

エンド-ユーザー向け手順

ソフトウェアが信頼できるかどうかを判断するために、ユーザーが取るべき簡単な5つのステップがあります。

  1. ソフトをインストールする予定があったかどうかを確認します。
  2. ファイル名が、インストールしようとしていたソフトを表しているかどうか確認します。 例では、ユーザーはAdobe Reader 10をインストールしているようですが、ファイル名がそれを表しています。
  3. 発行元が、そのソフトを作成したと思われる人物と一致しているかどうかを確認します。 ソフトウェアのダウンロードサイトが発行元のサイトと異なる場合があり、この確認は困難な場合があります。
  4. コード署名証明書を確認し、発行元名が証明書に記載されているかどうかを確認します。
  5. 証明書が一般に信頼されているCAから発行されているかどうかを確認します。

コード署名のリソース

OV(Organization Validated)証明書は、証明書上に組織と所在地を表示します。 Windowsカーネルモード署名には対応していません。 拡張検証(EV)証明書は、組織と所在地に加え、管轄区域と組織の種類を表示します。 EV証明書は、Vista、Windows 7、Windows 8、Windows 8.1およびWindows 10のWindowsカーネルモード署名に対応します。 組織のニーズに最適なコード署名証明書ソリューションを選択するのは困難ですが、Entrustがお手伝いします。

コード署名のソリューション

Entrustのコード署名ソリューションのポートフォリオは、耐タンパー性のあるnShieldハードウェアセキュリティモジュール(HSM)とEntrustプロフェッショナルサービスのコード署名ゲートウェイソリューションを組み合わせています。 コード署名ゲートウェイは、承認ワークフローの管理、リクエストの受付、承認者へのメール通知、タイムアウトの管理、承認の確認、アクティビティの記録、ステージングエリアへの署名済みコードの配信を行います。 このソリューションでは、Entrust nShield HSMを利用し、すべての署名鍵をFIPS 140-2認定HSMで保護する信頼の基点を採用しています。 そうすることで、大切な署名鍵(コードの信頼性と整合性のための鍵)を失うリスクを防ぎます。 これにより、お客様はご自身のソフトウェアコードに署名することができます。 特徴:

  • Microsoft Smartscreen Filter
  • サードパーティとの統合
  • 無制限の統合
  • タイムスタンプ
  • 発行元ステータスを確認
  • 警告ボックスの表示を削減

Entrustのコード署名ソリューションは、コード署名のベストプラクティスとデューケア基準に関する広範な専門知識によって裏付けられています。

コード署名は、署名されたファイルを公開している組織のIDをどのように提供しますか?

デジタル署名は、ファイルとデジタル証明書の間に暗号結合を作成し、デジタル証明書は組織を表します。 証明書はデジタル化されたゴム印と考えることができます。氏名、メールアドレス、住所、国など、組織に関する詳細が含まれています。 したがって、コードに署名することは、組織の詳細を表示するデジタル印をコードに押印することと同義です。

コード署名の詳細は、署名されたファイルを開くたびに確認できます。 ほとんどの場合、それはオペレーティングシステムによって自動的に実行され、署名に使用される証明書に含まれている組織の名前が表示されます。

ユーザーアカウント制御プロンプト

Microsoft Windows 10でデジタル署名された実行可能ファイルを開く。

コード署名は、ファイルの整合性を検証する手段をどのように提供しますか?

すべてのコード署名は、ファイルの内容に基づいて作成されます。 技術的な詳細にあまり踏み込むことなく、署名ツールは署名するファイルの要約バージョンを計算し(ハッシュと呼ばれます)、提供されたデジタル証明書を使用してこの要約バージョンに署名します。 署名されたハッシュは、デジタル署名のホスティング専用の場所でファイルに埋め込まれます。

署名されたファイルの配布を開始すると、オペレーティングシステムと関連アプリケーションが署名の存在を検出します。 ファイルのハッシュを自動的に(署名されたハッシュを含めずに)計算し、ファイルに埋め込まれている署名されたハッシュと比較します。 両方が同じである場合、検証は成功します。 計算されたハッシュが署名されたハッシュと異なる場合、失敗します。 検証に失敗したということは、署名が実行された後に(エラーまたは悪意のある意図の結果として)ファイルの内容が変更されたことを意味します。

このメカニズムの信頼性は、ハッシュの計算に使用されるアルゴリズムの強度に基づいています。ハッシュが長いほど、優れているということになります。 現在使用されている標準の1つは、256ビットのハッシュを生成するアルゴリズムであるSHA-256です。

コード署名の利点は何ですか?

コードにデジタル署名することには、いくつかの利点があります:

  • ソフトウェアに対するユーザーの信頼を高めます。 署名されたコードは、ファイルが予想される組織に属しているだけでなく、(たとえばマルウェアを混入する目的で)改ざんされていないことを保証します。
  • ソフトウェア開発者としての評判を高めます。 公開する署名済みソフトウェアが多いほど、評判は良くなります。 たとえば、Microsoftコードは、顧客が適切なファイルをダウンロードしていることを確認するためにソフトウェアに署名します。 署名されたソフトウェアは、ウイルス対策ソフトウェアやマルウェア検出器にも役立ちます。 あなたがあなたのソフトウェアに署名すれば、それらのソフトや検出器はあなたのソフトウェアの疑わしい、署名されていないバージョンにフラグを立てることができます。
  • オペレーティングシステムからの警告やブロックを回避します。 オペレーティングシステムは、すべてのソフトウェア発行者が実行可能ファイルに署名していることを前提としています。 署名されていないソフトウェアが公開され、ユーザーがそれを起動した場合、オペレーティングシステムからの警告メッセージが表示される可能性が非常に高くなります。 MacOSは、署名されていないファイルの起動を拒否することで知られており、ユーザーはセキュリティをバイパスしてインストールを続行する必要があります。

警告メッセージプロンプト

Microsoft Windows 10への署名されていないソフトウェアのインストールに関する警告メッセージ。

ブロックメッセージプロンプト

MacOSへの署名されていないソフトウェアのインストールに対するブロッキングメッセージ。

ファームウェアを使用するIoTデバイスの場合、安全な更新を保証する最良の方法の1つは、内部(プライベート)コード署名証明書を使用して署名された更新ファイルのみを受け入れるという要件で、ファームウェアを構築することです。

ホワイトペーパーを読む: コード署名の重要性

パブリックのコード署名とプライベートのコード署名の違いは何ですか?

コード署名証明書は、証明書発行エンジンである認証局(CA)によって発行されます。 ほとんどの組織は、1つまたは複数の「プライベート」(内部)CAを所有しており、コード署名証明書を含むあらゆる種類のデジタル証明書を発行できます。 ただし、これらの証明書で生成された署名は、組織の内部環境内でのみ信頼されます。

これは、内部アプリケーションとIoTを含む多くのユースケースに最適ですが、CAが認識されない環境の外部にコードを配布する場合は、プライベートCAは機能しません。

Entrustなどの公的に信頼されているCAによって発行されたコード署名証明書は、世界中のすべての主要なオペレーティングシステムとアプリケーションによって認識および信頼される署名を生成します。 EntrustなどのパブリックCA組織(単にパブリックCAとも呼ばれます)は、厳格な証明書発行基準に従い、定期的な監査を受け、Microsoft、Apple、Google、Mozillaなどの主要なオペレーティングシステムまたはアプリケーションプロバイダーで信頼されるように、それぞれに対して申請をする必要があります。

署名されたコードに対面すると、オペレーティングシステムとアプリケーションは、署名に使用された証明書の発行CAを確認します。 発行元のCAが「信頼リスト」(ルートストアとも呼ばれます)にない場合、署名は信頼されず、検証は失敗します。 したがって、ソフトウェアをインターネットに発行するときに、公的に信頼されているコード署名証明書を取得することが重要です。

OVコード署名とEVコード署名の違いは何ですか?

組織は、プライベートコード署名証明書には必要な詳細を自由に含めることができますが、パブリック証明書には、証明書を発行する前にパブリックCAによって徹底的に検証された情報のみを含める必要があります。

パブリックCAは、2つのカテゴリのパブリックに信頼されたコード署名証明書を発行できます: OVとEVです。 これらのカテゴリは、証明書を発行する前にパブリックCAによって実行される組織の検証のレベルと、証明書のストレージ要件(具体的には秘密鍵)に対応しています。

  • OV(組織の検証): これは、CAによって実行される組織の標準的な検証方法です。 会社に関するチェック(会社は存在しますか? 良好な状態ですか? それはどこにありますか?)、そして組織に代わって証明書を要求している人の検証(彼らは本当に組織の従業員ですか?)が含まれます。
  • EV(拡張検証): その名前が示すように、これは拡張検証プロセスであり、このプロセスでは組織の詳細と証明書の要求者をさらに検証する必要があります。 CAは、より多くの情報とより多くの事務処理を必要とし、証明書を発行する前に、組織と要求者への1回または複数回の呼び出しを続行します。 EVコード署名証明書には安全なストレージが必須です。つまり、証明書とその秘密鍵を保存するには、安全なUSBトークンまたはハードウェアセキュリティモジュール(HSM)のいずれかが必要になります。

Entrustは、OV証明書かEV証明書かに関係なく、すべてのコード署名のオーダーに対して、USBトークンまたはnShield HSMを提供できます。

コード署名HSMの詳細についてご確認ください。

タイムスタンプはコード署名証明書でどのように機能しますか?

コード署名のコンテキストにおいて、タイムスタンプとは、正確な日付と時刻を含むデジタルタイムスタンプをコード署名に適用するプロセスです。

タイムスタンプは、コード署名において、重要でありながら忘れられがちなステップです。 署名には必ず有効期限があります。これは、署名に使用されるコード署名証明書の有効期限に対応します。 署名の有効期限が切れると、署名されたコードの起動時に検証が失敗し、警告メッセージが表示され、コードの実行が妨げられます。

プライベート証明書は、必要に応じて非常に長い存続期間(10年以上)を持つことができます。これは、署名されたコードがそのような長期間の後に使用されなくなる可能性があるため、多くの場合十分です。 ただし、パブリックコード署名証明書の有効期間は現在最大3年間であり、この期間の終わりまでコードが利用され続ける可能性が非常に高くなります。 コード署名にタイムスタンプを付けると、さらに9~10年の有効期間が与えられます(使用するタイムスタンプ証明書の有効期間によって異なります)。 また、現在のタイムスタンプの有効期限が近づいたときに新しいタイムスタンプを再適用して、コード署名の有効期間を拡張し、警告やブロックを回避できます。

タイムスタンプは、コード署名証明書が侵害され、それを取り消す必要がある場合にも役立ちます。 失効は、証明書が侵害されたと思われる日時までさかのぼることができます。 すべての署名にタイムスタンプが付けられている場合、失効日より前に生成された署名のみが有効なままになります。 タイムスタンプのないコード署名は、証明書の有効期限が切れたり取り消されたりすると無効になります。

タイムスタンプは、内部CAからのプライベートタイムスタンプ証明書を使用して実行できます。 ただし、外部で共有する必要のあるコードについては、すべての主要なオペレーティングシステムとアプリケーションによって認識および信頼されるパブリックタイムスタンプサービスを使用する必要があります。 Entrustを含む、ほとんどのパブリックCAは、専用URLを介してパブリックタイムスタンプサービスを提供しています。