オープン認証イニシアチブ
オープン認証イニシアチブ (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
- TYPE
totp
またはhotp
- LABEL
- キーが関連付けられているアカウントを識別し、オプションで発行者の文字列をプレフィックスとして追加します。例:
Arch%20Wiki@archlinux.org
- PARAMETERS
- 標準の URI パラメータ形式を取ります -
?name=value&name=value...
secret
- 必須; これは Base32 でエンコードされた共有シークレットです。issuer
- アカウントが関連付けられているプロバイダまたはサービスを示します。これがない場合、ラベルの発行者プレフィックスが使用されます。両方が存在する場合、それらは一致している必要があります。algorithm
- デフォルトではSHA1
。SHA256
または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
- Standard specifications
- URI format reference
- QR and barcode decoder - Do not enter actual credentials here.
- QR code tester (archive.org) - Do not enter actual credentials here.