暗号化とは?データを暗号文に変える
暗号化とは、読み取り可能なデータを鍵を使って暗号文に変換し、正しい鍵を持つ者だけが元に戻せるようにするものです。
暗号化はデータ保護の基盤です。それは情報を鍵でスクランブルし、その鍵がなければ意味をなさない暗号文にします。CI のシークレットから、パイプラインとクラウド API の間のトラフィックまで、あらゆるものが暗号化に依存しています。それを理解すると、なぜシークレットが保管時に安全なのか、なぜ HTTPS が転送中の認証情報を保護するのかが明確になります。
暗号化の仕組み
アルゴリズムがあなたのデータ(平文)を鍵と組み合わせて暗号文を生成します。それを元に戻す(復号する)には、適切な鍵が必要です。セキュリティは鍵の秘匿性に依存しており、アルゴリズムの秘匿性には依存しません。アルゴリズムは公開されており、よく研究されています。
2 つの大きなファミリー
- 対称: 同じ鍵で暗号化と復号を行う。高速で、大量のデータに使用される。
- 非対称: 公開鍵と秘密鍵のペア。鍵交換と署名に使用される。
- 実際のシステムは、速度と安全な鍵配布のために両方を組み合わせる。
保管時と転送中
保管時の暗号化は、vault 内のシークレットや bucket 内の artifact のような保管データを保護します。転送中の暗号化は、パイプラインが HTTPS 経由で API を呼び出すような、ネットワーク上を移動するデータを保護します。堅牢なシステムは両方を適用します。
CI/CD における暗号化
CI のシークレットストアは認証情報を保管時に暗号化された状態で保持し、job に注入するときにのみ復号します。ソースホスト、registry、クラウドプロバイダーへのパイプライントラフィックは転送中に暗号化されます。暗号化は、保管されたシークレットがディスクに到達した者に読み取られないようにするものです。
鍵が弱点
暗号化は鍵管理と同じ強さしか持ちません。漏洩した鍵はすべての保護を無効にします。だからこそ鍵は専用システムに保管され、ローテーションされ、時にはハードウェアで守られます。鍵を失うことは、データを永遠に失うことを意味する場合もあります。
暗号化と runner
シークレットは使用するために runner 上で復号されるため、runner はその一生における機微な瞬間です。ephemeral で隔離された runner(Latchkey の managed runner など)は、job が終了するときにその復号された値を環境とともに破棄します。
重要なポイント
- 暗号化は、平文を、正しい鍵だけが元に戻せる暗号文に変えます。
- 対称暗号化と非対称暗号化は、実際のシステムでは組み合わされます。
- セキュリティは鍵管理に依存します。鍵が漏洩すれば保護は無効になります。