オープン認証イニシアチブ

提供: ArchWiki
2024年8月16日 (金) 19:07時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎URI credential format: 飜訳)
ナビゲーションに移動 検索に移動

関連記事

オープン認証イニシアチブ (OATH)は、強力な認証の採用を促進するために、オープンスタンダードを使用したオープンなリファレンスアーキテクチャを開発するための業界全体の協力体制です。Google Authenticator やその他の一般的な2要素認証アプリケーションが使用する標準を公開しています。

インストール

以下のパッケージは、OATH 資格情報の生成、転送、および検証に使用できます。

  • oath-toolkit - 資格情報を受け取り、コードを生成します。ユーザー認証用の PAM モジュールが含まれています。詳細は pam_oath を参照してください。
  • libpam-google-authenticator - 新しい資格情報を生成するクライアントプログラム google-authenticator と、ユーザー認証用の PAM モジュールを提供します。詳細は Google Authenticator を参照してください。
  • pass-otp - pass に OATH サポートを追加します。
  • zbar - QR コードをデコードします。
  • qrencode - QR コードをエンコードします。

標準

OATH は、Arch ユーザーにとって重要な 2 つの標準を作成しました。どちらも任意の長さの Base32 エンコードされた共有シークレットに基づいています。

HOTP
HMAC(ハッシュベースのメッセージ認証コード)ワンタイムパスワード(HOTP)。パスワードが生成されるたびにカウンターが増加します。この値はシークレットキーと連結され、6~10 桁のコードを生成するためにハッシュされます。認証側も同様に処理しますが、コードが正常に認証されるとカウンターを増加させます。カウンターの非同期化を処理するために、認証側は現在のカウンター状態を超えて、さらに複数(30~100)の値をチェックすることができます。
TOTP
時間ベースのワンタイムパスワード(TOTP)。HOTP と非常によく似ていますが、カウンターの代わりに現在の時間を使用します。これにより、非同期化の問題が解決され、攻撃者が OTP を記録して後で使用する可能性が排除されます。

URI 資格情報フォーマット

資格情報は通常、QR エンコードされた URI フォーマットで共有されます。すべてのフィールドは URI エンコードされた文字列でなければなりません。

otpauth://TYPE/LABEL?PARAMETERS
警告: URI フォーマットされた資格情報およびそれから生成された QR コードには、有効なワンタイムパスワードを生成するために必要なすべての情報が含まれています。他のパスワードと同様に、これを保護してください。
TYPE
totp または hotp
LABEL
キーが関連付けられているアカウントを識別し、オプションで発行者の文字列をプレフィックスとして追加します。例: Arch%20Wiki@archlinux.org
PARAMETERS
標準の URI パラメータ形式を取ります - ?name=value&name=value...
  • secret - 必須; これは Base32 でエンコードされた共有シークレットです。
  • issuer - アカウントが関連付けられているプロバイダまたはサービスを示します。これがない場合、ラベルの発行者プレフィックスが使用されます。両方が存在する場合、それらは一致している必要があります。
  • algorithm - デフォルトでは SHA1SHA256 または SHA512 も使用できます。
  • digits - パスコードの長さを指定します。デフォルトは 6 ですが、8 に設定することもできます。
  • counter - HOTP を使用する場合に必要です。初期カウンター値。
  • period - TOTP を使用する場合はオプションです。コードの有効期限を設定します。デフォルトは 30 秒です。

以下は例です:

otpauth://totp/Example%20Company:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example%20Company
         |type|  issuer prefix   |    account     |         secret        |     issuer            |
              |               label              |                  parameters                   |

Tips and tricks

Decode QR codes

This can be accomplished with tools from zbar. Decode a PNG file:

$ zbarimg my_qr_code.png --quiet --raw

Decode images from a camera:

$ zbarcam /dev/video0

Create QR codes

The qrencode package is useful here.

Encode a URI, save it as a PNG:

$ qrencode -o my_code.png 'MY_URI'

Encode a URI, print a QR code to the terminal:

$ qrencode -t ansiutf8 'MY_URI'

Generate keys

To generate your own key in the proper format, you can use something like the following:

$ head -c 16 /dev/urandom | base32 --wrap 0

Generate OTPs from the command line

Use oathtool(1) from oath-toolkit:

$ oathtool --base32 --totp KEY

Many password managers, including pass and KeePass also offer support for generating these codes.

Linux User authentication with PAM

See either pam_oath or Google Authenticator.

See also