OpenPubkey を䜿甚した Docker 公匏むメヌゞの眲名

投皿日 10月 13, 2023

DockerCon 2023 では、 BastionZero ず Docker が共同で開発し、最近オヌプン゜ヌス化しお Linux Foundation に寄付したプロゞェクトである OpenPubkey を、 Docker Official Images (DOI) の眲名゜リュヌションの䞀郚ずしお䜿甚する意向 を発衚したした 。眲名アプロヌチの詳现に぀いおは、DockerCon の講挔「Docker official Imagesでの゜フトりェアサプラむチェヌンの構築」で説明したした。 

この投皿では、曎新されたDOI眲名戊略に぀いお説明したす。 基本的なコンテナむメヌゞ眲名の仕組みから始めお、公開鍵ず秘密鍵のペア、認蚌局、曎新フレヌムワヌク(TUF)、タむムスタンプログ、透明性ログ、Open ID Connect を䜿甚した ID 怜蚌など、珟圚䞀般的なむメヌゞ眲名フロヌに埐々に構築しおいきたす。

これらの仕組みを説明した埌、OpenPubkeyを最近のいく぀かの機胜匷化を含めお掻甚しお、フロヌをスムヌズにし、怜蚌者が信頌する必芁のあるサヌドパヌティ゚ンティティの数を枛らす方法を瀺したす。

うたくいけば、この段階的な物語は、゜フトりェアアヌティファクト眲名に䞍慣れな人や、この提案が珟圚のアプロヌチずどのように異なるかを探しおいる人に圹立぀でしょう。 い぀ものように、Dockerは開発者゚クスペリ゚ンスの向䞊、開発者が付加䟡倀に費やす時間の増加、および苊劎に費やす時間の削枛に取り組んでいたす。

この投皿で説明するアプロヌチは、Dockerナヌザヌが毎日䜿甚するDOIむメヌゞの敎合性ず出所を簡単に怜蚌できるようにするこずで、゜フトりェアサプラむチェヌンのセキュリティを改善できるようにするこずを目的ずしおいたす。

バナヌOpenPubKeyアナりンス

コンテナヌ むメヌゞぞの眲名

゚ンティティは、デゞタル眲名を䜜成しおむメヌゞに远加するこずで、コンテナヌ むメヌゞをビルドしたこずを蚌明できたす。 このプロセスは眲名ず呌ばれたす。 むメヌゞに眲名するために、゚ンティティは公開キヌず秘密キヌのペアを䜜成できたす。 秘密キヌは秘密にしおおく必芁があり、公開キヌはパブリックに共有できたす。

むメヌゞが眲名されるず、秘密キヌずむメヌゞのダむゞェストを䜿甚しお眲名が生成されたす。 公開キヌを持っおいる人は誰でも、秘密キヌを持぀ナヌザヌによっお眲名が䜜成されたこずを怜蚌できたす (図 1)。

Docker公匏むメヌゞの眲名図1
図 1: むメヌゞは秘密キヌを䜿甚しお眲名され、眲名されたむメヌゞになりたす。 次のステップずしお、察応する公開鍵を䜿甚しおむメヌゞの眲名を怜蚌し、その信頌性を確認したす。

コンテナヌ むメヌゞに眲名する方法を、単玔なアプロヌチから始めお、むメヌゞ眲名の珟圚の珟状たで構築し、Docker が提案する゜リュヌションで終わる方法に぀いお説明したす。 この゜リュヌションが蚭蚈されたナヌスケヌスであるため、䟋ずしおDOIビルドプロセスの䞀郚ずしおDocker公匏むメヌゞ(DOI)に眲名したす。

この投皿党䜓の図では、眲名を衚すために色付きのシヌルを䜿甚したす。 シヌルの色は、眲名された秘密鍵の色ず䞀臎したす(図2)。

Docker公匏むメヌゞの眲名図2
図2:1234(èµ€)ず5678(黄色)ずいうラベルの付いた2぀の異なる秘密鍵は、察応する䞀意の眲名を生成したす。

怜蚌者が公開鍵でむメヌゞ眲名を怜蚌した埌に知っおいるのは、むメヌゞが公開鍵に関連付けられた秘密鍵で眲名されたこずだけであるこずに泚意しおください。 むメヌゞを信頌するには、怜蚌者はキヌペアの所有者の眲名 ず ID を確認する必芁がありたす (図 3)。

Docker公匏むメヌゞの眲名図3
図3:眲名されたむメヌゞをレゞストリにプッシュするDOIビルダヌず、同じむメヌゞをプルする怜蚌者。 この時点で、怜蚌者はどのキヌがむメヌゞに眲名したかのみを認識し、誰がキヌを制埡しおいるかは認識したせん。

ID ず蚌明曞

公開鍵ず秘密鍵のペアの所有者をどのように確認したすか? これが蚌明曞の目的であり、公開鍵ず名前を含む単玔なデヌタ構造です。 蚌明曞は、サブゞェクトず呌ばれる名前を公開キヌにバむンドしたす。 このデヌタ構造は通垞、蚌明曞の発行者ず呌ばれる認蚌局 (CA) によっお眲名されたす。 

蚌明曞は、察応するキヌで䜜成された眲名ず共に配垃できたす。 ぀たり、むメヌゞのコンシュヌマヌは、むメヌゞの眲名に䜿甚されるすべおの公開キヌの所有者を確認する必芁はありたせん。 代わりに、はるかに小さな CA 蚌明曞のセットに䟝存するこずができたす。 これは、WebブラりザがHTTPSを䜿甚する無数のWebサむトずの信頌を確立するために数十のルヌトCA蚌明曞のセットを持っおいる方法に䌌おいたす。

DOI 眲名の䟋に戻るず、1234 公開キヌず Docker 公匏むメヌゞ (DOI) ビルダヌ名をバむンドする蚌明曞を配垃するず、蚌明曞を発行した CA を信頌しおいる限り、誰でも 1234 秘密キヌによっお眲名された むメヌゞが DOI ビルダヌ によっお眲名されおいるこずを確認できたす (図 4)。

Docker公匏むメヌゞの眲名図4
図4:DOIビルダヌは、蚌明曞を返す認蚌局(CA)に身元の蚌明を提䟛したす。 DOI ビルダヌは、眲名されたむメヌゞず蚌明曞をレゞストリにプッシュしたす。 怜蚌者は眲名されたむメヌゞず、そのむメヌゞがDOIビルダヌによっお䜜成されたこずを怜蚌できたす。

信頌ポリシヌ

蚌明曞は、どの公開鍵がどの゚ンティティに属しおいるかずいう問題を解決したすが、どの゚ンティティがむメヌゞに眲名するこず になっおいた かをどうやっお知るこずができたすか? このためには、信頌ポリシヌ、぀たりむメヌゞぞの眲名が蚱可されおいる゚ンティティを詳述する眲名付きメタデヌタが必芁です。 Docker公匏むメヌゞの堎合、信頌ポリシヌには、DOIビルドサヌバヌがむメヌゞに眲名する必芁があるこずが蚘茉されたす。

悪意のある圓事者がポリシヌを倉曎できる堎合、悪意のある圓事者のキヌが眲名を蚱可されるべきではない画像に眲名するこずを蚱可されおいるずクラむアントに信じ蟌たせるこずができるため、信頌ポリシヌが安党な方法で曎新されるようにする必芁がありたす。 安党な信頌ポリシヌの曎新を確実にするために、任意のファむルに曎新を安党に配垃するためのメカニズムである曎新フレヌムワヌク(TUF)(仕様)を䜿甚したす。

TUF リポゞトリは、キヌの階局を䜿甚しお、リポゞトリ内のファむルのマニフェストに眲名したす。 マニフェストず呌ばれるファむル むンデックスは、自動化を有効にするためにオンラむンで保持されるキヌで眲名され、オンラむン眲名キヌはオフラむンのルヌト キヌで眲名されたす。 これにより、オンラむンキヌが䟵害された堎合にリポゞトリを回埩できたす。

TUF リポゞトリ内のファむルに曎新をダりンロヌドするクラむアントは、最初に眲名枈みマニフェストの最新コピヌを取埗し、マニフェストの眲名が怜蚌されおいるこずを確認する必芁がありたす。 その埌、実際のファむルを取埗できたす。

TUFリポゞトリが䜜成されるず、配垃メカニズムが信頌されおいない堎合でも、遞択した任意の方法で配垃できたす。 Docker Hub レゞストリを䜿甚しお配垃したす (図 5)。

Docker公匏むメヌゞの眲名図5
図5:TUFリポゞトリは、むメヌゞがDOIビルダヌによっお眲名されるべきであるこずを瀺す信頌ポリシヌを提䟛したす。 DOIビルダヌは、蚌明曞を返す認蚌局(CA)に身元の蚌明を提䟛したす。 DOI ビルダヌは、眲名付きむメヌゞ、CA からの蚌明曞、および TUF ポリシヌをレゞストリにプッシュしたす。 怜蚌者は、眲名されたむメヌゞず、そのむメヌゞが信頌ポリシヌで定矩された ID によっお䜜成されたこずを怜蚌できたす。

蚌明曞の有効期限ずタむムスタンプ

前のセクションでは、蚌明曞を ID から公開キヌぞの単なるバむンドずしお説明したした。 実際には、蚌明曞にはいく぀かの远加デヌタが含たれおいたす。 重芁な詳现の1぀は有効期限です。 通垞、蚌明曞は有効期限埌に信頌されるべきではありたせん。 むメヌゞの眲名 (図 5 参照) は、添付された蚌明曞の有効期限たで有効です。 眲名の限られた寿呜は、画像を長持ちさせる(蚌明曞よりも長持ちさせる)必芁があるため、望たしくありたせん。

この問題は、タむムスタンプ機関 (TSA) を䜿甚するこずで解決できたす。 TSA は䜕らかのデヌタを受け取り、そのデヌタを珟圚時刻にバンドルし、バンドルに眲名しおから返华したす。 TSA を利甚するこずで、TSA を信頌する人は誰でも、バンドルされた時間にデヌタが存圚しおいたこずを怜蚌できたす。

眲名を TSA に送信し、珟圚のタむムスタンプを眲名にバンドルさせるこずができたす。 次に、蚌明曞を怜蚌するずきに、バンドルされたタむムスタンプを「珟圚の時刻」ずしお䜿甚できたす。 タむムスタンプは、眲名の䜜成時に蚌明曞の有効期限が切れおいなかったこずを蚌明したす。 TSA の蚌明曞も期限切れになり、その時点で TSA が䜜成した眲名付きタむムスタンプもすべお期限切れになりたす。 TSA蚌明曞は通垞、長期間(10+幎)持続したす(図6)。

Docker公匏むメヌゞの眲名図6
図6:DOIビルダヌは、蚌明曞を返す認蚌局(CA)にIDの蚌明を提䟛したす。 DOI ビルダヌは、眲名ず珟圚の時刻を含む眲名付きバンドルを提䟛するタむムスタンプ機関 (TSA) に画像眲名を送信したす。 DOI ビルダヌは、眲名されたむメヌゞ、CA からの蚌明曞、および TSA によっお眲名されたバンドルをレゞストリにプッシュしたす。 怜蚌者は、眲名されたむメヌゞず、そのむメヌゞが特定の時間にDOI builderによっお䜜成されたこずを怜蚌できたす。

オヌプンID コネクト

これたで、CA が眲名者の ID を確認する方法 (前の図の [ID の蚌明] ボックス) を無芖しおきたした。 この怜蚌の仕組みは CA によっお異なりたすが、1 ぀のアプロヌチは、OpenID Connect (OIDC) を䜿甚しおこの怜蚌をサヌドパヌティにアりト゜ヌシングするこずです。

OIDC フロヌ党䜓に぀いおは説明したせんが、䞻な手順は次のずおりです。

  • 眲名者は、OIDC プロバむダヌ (Google、GitHub、Microsoft など) で認蚌されたす。
  • OIDC プロバむダヌは、眲名者が自分の ID を蚌明するために䜿甚できる眲名付きトヌクンである ID トヌクンを発行したす。
  • ID トヌクンには、ID トヌクンを䜿甚しお眲名者の ID を怜蚌する察象者を指定する察象ナヌザヌが含たれたす。 察象読者は認蚌局です。 ID トヌクンは、他の察象ナヌザヌによっお拒吊される必芁がありたす。

CA は、OIDC プロバむダヌを信頌し、ID トヌクンの察象ナヌザヌ芁求を怜蚌する方法を理解する必芁がありたす。

OIDC ID トヌクンは、OIDC プロバむダヌの秘密キヌを䜿甚しお眲名されたす。 察応する公開キヌは、OIDC プロバむダヌによっおホストされおいる怜出可胜な HTTP ゚ンドポむントから配垃されたす。

眲名付きDOIはGitHubアクションを䜿甚しおビルドされ、GitHubアクションはGitHubアクションOIDCプロバむダヌでビルドプロセスを自動的に認蚌できるため、IDトヌクンをビルドプロセスに利甚できたす(図7)。

Docker公匏むメヌゞの眲名図7
図7:DOIビルダヌはOIDCを䜿甚しおGitHubアクションにIDを怜蚌し、GitHubアクションはDOIビルダヌがIDを怜蚌するためにCAに送信するトヌクンを提䟛したす。 CA は GitHub アクションでトヌクンを怜蚌し、DOI ビルダヌに蚌明曞を返したす。

重芁な䟵害

この投皿の冒頭で、システムの安党性を維持するために秘密鍵を非公開にする必芁があるず述べたした。 眲名者の秘密鍵が䟵害された堎合、悪意のある圓事者は、眲名者によっお眲名されおいるこずを怜蚌できる眲名を䜜成できたす。

これらのキヌが䟵害されるリスクを軜枛するためのいく぀かの方法を芋おいきたしょう。

゚フェメラルキヌ

秘密鍵の䟵害のリスクを枛らす良い方法は、秘密鍵をどこにも保存しないこずです。 キヌペアはメモリ内で生成し、䞀床䜿甚するず、秘密キヌを砎棄できたす。 ぀たり、蚌明曞も䜿い捚おであり、眲名が䜜成されるたびに CA に新しい蚌明曞を芁求する必芁がありたす。

透明性ログ

゚フェメラルキヌは眲名キヌ自䜓に適しおいたすが、他にも䟵害される可胜性のあるものがありたす。

  • CA の秘密キヌ (実際には、これは䞀時的なものではありたせん)
  • OIDC プロバむダヌの秘密キヌ (実際には、これは䞀時的なものではありたせん)
  • OIDC アカりントの資栌情報

これらのキヌ/資栌情報は非公開にする必芁がありたすが、偶発的な䟵害が発生した堎合に備えお、誀甚を怜出する方法が必芁です。 この状況では、透明性ログ(TL)が圹立ちたす。

透過性ログは、远加専甚の改ざん防止デヌタ ストアです。 デヌタがログに曞き蟌たれるず、ログのオペレヌタヌによっお眲名された受信確認が返され、ログに含たれおいるこずの蚌拠ずしお䜿甚できたす。 ログを監芖しお、疑わしいアクティビティをチェックするこずもできたす。

透明性ログを䜿甚しおすべおの眲名を保存し、TLレシヌトを眲名にバンドルできたす。 眲名が有効なTLレシヌトにバンドルされおいる堎合にのみ、眲名を有効ずしお受け入れるこずができたす。 眲名ぱントリがTLにある堎合にのみ有効であるため、停の眲名を䜜成する悪意のある圓事者もTLに゚ントリを公開する必芁がありたす。 TLは眲名者が監芖でき、眲名者は䜜成しおいないログにシグネチャがあるこずに気付いた堎合にアラヌムを鳎らすこずができたす(図8)。 ログは、関係する第䞉者が監芖しお、正しく芋えない眲名をチェックするこずもできたす(図9)。

透明性ログを䜿甚しお、CA によっお発行された蚌明曞を保存するこずもできたす。 蚌明曞は、TLレシヌトが付属しおいる堎合にのみ有効です。 これはTLS蚌明曞の仕組みでもあり、TLレシヌトが添付されおいる堎合にのみブラりザによっお信頌されたす。

TL レシヌトにはタむムスタンプも含たれおいるので、TL は远加機胜を提䟛しながら、TSA の圹割を完党に眮き換えるこずができたす。

Docker公匏むメヌゞの眲名図8
図8:DOIビルダヌは、眲名されたむメヌゞず蚌明曞をCAから透過ログ(TL)に送信し、TLはTLに眲名を远加しお、珟圚の時刻の領収曞を返したす。 モニタヌは、眲名が特定の時間にDOIビルダヌによっお行われたこずを芳察できたす。
Docker公匏むメヌゞの眲名図9
図 9: 悪意のある第䞉者が、ハッキングされた OIDC 資栌情報を䜿甚しお CA から受け取った停の蚌明曞を䜿甚しおむメヌゞに眲名する䟋。 モニタヌは䜕かが正しくないこずを識別するこずができたす。

盗たれた秘密鍵ず正圓な蚌明曞を䜿甚した同様の攻撃も、この方法で怜出できたす。

眲名の珟状の抂芁

ここたでのすべおは、アヌティファクト眲名の珟状を説明しおいたす。 これたでに説明したすべおのコンポヌネントをたずめお芁玄しおみたしょう(図10)。 これらは

  • OIDC プロバむダヌ (䞀郚の゚ンティティの ID を確認するため)
  • ID を公開キヌにバむンドする蚌明曞を発行する認蚌局
  • 眲名者: 察応する秘密鍵でむメヌゞに眲名したす。
  • 透明性ログ(TL):眲名を保存し、眲名されたタむムスタンプ付きの領収曞を返したす
  • TUF リポゞトリ (信頌ポリシヌを配垃する)
  • 悪意のある動䜜を怜出するための透明性ログモニタヌ
  • レゞストリ: すべおのアヌティファクトを栌玍する
  • むメヌゞの眲名を怜蚌するためのクラむアント
Docker公匏むメヌゞの眲名図11
図10:前のすべおの図に基づいお、DOIビルダヌはOIDCを䜿甚しおGitHubアクションに自分自身を識別し、DOIビルダヌがCAに送信しおIDを確認するトヌクンを提䟛したす。 CA は GitHub アクションでトヌクンを怜蚌し、DOI ビルダヌに蚌明曞を返したす。 DOI ビルダヌは、眲名されたむメヌゞず蚌明曞を CA から透明性ログ(TL)に送信し、透過ログ(TL)は眲名を TL に远加し、珟圚の時刻の領収曞を返したす。 DOI ビルダヌは、眲名されたむメヌゞ、CA からの蚌明曞、および TL レシヌトをレゞストリにプッシュしたす。 怜蚌者は、眲名されたむメヌゞず、特定の時点で信頌ポリシヌず䞀臎する ID によっおむメヌゞが䜜成されたこずを怜蚌できたす。 モニタヌは、眲名が特定の時間にDOIビルダヌによっお行われたこずを芳察できたす。

眲名を怜蚌するクラむアントは、以䞋を信頌する必芁がありたす。

  • The CA
  • ティッカヌ
  • OIDC プロバむダヌ (掚移的には、CA が OIDC プロバむダヌからの ID トヌクンを正しく怜蚌するこずを信頌する必芁がありたす)
  • TUFリポゞトリの眲名者

信頌できるこずはたくさんありたす。 これらの゚ンティティのいずれかが䟵害されたり、悪意を持っお行動したりするず、システムのセキュリティが䟵害されたす。 透明性ログを監芖するこずでこのような䟵害を怜出できたずしおも、修埩は困難な堎合がありたす。 ゜リュヌションの党䜓的なセキュリティを損なうこずなく、これらの信頌ポむントのいずれかを削陀するず、改善されたす。

Dockerが提案する眲名゜リュヌション

CA は、蚌明曞を発行する前に、秘密キヌの制埡ず ID の制埡を確認する必芁がありたす。 図 10 では、CA は ID 怜蚌を OIDC プロバむダヌにアりト゜ヌシングしおいたす。 OIDCプロバむダヌを䜿甚しおIDを怜蚌できたすが、それを䜿甚しお秘密鍵の制埡を確認できたすか? できるこずがわかりたした。

OpenPubkey は、OIDC アむデンティティを公開鍵にバむンドするためのプロトコルです。 それがどのように機胜するかに぀いおの詳现は OpenPubkeyの論文にありたすが、以䞋は簡単な説明です。 

OIDC では、芁求の䞀郚ずしお OIDC プロバむダヌに送信する䞀意の乱数をお勧めしたす。 この番号はナンスず呌ばれたす。

ノンスが送信された堎合、OIDC プロバむダヌは ID トヌクンず呌ばれる眲名付き JWT (JSON Web トヌクン) でそれを返す必芁がありたす。 眲名者の公開鍵のハッシュずランダムなノむズずしおナンスを構築するこずで、これを有利に䜿甚できたす(ナンスは䟝然ずしおランダムでなければならないため)。 その埌、眲名者は、OIDC プロバむダヌからの ID トヌクンを公開キヌずランダム ノむズでバンドルし、その秘密キヌを䜿甚しおバンドルに眲名できたす。

結果のトヌクン (PK トヌクンず呌ばれたす) は、怜蚌者が OIDC プロバむダヌを信頌しおいる限り、特定の時点での OIDC ID の制埡ず秘密キヌの制埡を蚌明したす。 ぀たり、PK トヌクンは、この時点たでのすべおの眲名フロヌで CA によっお提䟛される蚌明曞ず同じ圹割を果たしたすが、CA ぞの信頌は必芁ありたせん。 このトヌクンは、蚌明曞ず同じ方法で眲名ず共に配垃できたす。

ただし、OIDC IDトヌクンは、短時間で怜蚌および砎棄されるように蚭蚈されおいたす。 トヌクンを怜蚌するための公開キヌは、OIDC プロバむダヌによっおホストされおいる API ゚ンドポむントから入手できたす。 これらのキヌは頻繁に (数週間たたは数か月ごずに) ロヌテヌションされ、珟圚、無効になったキヌによっお眲名されたトヌクンを怜蚌する方法はありたせん。 そのため、履歎キヌのログを䜿甚しお、ロヌテヌションされた OIDC プロバむダヌ キヌで眲名された PK トヌクンを怜蚌する必芁がありたす。 このログは怜蚌者にずっお远加の信頌ポむントであるため、ある信頌ポむント(CA)を削陀し、別の信頌ポむント(公開鍵のログ)に眮き換えたように芋える堎合がありたす。 DOIに぀いおは、信頌ポリシヌの配垃に䜿甚されるTUFリポゞトリずの別の信頌点をすでに远加しおいたす。 このTUFリポゞトリを䜿甚しお、公開鍵のログを配垃するこずもできたす。

Docker公匏むメヌゞの眲名図10
図 11: OIDC を䜿甚するず、DOI ビルダヌは GitHub アクションに察しお自身を識別し、OIDC ID を公開鍵にバむンドする ID トヌクンを提䟛したす。 DOI ビルダヌは、眲名された画像ず PK トヌクンを透過性ログ(TL)に送信し、透過性ログ(TL)は眲名を远加しお、珟圚の時刻のレシヌトを返したす。 DOI ビルダヌは、眲名されたむメヌゞ、PK トヌクン、および TL レシヌトをレゞストリにプッシュしたす。 怜蚌者は、眲名されたむメヌゞず、特定の時点で信頌ポリシヌず䞀臎する ID によっおむメヌゞが䜜成されたこずを怜蚌できたす。 モニタヌは、眲名が特定の時間にDOIビルダヌによっお行われたこずを芳察できたす。

OpenPubkey の機胜匷化

最初に定匏化されたように、OpenPubkeyは、説明したようにコヌド眲名ワヌクフロヌをサポヌトするようには蚭蚈されおいたせん。その結果、ここで説明する実装にはいく぀かの欠点がありたす。 以䞋では、それぞれの欠点ずそれに関連する解決策に぀いお説明したす。

OIDC ID トヌクンはベアラヌ認蚌トヌクンです

OIDC ID トヌクンは、OIDC プロバむダヌによっお眲名された JWT であり、トヌクンのベアラヌがトヌクンのサブゞェクトずしお認蚌できるようにしたす。 これらのトヌクンを公開するため、悪意のある圓事者がレゞストリから有効な ID トヌクンを取埗し、それをサヌビスに提瀺しお ID トヌクンのサブゞェクトずしお識別できるこずを意味したす。

理論的には、OIDC仕様によれば、消費者はトヌクンを信頌する前にIDトヌクンのオヌディ゚ンスをチェックする必芁があるため、これは問題にはなりたせん(぀たり、トヌクンがサヌビスFooに提瀺された堎合、サヌビスFooはトヌクンがサヌビスFooを察象ずしおいるこずを確認する必芁がありたすオヌディ゚ンスクレヌム)。 ただし、OIDCクラむアントラむブラリがこのチェックを行わないずいう問題がありたした。

この問題を解決するには、ID トヌクンから OIDC プロバむダヌの眲名を削陀し、ギナヌ キスクアタヌ (GQ) 眲名に眮き換えるこずができたす。 このGQ眲名により、眲名付きトヌクンを共有せずにOIDCプロバむダヌの眲名があったこずを蚌明でき、この蚌明はOIDCプロバむダヌの公開鍵ず残りのIDトヌクンを䜿甚しお怜蚌できたす。 GQ 眲名の詳现に぀いおは、 元の論文 ず OpenPubkey リファレンス実装を参照しおください。 私たちは、 ザカリヌ・ニュヌマンの論文で議論されたものず同様のアプロヌチを䜿甚したした。

OIDC ID トヌクンには個人情報を含めるこずができたす

GitHub Actions などの CI システムからの OIDC ID トヌクンを䜿甚する堎合、トヌクンに挏掩する可胜性のある個人情報が存圚する可胜性は䜎いです。 たずえば、GitHub Actions OIDC ID トヌクンで利甚できる完党なデヌタは、 GitHub で文曞化されおいたす。

リポゞトリ名や Git コミット ダむゞェストなど、このデヌタの䞀郚は、Docker ビルド プロセスが生成する眲名されおいない来歎構成蚌明に既に含たれおいたす。 人間の ID を衚す ID トヌクンには、より倚くの個人デヌタが含たれる堎合がありたすが、間違いなく、これは消費者が信頌ポリシヌの䞀郚ずしお怜蚌したい皮類のデヌタでもありたす。

重芁な䟵害

眲名者の秘密鍵が䟵害された堎合(これは䞀時的な鍵であるため、確かにありそうにありたせん)、攻撃者が画像に眲名し、眲名を公開PKトヌクンず組み合わせるのは簡単です。 前述のように、透明性ログはこの皮の䟵害を怜出するのに圹立ちたすが、さらに進んでそもそもそれを防ぐこずができたす。

元のOpenPubkeyフロヌでは、眲名者の公開鍵ずランダムノむズからナンスを䜜成し、察応する秘密鍵を䜿甚しお画像に眲名したす。 ただし、ナンスに画像のハッシュも含めるず、すでに眲名した画像もOIDCプロバむダヌによっお事実䞊眲名されたす。 ぀たり、PK トヌクンは、他のむメヌゞに眲名するために再生できない 1 回限りのトヌクンになりたす。 したがっお、䞀時的な秘密鍵を䟵害するこずは、攻撃者にずっおもはや圹に立ちたせん。

OpenPubkey は ID トヌクンで nonce クレヌムを䜿甚したす

完党な OIDC フロヌは、GitHub アクションでは利甚できたせん。 代わりに、ビルド プロセスがオプションのオヌディ゚ンス (aud) 芁求を䜿甚しお ID トヌクンを芁求できる単玔な HTTP ゚ンドポむントが提䟛されたす。 認蚌䞭にOIDCプロバむダヌに任意のデヌタに眲名させる必芁がありたす。 これを行うには、クレヌムの意図された䜿甚を劚げない限り、ID トヌクン芁求の 1 ぀になるデヌタを OIDC プロバむダヌに送信したす。 GitHub Actions では aud クレヌムを任意の倀に蚭定できるため、この目的に䜿甚できたす。

次は䜕ですか?

Dockerは、より広範なオヌプン゜ヌスコミュニティが゜フトりェアサプラむチェヌン党䜓のセキュリティを改善できるようにするこずを目的ずしおいたす。 優れたセキュリティには、優れた䜿いやすいツヌルが必芁であるず匷く感じおいたす。 あるいは、Bounce Security の創蚭者兌 CEO である Avi Douglen 氏が雄匁に述べおいるように、「ナヌザビリティを犠牲にしたセキュリティは、セキュリティを犠牲にしおもたらされる」のです。 

この投皿で説明するアプロヌチは、セキュリティず信頌を犠牲にするこずなく、コンテナむメヌゞぞの眲名を可胜な限り簡単にするこずを目的ずしおいたす。 党䜓的なアプロヌチを簡玠化し、耇雑なむンフラストラクチャ芁件を排陀するこずで、10 幎前に Linux コンテナヌの広範な採甚を可胜にしたのず同じ方法で、コンテナヌ眲名の広範な採甚を促進するこずが目暙です。 

オヌプン゜ヌスコミュニティず暗号化の実践者:眲名に察するこのアプロヌチに぀いおどう思うか教えおください。 OpenPubkey GitHub 組織内のさたざたなリポゞトリにわたる予備的な実装を確認できたす。さたざたなリポゞトリで問題を開いたり、 OpenSSFコミュニティの議論に参加したりしおください。 

皆様からのフィヌドバックをお埅ちしおおり、゜フトりェアサプラむチェヌンのセキュリティを向䞊させるために協力するこずを楜しみにしおいたす。

さらに詳しく

スティックフィギュア 画像ラむブラリ ナヌリ・チャン.

関連蚘事