BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GitHubはトークンフォーマットを変更して、識別性、シークレットスキャン、エントロピーを改善

GitHubはトークンフォーマットを変更して、識別性、シークレットスキャン、エントロピーを改善

原文(投稿日:2021/04/14)へのリンク

GitHubは最近、すべてのトークンについて新しいフォーマットに移行した。トークンには、パーソナルアクセストークン、OAuthアクセストークン、ユーザtoサーバトークンとサーバtoサーバトークン、リフレッシュトークンがある。GitHubのエンジニアであるHeather Harvey氏の説明によると、新しいフォーマットは、リポジトリでシークレットをスキャンする場合などに、トークンをより簡単に識別できるようにし、コラボレーションを増やすことを目的としている

GitHubは、さまざまなトークンを使用してAPIへのアクセスを制御する。パーソナルアクセストークンは、ユーザ名とパスワードを使用する代わりに認証に使用する。OAuthアクセストークンは、Webブラウザにアクセスできないアプリに対してOAuth 2.0プロトコルを実装する。GitHubアプリのUser-to-ServerトークンGitHubアプリのServer-to-Serverトークンは、ユーザに代わってGitHubアプリのリポジトリへのアクセスを許可するために使用される。リフレッシュトークンは、User-to-Serverトークンをリフレッシュするために使用される。

外からは、トークンフォーマットの変更は非常に小さいように見える。新しい3文字のプレフィックスのみがあり、許可されている文字セットが拡張されている。しかし、これらの変更は、いくつかの望ましい特性につながるとHarvey氏は言っている。

まず、新しい3文字のプレフィックスにより、トークンの識別可能性が向上する。たとえば、ghpプレフィックスはGitHubパーソナルアクセストークンで使用され、ghoはOAuthアクセストークンのプレフィックスとして使用される。トークンプレフィックスの最初の2文字はトークンを作成した会社を示し、3番目の文字はトークンの種類を示す。GitHubで使用されている他のプレフィックスは、User-to-Serverトークンの場合はghu、Server-to-Serverトークンの場合はghs、リフレッシュトークンの場合はghrである。

このプレフィックスによってだけでも、シークレットスキャンの誤検知率は0.5%に低下すると予想されます。

あまり目立っていないが、GitHubは、トークンの最後の6文字を32ビットチェックサムに使用することも決定した。シークレットスキャンの信頼性をさらに高めることを目的としている。

標準のチェックサムアルゴリズムであるCRC32アルゴリズムから実装を開始します。次に、必要に応じて0パディングを使って、Base62実装で結果をエンコードします。

3文字のプレフィックス、アンダースコアセパレータ、チェックサムを考慮すると、トークンに対して利用できる長さが10文字短くなり、作成できる一意のトークンの数に悪影響を及ぼす。これに対抗するために、GitHubは、トークンの長さを同じに保ちながら、トークンに許可される文字セットを拡張した。以前の文字セットでは16進数の表現しかできなかったが、新しい文字セットには小文字と大文字、および0から9までの10進数が含まれる。これらすべての変更の結果、GitHubトークンのエントロピーが高くなった。たとえば、OAuthトークンの場合、エントロピーは160から178になった。

これらの変更は、ユーザとインテグレーターに対して完全に公開されている。ただし、ユーザがパーソナルアクセスとOAuthトークンをリセットして、今すぐ新しいフォーマットを使用することを希望するかどうかは別である。ただし、GitHubは、2021年6月1日以降、最大255文字のトークンをサポートする計画も発表した。これにより、インテグレーターはトークンに対して特定のサポートを追加する必要が生じる可能性がある。

この記事に星をつける

おすすめ度
スタイル

BT