コードに署名する

コード署名とは

コード署名は、ソフトウェア開発者や組織が実行ファイル、スクリプト、ソフトウェアライブラリにデジタル署名し、作成者の身元を確認したうえで、署名後にコードが変更または改ざんされていないことを保証できるセキュリティ技術です。この仕組みは、SCEPmanのような認証局(CA)が発行するデジタル証明書によって実現されます。


コードに署名する理由


企業がコード署名を利用する理由はいくつかあり、いずれもソフトウェアアプリケーションと更新プログラムのセキュリティ、完全性、信頼性を高めることを目的としています。主な理由は次のとおりです:

真正性:コード署名は、ソフトウェア発行元の身元確認に役立ちます。デジタル署名されたソフトウェアであれば、ダウンロードまたはインストールするソフトウェアが、なりすましや悪意のある第三者ではなく、表示されているとおりの提供元や作成者から提供されたものだとユーザーが確認できます。

完全性:デジタル署名は、署名後にコードが変更または改ざんされていないことを保証します。署名後にソフトウェアが何らかの形で変更されると、デジタル署名は無効になり、ソフトウェアの完全性が損なわれている可能性がユーザーに通知されます。

信頼:コード署名は、ユーザーからの信頼を築きます。オペレーティングシステムやWebブラウザーは、有害な可能性のあるソフトウェアからユーザーを保護するため、署名のないコードに警告を表示したり、実行をブロックしたりすることがよくあります。署名済みのソフトウェアは通常こうした警告を回避できるため、インストール時の手間が減り、ソフトウェアの安全性に対する確信も得られます。

セキュリティ:コードの真正性と完全性を確保することで、コード署名はマルウェアの配布を防ぐのに役立ちます。スパイウェアやその他の悪意のあるソフトウェアについても同様です。これは、ユーザーのシステムとデータのセキュリティを維持するうえで欠かせません。

コンプライアンス:規制や業界標準によっては、セキュリティポリシーの遵守の一環としてコード署名が求められる場合があります。

ゲートキーピング:最新のオペレーティングシステムやブラウザーは、信頼された検証済みのソフトウェアだけをインストールおよび実行できるようにするゲートキーピングの仕組みとして、コード署名を利用しています。これはマルウェア感染のリスクを下げ、開発者とユーザーの双方にとってより安全なエコシステムづくりに役立ちます


コード署名の仕組み


デジタル署名の作成:開発者や組織がソフトウェアをリリースする段階になると、コード署名証明書を使ってデジタル署名を作成します。この証明書には公開鍵と秘密鍵が含まれます。秘密鍵でソフトウェアのハッシュを暗号化し、デジタル署名を生成します。

ハッシュ化:ソフトウェアのコードにハッシュ関数を適用し、一意のハッシュ値(ダイジェスト)を生成します。このハッシュ値はコードの内容を表します。コードが1ビットでも変わればハッシュ値も変わるため、改変を検出する有効な手段になります。

暗号化:次に、ハッシュは署名者の秘密鍵で暗号化されます。この暗号化されたハッシュと、使用したハッシュアルゴリズムの情報がデジタル署名を構成します。デジタル署名はソフトウェアに付加されます。

検証:署名済みのソフトウェアをユーザーがダウンロードまたはインストールすると、システム(またはインストール処理)が、デジタル証明書を通じて提供される公開鍵を使ってデジタル署名を復号します。続いてソフトウェアを再度ハッシュ化し、そのハッシュ値と復号したハッシュ値を比較します。両者が一致すれば、署名後にソフトウェアが変更されていないことが確認できます。

信頼チェーン:署名に使われるデジタル証明書は、オペレーティングシステムやアプリケーションが信頼するSCEPmanのような認証局(CA)が発行します。証明書には発行元の情報と公開鍵が含まれます。署名の検証時に、その証明書が信頼できるもの、つまり認知された認証局が発行したものであれば、そのソフトウェアは真正であると見なされます。


SCEPmanはコード署名にどう役立つか


SCEPmanはコード署名証明書を発行できるため、開発者や組織はソフトウェアの完全性と真正性を確保できます。

拡張キー使用法「コード署名」:SCEPmanは「コード署名」用の拡張キー使用法(EKU)属性に対応しています。これにより、SCEPmanが発行する証明書はソフトウェアやアプリケーションへの署名用途に最適化され、業界標準とセキュリティ実務に沿ったものになります。

複数の鍵長オプション:さまざまなセキュリティ要件や方針に対応するため、SCEPmanは証明書の鍵長を複数用意しています。強力な暗号化の必要性と、鍵長が長くなることによる性能への影響を踏まえて、証明書に適切なセキュリティレベルを選択できます。

PKCS#12形式とPEM形式のサポート:ソフトウェアの開発と展開の環境が多様であることを踏まえ、SCEPmanはPKCS#12形式とPEM形式の両方の証明書に対応しています。そのため、SCEPmanが発行した証明書は幅広い環境やプラットフォームに容易に組み込むことができ、署名済みコードの展開と管理も簡単になります。