ベストプラクティス 03-15-2018

タイムスタンプのためのベストプラクティス

Vincent Lynch

コードサイニング(署名)は、実行ファイルが変更されていないこと、破損していないことを保証するものです。最近の多くのOSでは、出所不明のコードや真正性が保証されていないコードからユーザーを守るために、コードサイニングを義務付けています。

HTTPSと同様に、認証局によって作成された信頼できる証明書は、主要なオペレーティングシステムで認識されるコードに署名するために個人や企業に発行されます。

コードサイニングの最も重要な部分の一つがタイムスタンプです。これは、証明書の有効期限が切れた後でも、ソフトウェアやユーザーが有効なコードサイニング署名を認識できるようにするための署名プロセスの一部です。

期限切れのコードサイニング証明書が原因でソフトウェアが動作しなくなった場合、ユーザーに与える影響とその修復方法を検討しましょう。アップデートを行うことはできますか?あるいは、そのメカニズムも期限切れの署名のために壊れてしまいますか?緊急時にパッチを開発して展開するには、どのくらいの費用がかかるのでしょうか?あなたのソフトウェアが動作しなくなったら、ユーザーはビジネス上の影響を受けるでしょうか?

期限切れの署名は大きな影響を与えるため、コード署名のプロセスを十分に理解して文書化し、署名を保持するためにソフトウェアに常にタイムスタンプを付けることは非常に重要です。

タイムスタンプは、ソフトウェアを継続的に使用するためのベストプラクティスであるだけでなく、セキュリティ上のメリットもあります。鍵の漏洩により証明書を失効させる必要が生じた場合、失効日以前に署名されたものは引き続き機能しますが、新たに署名されたものは無効となります。

今回は、タイムスタンプの背景やソフトウェアの署名で予期せぬ問題が発生しないようにするためのベストプラクティスをご紹介します。

タイムスタンプとは何ですか?

タイムスタンプは、ソフトウェアの署名を保存するため、コードサイニング証明書の有効期限が切れた後も、OSや他のソフトウェアに受け入れられるようになります。署名が評価される際、タイムスタンプによって、ソフトウェアが実行されている現在の時刻ではなく、署名された時刻における署名の有効性をチェックすることができます。

タイムスタンプがない場合、署名は現在の日付に対して評価されます。何年も前にソフトウェアを配布したことがあるかもしれませんが、その場合、証明書は失効しており、その証明書による署名はもはや有効ではありません。これにより、ユーザーがあなたのソフトウェアを実行することができなくなります。プラットフォームによっては、それを回避する方法がない場合もあります。

例えば、お客様のコードサイニング証明書は2017年全体(2017/1/1~2017/12/31)で有効であり、2017年11月に実行ファイルに署名してタイムスタンプを押したとします。ユーザーがあなたの実行ファイルをダウンロードして今日実行すると、コードサイニング証明書が現在有効であるかどうかをチェックする代わりに、OSはタイムスタンプをチェックして、2017年11月に有効であったかどうかを評価します。その時点で証明書が有効であったと判断され、署名が受け入れられます。

実行ファイルの署名は、ユーザーが実行するたびにチェックされることに注意してください。つまり証明書の有効期限が切れてタイムスタンプがない場合、ソフトウェアはすべてのユーザーに対して突然動作しなくなります。

ほとんどのソフトウェアは、ユーザーに配布した後、できるだけ長く使ってもらいたいと考えます。このタイムスタンプは、ソフトウェアを何年も使い続けられるようにするための署名プロセスの重要な要素となります。

タイムスタンプ自体は認証局の署名を受けて保護されているため、改ざんやなりすましに強く、暗号化されています。タイムスタンプは、カウンターサイン(副署・連署)と考えてください。

Windowsでは、タイムスタンプを利用することで、コードサイニング証明書を提供した認証局が信用されていない場合でも、署名を有効に保つことができます。

ベストプラクティス

  1. 最初の、そして最も重要なこと

    タイムスタンプを使用することです。マイクロソフトの署名ツールなど、多くのツールでは、タイムスタンプはオプションである。お使いの開発ツールでタイムスタンプがどのように機能するかを理解しておいてください。デジサートでは、Windows、Mac OS、Javaなど、代表的な環境に対応したドキュメントを提供しています。

  2. 対応プラットフォームの確認

    SHA-2は、タイムスタンプ署名の最新標準アルゴリズムです。しかし、現在も使用されているOSの中には、デフォルトでSHA-2をサポートしていないものがあります。Windows 7では、パッチを当てることでのみSHA-2をサポートしています。古いOSがユーザーの間で人気があると思われる場合、SHA-1署名を使用すべきか、2つの証明書でデュアルサインして両方のアルゴリズムをサポートすべきかを検討してください。

  3. プロセスの一部にする

    ソフトウェアのアップデートに伴い、新しい実行ファイルを作成しリリースすることになります。ソフトウェアのすべてのバージョンで予期せぬ問題やエラーを避けるために、署名とタイムスタンプがそのプロセスの一部であることを確認してください。

  4. プロセスの文書化

    あなたは自分の開発ツールとプロセスを誰よりもわかっています。タイムスタンプでは、認証局からタイムスタンプ署名を安全に取得するためのURLなど、署名プロセス中に追加のフラグやコマンドが必要です。その中には、タイムスタンプ署名をURLから安全に取得するためのものも含まれています。スタッフや手順の変更により、ソフトウェアへの適切な署名を忘れてしまうことがないようにしてください。

  5. 鍵が漏洩した場合の被害を抑える

    タイムスタンプは、実行ファイルが、証明書が失効する前に署名されたのか、後に発行されたのかをオペレーティングシステムが認識する方法を提供します。鍵の危殆化により証明書を失効させる必要が生じた場合、タイムスタンプを付与していれば、正当に作成した署名を無効にすることなく、安全に失効させることができます。タイムスタンプは失効日と照合され、その日以前に発行されたものは引き続き有効となります。

証明書の有効期限の重要性

よくある誤解は、証明書の有効期限は、認証局がお客様に追加料金を請求する機会であるというものです。技術的な観点から言えば、証明書の有効期限は、システムを機能させるために必要なPKIの基本的な部分であり、特に、複数の独立した当事者が相互に作用するWeb PKIにおいては重要です。

PKIの主な目的の一つは、ドメイン名、組織、その他の固有の識別子などのIDを公開鍵に結びつけることです。信頼できる証明書であれば、その身元が正確であるかどうかが検証されます。これにより、DigiCert.com/デジサート社に発行された証明書が、私たちが所有しているものであるという信頼を、お客様やお客様がお使いのソフトウェアに与えることができ、コードサイニング証明書、SSL証明書、電子メール証明書についても同様です。

例えば、Software Developers LLC. のコードサイニング証明書を受け取るためには、認証局ベンダーは、その会社が実際に存在し、地方自治体に適切に登録され、良好な状態にあること、そして、あなたが証明書を要求する権限を持つその会社の従業員であることを確認する必要がありました。

有効期限切れは、認証局がこの情報を再確認して、ID と公開鍵の結合が依然として正しいことを確認する機会として機能します。このように信頼できる証明書は、パスポートや運転免許証のような有効期限のある身分証明書と考えるべきです。あなたに書類を発行する政府は、その情報が正確であり、あなたがその書類を使用したり入手したりする権利を持っていることを時々確認できるようにしたいと考えています。

有効期限がなければ、証明書は無期限に機能することとなり、鍵の背後にあるアイデンティティが古くなるにつれて、疑わしくなってしまいます。会社やドメインが変わり、再登録されたり、これらの証明書を持っている可能性のある従業員が退職したりすることがあります。2010年に発行された証明書を、発行された人がまだ持っていると信じられますか?2000年に発行された証明書はどうですか?

失効は、証明書が信頼できなくなったことを示す追加の仕組みですが、証明書を無効にする主な方法として失効に頼ることができない理由は数多くあります(パフォーマンス、クライアントソフトウェアでの失効ステータスチェックの欠如、可用性など)。

証明書が失効する理由は他にもいくつかあります。それは、証明書が侵害された場合に、その証明書が悪意を持って使用される時間を限定し、証明書を新しい鍵ペアで再発行する機会を提供すること(ベストプラクティス)、新しい署名アルゴリズムやより強力な鍵などの最新の暗号化手法にアップグレードすることです。

UP NEXT

特集記事

クラウド上で量子コンピュータをいかに保護するか

NIST PQC アルゴリズムに関する詳細な説明

従来の PKI がもたらす割高な機会損失