ベストプラクティス 06-16-2021

秘密鍵を共有すべきでない理由

Dave Roche

鍵の管理は、ソフトウェアの署名を安全に保つための重要な要素です。秘密の署名鍵が悪用された場合、ブランドの評判に計り知れないダメージを与え、エンドユーザーにも影響を与える可能性があります。でもご安心ください。セキュリティを強化する簡単な方法はあります。ソフトウェア開発チームとDevOpsチームの間で秘密鍵を共有する行為は、リスクを飛躍的に増大させるため、やめる必要があります。

利便性とセキュリティ

当然のことながら、開発者にとっては、チーム内で秘密鍵を共有する方が便利です。しかし便利だからといって安全であるとは限りません。秘密鍵を共有する理由は、多くのチームが鍵の配布問題を抱えているからです。複数のチームメイトがコードを署名し、できるだけ早くビルドをリリースするために同じキーを必要とする場合があります。一般的には、管理者が証明書を発注し、実際にコードに署名する別のチームメンバーにキーを渡さなければなりません。しかし、その開発者がオフィスを離れたり、万が一に備えてバックアップを取るために他の人に渡したりすると、突然、秘密鍵がチーム全体で共有され、複数の場所に存在することになってしまいます。問題は、秘密鍵が共有されればされるほど、意図的または非意図的な被害に対するリスクが増大してしまうことです。

秘密鍵を共有するリスクに見合う価値はありません。秘密鍵を紛失した場合、評判の低下や経済的損失の可能性はもちろんのこと、優先プロジェクトからチームメンバーを引き離して修復作業を行うなど、生産性に影響を与えます。例えば、Androidは、秘密鍵を紛失した古いバージョンのアプリを信用しません。つまり、企業がAndroidの秘密鍵を紛失した場合、エンドユーザーは既存のアプリをアップデートするのではなく、新しいアプリをダウンロードしなければなりません。

共有された秘密鍵が脆弱な理由

秘密鍵を共有すると、鍵が盗まれる可能性が出てきます。盗まれた鍵は、脆弱性のある署名入りソフトウェアや、企業名を記載したマルウェアの配布を意味します。それは玄関の鍵のようなもので、常に信頼できる人だけに守られていることを確認したいものです。共有された秘密鍵は、輸送中に紛失したり、悪用されたりする可能性があります。さらに、誰もが同じ署名キーのローカルコピーを持っている場合、誰がいつ何に署名したのかを追跡する方法がありません。

第一に、開発者は秘密鍵を最も安全な方法で渡していないかもしれません。秘密鍵をウェブサーバやビルドサーバ、ソースコードリポジトリに置いたり、USBトークンに入れたりすることもできますが、ユーザーがUSBドライブを消し忘れても秘密鍵は残っており、悪人の手に渡ってしまう可能性があります。

第二に、共有された秘密鍵が意図せず、あるいは意図的に失われたり盗まれたりする可能性があります。例えば、ハードディスクに秘密鍵を保存している開発者が、公共の場でノートパソコンを紛失した場合、誰かがそのノートパソコンにアクセスすると、その秘密鍵は漏洩してしまいます。また、開発者が会社を辞めた場合、誤って、あるいは意図的に秘密鍵のコピーを持ち出す可能性があります。悪用されると、不満を持った従業員が個人的な目的で、その秘密鍵をコピー&ペーストしたり、マルウェアを使って署名し、故意に以前の会社に損害を与えたりする可能性があります。

鍵管理のベストプラクティス

開発者は資産を共有し、お互いをカバーする必要がありますが、共有された秘密鍵はそのための最良の方法ではありません。一つの方法は、専用のHSMを使用することですが、このソリューションは効果的ですが、3年から5年ごとに定期的なメンテナンスと交換が必要になります。もう一つの解決策は、複数の鍵を要求して各開発者がそれぞれの鍵を持つようにすることですが、これは証明書要求者のコストと負担を飛躍的に増大させます。鍵を安全に管理するための最もシンプルな方法は、鍵管理のコントロールとセキュリティを向上させる最新の鍵管理ソリューションを使用することです。

最新のソリューションでは、署名鍵の使用の管理、鍵のローテーションの使用、管理者と開発者の職務の分離など、鍵管理のベストプラクティスに従っており、その管理機能と監査機能によって、どの鍵がどのようなコードに署名したか、誰が使用したかを追跡できるようになります。

鍵管理の最新化

秘密鍵の管理に関しては、これまで開発者はセキュリティと利便性をトレードオフしなければならず、利便性の高い秘密鍵の共有を選択することが多くありました。しかし最新のソリューションを使えば、このような失敗を避けることができます。また開発者は必要なときに秘密鍵を自由に使うことができるので、ソフトウェア製品の開発や販売に専念することができます。

DigiCert ONE™をベースに開発されたSecure Software Managerは、利便性とセキュリティのバランスがとれた、コードサイニング鍵管理のための包括的なソリューションです。これは、秘密鍵を共有するという間違いや、その他多くのコードサイニングの誤った利用法を避けるために設計されています。Secure Software Managerには、鍵をオフラインモードにする機能があり、事前に許可を得ないと鍵を使用できないようになっています。管理者は、誰がいつアクセスできるかを管理し、スケジュールを組んだり、手動で秘密鍵をリリースウィンドウに公開したりすることができますが、その際には、そのような活動を許可すべき人の承認が必要です。

また、Secure Software Managerは、コード署名の「誰が」「何を」「いつ」を制御し、可視化します。管理者は、権限を設定し、個人やチームに基づいて鍵の使用状況をマッピングすることで、どこで鍵が使用され、誰が何に署名しているかを管理することができます。さらに、誰かがチームを離れたり、加わったりしても、アクセスを簡単に更新することができます。玄関の鍵を無防備にしておくことはありませんし、秘密鍵も無防備にしておくことはありません。

Secure Software Managerの詳細

Secure Software Managerは、ポータブルで柔軟な展開モデルとセキュアな鍵管理により、継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインにおける自動化されたセキュリティを可能にし、コード署名を管理する最新の方法です。

Secure Software Managerは、プライベート署名、オンデマンドキー、ローテーションキーのための署名ごとのユニークキーや証明書など、コード署名のベストプラクティスをサポートしています。Docker、Microsoft、Java、Androidなどの主要なプラットフォームやライブラリと互換性があります。Secure Software Managerを使用することで、企業は製品開発プロセスにコードを簡単に統合することができ、同時に暗号操作、署名活動、管理を制御された監査可能な方法で委任することができます。

DigiCert ONE™の一部であるSecure Software Managerは、大量の証明書を数分で迅速に導入できるほか、オンプレミス、国内、クラウドのいずれにも柔軟に対応することができます。Secure Software Managerの詳細については、digicert.com/jp/signing/secure-software-managerをご覧ください。

UP NEXT
アイデンティティ

ワクチンパスポートは、デジタルアイデンティティをどのように変えることができるか

5 Min

特集記事

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

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

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