
アイドル認証アプリ サーバー仕様 ( IdleAuth App Server Specification )
Draft 2025/03/03 version ©2025 Naoki Hirayama
アイドル認証アプリが出力した8桁の数字やデータをサーバー側で検証して認証するための仕様。アイドル認証アプリとはWindowsで動作するGoogle認証システムのようなアプリです。以下からダウンロードできます。
RSAの入出力のバイトの並びはリトルエンディアン表記です
Auth 8桁表示
クライアントに送信した20バイトのデータをクライアントと同じ電子証明書を使ってRSA署名(PKCS#1 ver1.5)。出力結果を圧縮します。圧縮の方法は下位から4バイト単位に加算していきます。加算の結果は4バイト(=8ニブル)。最下位のニブルから順番に8桁を並べます。この8桁がクライアントから受信したものと一致すれば認証成功。
20バイトに満たない場合、0で満たします。abc の場合は
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 'c' 'b' 'a'
パディング
(20バイト) 14 04 00 05 1A 02 03 0E 2B 05 06 09 30 21 30 00
FF FF FF ------------------------ FF 01 00
圧縮する前のデータが4の倍数でない場合、最後の端数のデータは切り捨てます。
Auth File Out
RSA署名(PKCS#1 ver1.5)の検証と同じ
Auth288 'U'+8桁表示
クライアントに送信した36バイトのデータをクライアントと同じ電子証明書を使ってRSA署名(PKCS#1 ver1.5)。出力結果を圧縮します。圧縮方法はAuthと同じ。36バイトに満たない場合、0で満たします。
パディング
(36バイト) 00 FF FF FF FF ---------------- FF FF 01 00
Auth288 File Out
RSA署名(PKCS#1 ver1.5)の検証と同じ
File Inのデータ形式
AuthとAuth288、どちらの場合でも64バイト。Authの場合は先頭20バイト、Auth288の場合は先頭36バイトがRSA署名の入力データとして利用されます。クライアント側でICカードなどのハードウェアを利用する場合、Auth288に対応していないケースがあるため。
64バイトなのは、将来、アイドル認証アプリがSHA-512に対応したICカードを利用することを想定しています。ただし、ずっと現状のままかもしれない。
最後に
一般の仕様の記述と比較して緩い記述ですが、非常にシンプルな仕様なので、緩いほうが、さらにわかりやすいのではないかと思います。
期待値(テストベクター)はダウンロードできるアプリに証明書発行機能があるので実際にやってみることで得られます。
アイドル認証アプリのソースを公開する予定なので、そちらを参照しても、いいかもしれません。
本仕様の著作権はNaoki Hirayamaにありますが、この仕様を使ってサーバー側のシステムに組み込める実装を自由に作っていただいて構いません。
クライアント側の互換アプリについては、アイドル認証アプリを公開しているページに記載しているので、そちらをご参照願います。