web-dev-qa-db-ja.com

プライベートキーをソース管理にいつコミットできますか?

つまり、暗号化されていないキーペアをSVNやGitなどの内部ソース管理にコミットするのはどのような場合に意味がありますか?

暗号化された秘密鍵について説明する関連質問: 暗号化された秘密鍵をソース管理に追加することは悪い習慣ですか?

28
Nathan Basanese

一般に、コードとシークレット構成(パスワード、キーなど)を同じリポジトリに混在させることは悪い考えです。一般に、特定のシークレットへのアクセスよりも多くの人がコードへのアクセスを必要とする(または少なくとも恩恵を受ける)ためです。また、VCSシステムの一般的なワークフローは、大量のコピーを作成することです。

これは、VCSにシークレット構成を配置できないという意味ではありませんが、コードとは別のリポジトリである必要があり、そのアクセスは非常に厳しく制御されている必要があります。

38
Peter Green

秘密キーが、秘密キーを必要とするいくつかのプロセスをテストするために使用されるテストフィクスチャにすぎず、システムを保護するために実際には使用されていない場合。

someの場合、encryptedキーをコミットすることが適切な場合があります。たとえば、リポジトリがパブリック/オープンソースであるが、継続的インテグレーションシステムがそのファイルへのアクセスを必要とする場合 Travis CIはこれをサポートしています

それ以外の場合は、秘密鍵をコミットしないでください。

46
thexacre

私はあなたがあなた自身に尋ねる必要があると思います:

キーが危険にさらされた場合、それを検出できますか?

そして

取り消しプロセスは他の人にどのように影響しますか?

例:内部ソース管理リポジトリが会社の境界の外にある場合はどうなりますか。開発者のラップトップを介して?このラップトップが盗まれた場合はどうなりますか?コピーを作成して個人のラップトップに保管するのが不満の従業員である場合はどうなりますか?

言い換えれば、キーを使用してpublicリソースにアクセスできますか?アクセスできる場合、どのような損害がありますか?

開発プラクティスで秘密鍵の共有が必要な場合、それは当然のことながら秘密鍵ではありません。これが発生している理由、およびユーザーごとのアクセストークン(oAuth、APIキーなど)と他のソリューションのどちらを検討する必要があるかについて検討する必要がある場合があります。

12
lorenzog

この答えはまだ与えられていないので、私はする必要があるようです:

決してこれまで。本当にnever

すでに指摘したように、定義上、秘密鍵は秘密にしておく必要があります。しかし、ソース管理は情報を共有して利用できるようにするために行われます(おそらく限られた対象者向けですが、とにかく)。

これを実行する理由は、必要なプロセスを実行していないためです。毎回のテスト実行後に消去される一部のテストシステムでそのキーを使用するつもりでも、意図は強制されません。意図は時間とともに減衰し、ある時点でキーが本番環境で使用されます。

3
SpaceTrucker

Man in the Middleの攻撃などの暗号分析を行う場合、通常、その知識によって当事者を定義します。したがって、アリスがボブと話し、ボブがメッセージがアリスから来たことを信頼できるようにする手法は、アリスを「アリスが知っているすべての重要なことを知っている人」であると定義します。

秘密鍵をリポジトリに配置することで、すべてのセキュリティ分析を実行する必要があります。ここで、秘密鍵は「リポジトリをダウンロードしたり、コピーを取得したりできるすべての人」に対する秘密鍵になりました。

そのレベルのセキュリティで秘密鍵が十分である場合は、それをリポジトリに配置できます。それ以外の場合、リポジトリに置くと、秘密鍵の配布がそれよりも狭いことに依存していたセキュリティ証明が無効になります。

2
Cort Ammon