コード署名

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コード署名は、実行可能ファイルスクリプトにデジタル署名し てソフトウェアの作成者を確認し、署名後にコードが変更または破損していないことを保証するプロセスです。このプロセスでは、暗号化ハッシュを使用して、信頼性と整合性を検証します。[1]

コード署名は、いくつかの価値ある機能を提供できます。コード署名の最も一般的な使用法は、展開時にセキュリティを提供することです。一部のプログラミング言語では、名前空間の競合を防ぐためにも使用できます。ほとんどすべてのコード署名の実装は、作成者またはビルドシステムのIDを確認するためのある種のデジタル署名メカニズムと、オブジェクトが変更されていないことを確認するためのチェックサムを提供します。また、オブジェクトに関するバージョン情報を提供したり、オブジェクトに関する他のメタデータを保存したりするためにも使用できます。[2]

ソフトウェアの認証メカニズムとしてのコード署名の有効性は、署名キーを支えるセキュリティに依存します。他の公開鍵インフラストラクチャ(PKI)テクノロジと同様に、システムの整合性は、発行者が不正アクセスから秘密鍵を保護することに依存しています。汎用コンピュータのソフトウェアに保存されているキーは、侵害される可能性があります。したがって、ハードウェアセキュリティモジュールまたはHSMと呼ばれる、安全で改ざんされない暗号化ハードウェアデバイスにキーを保存する方が安全であり、ベストプラクティスです[3]

セキュリティの提供

多くのコード署名実装は、 TLSまたはSSHで採用されているプロセスと同様に、1つはパブリックキーともう1つはプライベートキーのペアを含むシステムを使用してコードに署名する方法を提供しますたとえば、.NETの場合、開発者は秘密鍵を使用して、ビルドするたびにライブラリまたは実行可能ファイルに署名します。このキーは、開発者またはグループに固有であるか、アプリケーションまたはオブジェクトごとに固有である場合があります。開発者は、このキーを自分で生成するか、信頼できる認証局(CA)から取得することができます。[4]

コード署名は、特定のコードのソースがすぐにはわからない可能性がある分散環境で特に役立ちます。たとえば、JavaアプレットActiveXコントロール、その他のアクティブなWebおよびブラウザのスクリプトコードです。もう1つの重要な使用法は、既存のソフトウェアに更新とパッチを安全に提供することです。[5] WindowsMac OS X、およびほとんどのLinuxディストリビューションは、コード署名を使用して更新を提供し、他の人がパッチシステムを介して悪意を持ってコードを配布できないようにします。これにより、受信側のオペレーティングシステムは、更新がサードパーティまたは物理メディア(ディスク)によって配信された場合でも、更新が正当であることを確認できます。

コード署名は、WindowsおよびMac OS Xで最初の実行時にソフトウェアを認証するために使用され、サードパーティのディストリビューターまたはダウンロードサイトによってソフトウェアが悪意を持って改ざんされていないことを確認します。この形式のコード署名は、プラットフォームが分散化されているため、Linuxでは使用されません。パッケージマネージャーは、すべての形式のソフトウェア(更新やパッチだけでなく)の主要な配布モードであり、直接検査を可能にするオープンソースモデルです。必要に応じてソースコードの。DebianベースのLinuxディストリビューション(とりわけ)は、公開鍵暗号を使用してダウンロードされたパッケージを検証します。[6]

認証局(CA)を使用した信頼できるID

コード署名の認証に使用される公開鍵は、信頼できるルートオーソリティCAまでさかのぼって追跡できる必要があります。できれば、安全な公開鍵インフラストラクチャ(PKI)を使用します。これは、コード自体が信頼できることを保証するものではなく、指定されたソースから(またはより明示的には特定の秘密鍵から)取得されることだけを保証します。[7]CAはルート信頼レベルを提供し、プロキシによって他の人に信頼を割り当てることができます。ユーザーがCAを信頼する場合、ユーザーはおそらく、そのCAまたはそのプロキシの1つによって生成されたキーで署名されたコードの正当性を信頼できます。多くのオペレーティングシステムとフレームワークには、1つ以上の認証局に対する信頼が組み込まれています。また、大規模な組織が組織の内部にプライベートCAを実装することも一般的です。これは、パブリックCAと同じ機能を提供しますが、組織内でのみ信頼されます。

拡張検証(EV)コード署名

Extended Validation(EV)コード署名証明書は、追加の検証および技術要件の対象となります。これらのガイドラインは、CA/Bフォーラムのベースライン要件とExtendedValidationガイドラインに基づいています。EVに固有の検証要件に加えて、EVコード署名ガイドラインでは、「加入者の秘密鍵は、FIPS 140-2レベル2の要件を満たす、または超える暗号モジュールで生成、保存、および使用される」と規定されています。[8]

Windows 10カーネルモードドライバーの署名など​​の特定のアプリケーションには、EVコード署名証明書が必要です。[9]さらに、MicrosoftのIEBlogは、「EVコード署名証明書によって署名されたWindowsプログラムは、そのファイルまたは発行元に以前のレピュテーションが存在しない場合でも、 SmartScreenレピュテーションサービスですぐにレピュテーションを確立できる」と述べています。[10]

EVコード署名証明書のサンプル

これは、SSL.comがソフトウェアに署名するために使用するデコードされたEVコード署名証明書の例です。SSL.com EV Code Signing Intermediate CA RSA R3は発行者のcommonNameとして表示され、これをEVコード署名証明書として識別します。証明書のSubjectフィールドには、SSLCorpが組織として記述されています。Code Signing唯一のX509v3拡張キー使用法として示されています。

証明書:
    データ:
        バージョン:3(0x2)
        シリアルナンバー:
            59:4e:2d:88:5a:2c:b0:1a:5e:d6:4c:7b:df:35:59:7d
    署名アルゴリズム:sha256WithRSAEncryption
        発行者:
            commonName =SSL.comEVコード署名中間CARSAR3
            OrganizationName = SSL Corp
            localityName=ヒューストン
            stateOrProvinceName=テキサス
            countryName = US
        有効
            前ではない:8月30日20:29:13 2019 GMT
            後ではない:11月12日20:29:13 2022 GMT
        主題:
            1.3.6.1.4.1.311.60.2.1.3=米国
            1.3.6.1.4.1.311.60.2.1.2=ネバダ
            streetAddress=3100リッチモンドアベニューSte503
            businessCategory=民間組織
            postalCode = 77098
            commonName = SSL Corp
            シリアル番号=NV20081614243
            OrganizationName = SSL Corp
            localityName=ヒューストン
            stateOrProvinceName=テキサス
            countryName = US
        件名公開鍵情報:
            公開鍵アルゴリズム:rsaEncryption
                公開鍵:(2048ビット)
                係数:
                    00:c3:e9:ae:be:d7:a2:6f:2f:24..。
                指数:65537(0x10001)
        X509v3拡張機能:
            X509v3権限キー識別子:
                keyid:36:BD:49:FF:31:2C:EB:AF:6A:40:FE:99:C0:16:ED:BA:FC:48:DD:5F
                
            当局情報アクセス:
                CA発行者-URI:http://www.ssl.com/repository/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crt
                OCSP-URI:http://ocsps.ssl.com
                
            X509v3証明書ポリシー:
                ポリシー:2.23.140.1.3
                ポリシー:1.2.616.1.113527.2.5.1.7
                ポリシー:1.3.6.1.4.1.38064.1.3.3.2
                  CPS:https://www.ssl.com/repository
                  
            X509v3拡張キーの使用法:
                コード署名
            X509v3 CRL配布ポイント:
            
                フルネーム:
                  URI:http://crls.ssl.com/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crl
                  
            X509v3サブジェクトキー識別子:
                EC:6A:64:06:26:A7:7A:69:E8:CC:06:D5:6F:FA:E1:C2:9A:29:79:DE
            X509v3の主な使用法:重要
                デジタル署名
    署名アルゴリズム:sha256WithRSAEncryption
         17:d7:a1:26:58:31:14:2b:9f:3b..。

CAの代替

もう1つのモデルは、最初の使用に対する信頼です。モデル。開発者は、独自に生成したキーを提供することを選択できます。このシナリオでは、ユーザーは通常、オブジェクトが開発者からのものであることを初めて確認するために、開発者から直接何らかの方法で公開鍵を取得する必要があります。多くのコード署名システムは、公開鍵を署名内に保存します。実行前にコードの署名をチェックする一部のソフトウェアフレームワークとOSでは、最初の実行後のその時点からその開発者を信頼することを選択できます。アプリケーション開発者は、インストーラーに公開鍵を含めることで、同様のシステムを提供できます。次に、キーを使用して、アップグレード、プラグイン、別のアプリケーションなど、実行する必要のある後続のオブジェクトがすべて、同じ開発者からのものであることが確認されます。

タイムスタンプ

タイムスタンプは、証明書の有効期限が切れた場合に表示される信頼の警告を回避するように設計されています。事実上、タイムスタンプは証明書の有効期間を超えてコードの信頼を拡張します。[11]

侵害のために証明書を取り消す必要がある場合、侵害イベントの特定の日時が取り消しレコードの一部になります。この場合、タイムスタンプは、証明書が侵害される前または後にコードが署名されたかどうかを確認するのに役立ちます。[11]

Xcodeでのコード署名

開発者は、iOSアプリとtvOSアプリを実際のデバイスで実行する前、およびAppStoreにアップロードする前に署名する必要がありますこれは、開発者が有効なAppleDeveloperIDを所有していることを証明するために必要です。アプリケーションをデバイスで実行するには、有効なプロファイルまたは証明書が必要です。

問題

他のセキュリティ対策と同様に、コード署名は無効にすることができます。ユーザーはだまされて署名されていないコードを実行したり、検証を拒否するコードを実行したりする可能性があり、システムは秘密鍵が秘密である限り安全に保たれます。[12] [13]

コード署名は、ソフトウェアの作成者による悪意のあるアクティビティや意図しないソフトウェアのバグからエンドユーザーを保護するものではなく、ソフトウェアが作成者以外のユーザーによって変更されていないことを確認するだけであることに注意することも重要です。タイムスタンプが誤っているため、またはRAMが過剰に使用されているために、サンドボックスシステムが証明書を受け入れない場合があります

実装

Microsoftは、Microsoftがテストしたドライバー用に提供されている(Authenticodeに基づく)コード署名の形式を実装しています。ドライバはカーネルで実行されるため、システムを不安定にしたり、システムをセキュリティホールにさらしたりする可能性があります。このため、MicrosoftはWHQLプログラムに送信されたドライバーをテストします。ドライバーが合格した後、Microsoftはそのバージョンのドライバーに安全であると署名します。32ビットシステムの場合のみ、コードが署名されていないことをユーザーに警告するプロンプトでインストールを許可することに同意した後、Microsoftで検証されていないドライバーをインストールできます。.NET(マネージ)コードの場合、公開/秘密キーとSHAを使用する厳密な名前の署名と呼ばれる追加のメカニズムがあります-証​​明書ではなく1つのハッシュ。ただし、Microsoftは、Authenticodeの代わりに厳密な名前署名に依存することを推奨していません。[14]

ゲームおよび消費者向けデバイスの署名されていないコード

ゲーム機などの消費者向けデバイスのコンテキストでは、「署名されていないコード」という用語は、ソフトウェアの受け入れと実行に通常必要な暗号化キーで署名されていないアプリケーションを指すためによく使用されます。ほとんどのコンソールゲームは、コンソールメーカーが設計した秘密鍵で署名する必要があります。そうしないと、ゲームがコンソールに読み込まれません。署名されていないコードを実行する方法はいくつかあります。これには、ソフトウェアの悪用modchipの使用、スワップトリックと呼ばれる手法、またはsoftmodの実行が含まれます。

署名されたアプリケーションを別のDVDにコピーするだけでは起動できない理由は、最初は明らかではないように思われるかもしれません。Xboxでは、この理由は、Xbox実行可能ファイル(XBE)に、XBEが起動可能なメディアのタイプを指定するメディアタイプフラグが含まれているためですほとんどすべてのXboxソフトウェアでは、実行可能ファイルが工場で製造されたディスクからのみ起動するように設定されているため、実行可能ファイルを書き込み可能なメディアにコピーするだけで、ソフトウェアの実行を停止できます。

ただし、実行可能ファイルは署名されているため、フラグの値を変更するだけでは実行可能ファイルの署名が変更され、チェックすると検証に失敗します。

も参照してください

参照

  1. ^ 「コード署名入門」
  2. ^ ヘンドリック、ウィリアム(2015)。「信頼できる証明書の完全な概要-CABForum」(PDF)2015年2月26日取得
  3. ^ 「コード署名証明書のベストプラクティスとしての秘密鍵の保護」(PDF)
  4. ^ ヘンドリック、ウィリアム(2011年6月17日)。「コード署名とは何ですか?」2015年2月26日取得
  5. ^ 「デジタル署名とWindowsインストーラー」
  6. ^ 「SecureApt-DebianWiki」
  7. ^ https://casecurity.org/wp-content/uploads/2013/10/CASC-Code-Signing.pdf [裸のURLPDF ]
  8. ^ 「ExtendedValidationCode署名証明書の発行と管理に関するガイドライン」(PDF)CA/ブラウザフォーラム2019年12月4日取得
  9. ^ 「ドライバー署名ポリシー」Microsoft 2019年12月9日取得
  10. ^ 「MicrosoftSmartScreenおよびExtendedValidation(EV)コード署名証明書」Microsoft 2019年12月9日取得
  11. ^ a b モートン、ブルース。「コード署名」(PDF)CASC 2014年2月21日取得
  12. ^ 「偽のウイルス対策ソリューションはますますコード署名証明書を盗んでいます」2014年1月9日。
  13. ^ http://www.eweek.com/c/a/Security/Theres-A-Racket-Brewing-In-the-Code-Signing-Cert-Business/ [デッドリンク]
  14. ^ 厳密な名前のバイパス:.NETセキュリティブログ

外部リンク