これは、なにをしたくて書いたもの?
最近、oathtoolというものでTOTPのワンタイムパスワードをコマンドラインで生成できることを知ったので、少しメモして
おこうかなと。
OATH Toolkit
oathtoolは、OATH Toolkitというツールキットの一部です。
OATH Toolkitは、OTP(ワンタイムパスワード)認証システムを構築するためのコンポーネントを提供します。
OATH Toolkit provide components to build one-time password authentication systems.
含まれるものとしては、共有Cライブラリー、コマンドラインツール、PAMモジュールがあります
It contains shared C libraries, command line tools and a PAM module.
サポートされている技術としては、HOTP(Hash-based Message Authentication Code(HMAC))アルゴリズム、
TOTP(Time-based One-time Password)アルゴリズム、秘密鍵を管理するためのPSKCが含まれます。
Supported technologies include the event-based HOTP algorithm (RFC 4226), the time-based TOTP algorithm (RFC 6238), and Portable Symmetric Key Container (PSKC, RFC 6030) to manage secret key data.
なお、OATHというのはOpen AuTHenticationというアルゴリズムを規定する組織の略だそうです。
OATH stands for Open AuTHentication, which is the organization that specify the algorithms.
OATH Toolkitに具体的に含まれるのは、以下です。
- liboath … OATH処理用の共有Cライブラリー
- oathtool … OTPを生成および検証するためのコマンドラインツール
- pam_oath … OATHのプラガブルなログイン認証用のPAMモジュール
- libpskc … PSKC処理用の共有Cライブラリー
- pskctool … PSKSデータを操作するためのコマンドラインツール
開発は、GitLabで行われているようです。
oath-toolkit / oath-toolkit · GitLab
今回は、oathtoolを使っていきます。
参考)
第508回 Ubuntuでコマンドラインからワンタイムパスワードを扱う | gihyo.jp
環境
今回の環境は、こちら。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy $ uname -srvmpio Linux 5.15.0-78-generic #85-Ubuntu SMP Fri Jul 7 15:25:09 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
oathtoolをインストールする
oathtoolは、aptでインストールできます。
$ sudo apt install oathtool
バージョン。
$ oathtool --version oathtool (OATH Toolkit) 2.6.7 Copyright (C) 2009-2021 Simon Josefsson. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Simon Josefsson.
ヘルプ。
$ oathtool --help Usage: oathtool [OPTION]... [KEY [OTP]]... Generate and validate OATH one-time passwords. KEY and OTP is the string '-' to read from standard input, '@FILE' to read from indicated filename, or a hex encoded value (not recommended on multi-user systems). -h, --help Print help and exit -V, --version Print version and exit --hotp use event-based HOTP mode (default=on) --totp[=MODE] use time-variant TOTP mode (values "SHA1", "SHA256", or "SHA512") (default=`SHA1') -b, --base32 use base32 encoding of KEY instead of hex (default=off) -c, --counter=COUNTER HOTP counter value -s, --time-step-size=DURATION TOTP time-step duration (default=`30s') -S, --start-time=TIME when to start counting time steps for TOTP (default=`1970-01-01 00:00:00 UTC') -N, --now=TIME use this time as current time for TOTP (default=`now') -d, --digits=DIGITS number of digits in one-time password -w, --window=WIDTH number of additional OTPs to generate or validate against -v, --verbose explain what is being done (default=off) Report bugs to: oath-toolkit-help@nongnu.org oathtool home page: <https://www.nongnu.org/oath-toolkit/> General help using GNU software: <https://www.gnu.org/gethelp/>
oathtoolの使い方
基本的には、以下の使い方になると思います。
$ oathtool --totp --base32 [シークレット]
--totp
はパスワード生成にTOTPを使うオプションです。デフォルトはHOTPなので、通常は--totp
を指定することになるでしょう。
--base32
は、シークレットとしてBase32エンコードされた文字列を与えることを示します。
これで、ワンタイムパスワードが生成できます。
$ oathtool --totp --base32 [シークレット] 123456
その他、知っておいた方がよさそうなオプション。
デフォルトでTOTPの間隔は30秒なのですが、-s
または--time-step-size
で間隔を指定できます。
$ oathtool --totp --time-step-size=60s --base32 [シークレット] 123456
-w
または--window
で、追加でパスワードを生成する数を指定できます。たとえば、-w 2
を指定すると3つパスワードが得られます。
$ oathtool --totp -w 2 --base32 [シークレット] 123456 234567 345678
連続した2つのパスワードが欲しい、という場合は-w 1
を指定するとよいでしょう。
$ oathtool --totp -w 1 --base32 [シークレット] 123456 234567
ちなみにこの追加分のパスワードは、-s
または--time-step-size
で指定した間隔(デフォルトは30秒)で生成します。
便利そうなので、覚えておこうかなと思います。