背景
2025年10月26日、楽天証券にパスキー認証が導入されました。
パスキー認証では、ユーザーのデバイスにあるログイン先のドメインに紐づく暗号鍵を用いてログインするため、パスワードによる認証に比べてフィッシング詐欺に対する耐性が格段に高いのが特徴です。2025年に入ってから証券口座を標的にしたフィッシング詐欺が横行していましたが、ユーザーによるパスキー認証の設定が進めば、詐欺被害の沈静化が期待されます。
筆者はこれまでパスキー認証への関心が薄かったのですが、流石に証券口座乗っ取りのリスクは看過できないため、すぐに設定を試みました。しかし、自身の作業環境の問題で早速つまづいてしまいました。
楽天証券のパスキー認証では、作成できるパスキーは1アカウントにつき1つまでとされています。複数のデバイスからログインするには、パスキーが保存されたデバイスを使ってQRコードを読み取るなどのクロスデバイス認証を行う必要があります。
筆者は普段、資産状況をAndroidスマートフォンとUbuntu上のFirefoxで確認していますが、現行のFirefoxはパスキー認証への対応が限定的であり、そのままではクロスデバイス認証が利用できませんでした。
そこで本記事では、まずパスキーによるクロスデバイス認証の仕組みを簡潔に解説します。その上で、UbuntuのFirefoxでパスキーによるクロスデバイス認証を可能にする設定を行い、楽天証券にログインするまでの具体的な手順を説明します。
【注意】 以下では実験的なソフトウェアを用いて証券口座にログインする設定を行います。作業は完全に自己責任で実施いただくようお願いいたします。
対象読者
- Ubuntu (Linux) デスクトップユーザー
- Firefoxユーザー
- パスキー認証を要するサービスの利用者
なお、Google Chrome (Chromium) は既にクロスデバイス認証に対応しています。
パスキーを用いたクロスデバイス認証の流れ
パスキー認証では、ユーザーがWebサイトにアクセスし、サーバーにパスキー認証をリクエストすると、サーバーからチャレンジ情報が送付されます。このチャレンジにユーザーの秘密鍵で署名を行い、その署名済みの情報をサーバーに送り返すことで認証が完了します。
ログインデバイス(PC)に秘密鍵が保存されていない場合、別のデバイス(スマートフォン)に保存されている秘密鍵を用いて署名する必要があります。このとき、PCとスマートフォンの間でセキュアな通信路を確立しなければなりません。パスキー認証におけるクロスデバイス認証では、ログインデバイスにQRコードを表示し、それをパスキー保持デバイスでスキャンすることで、両者間の安全な通信路を確立します。
このように、パスキー認証を利用するには、ログインに使用するすべてのデバイスやアプリケーションが、パスキー認証(特にクロスデバイス認証の機能)に適切に対応している必要があります。
credentialsdのインストール
credentialsd はRustで実装された認証情報マネージャーで、D-Busのサービスとして動作します。このプロジェクトは、説明にもある通り、現時点では一般利用を想定していない実験的なものです。
本リポジトリには、Firefoxのアドオンも含まれています。これは、Firefoxからcredentialsdにアクセスし、パスキー認証を可能にするためのものです。
インストールは基本的に公式ドキュメントに従いますが、以下の箇所のみ修正が必要となります。
依存ライブラリの名称変更
OSによって異なるかもしれませんが、Ubuntu 25.04 では依存ライブラリの udev を libudev に変更する必要があります。
dependency('libudev', version: '>= 249')
Firefoxアドオンのパッケージ情報の変更
Firefoxのアドオンとして利用できるようにするためは、公開の有無に関わらずFirefox Add-onsに登録してアドオンに署名を行う必要があります。そのため、アドオンのIDを競合しない他の名前に変更する必要があります。
"browser_specific_settings": {
"gecko": {
"id": "credentialsd-helper@foobar",
"strict_min_version": "140.0"
}
}
"allowed_extensions": [ "credentialsd-helper@foobar" ]
アドオンのアクセス許可の設定
アドオンが楽天証券のページのデータにアクセスできるようにします。
"content_scripts": [
{
"matches": ["https://webauthn.io/*", "https://demo.yubico.com/*", "https://*.rakuten-sec.co.jp/*"],
"js": ["content.js"],
"run_at": "document_start"
}
],
インストール
まず依存ライブラリをインストールします。
sudo apt update && sudo apt install \
curl git build-essential \
meson ninja-build \
libgtk-4-dev gettext libdbus-1-dev libssl-dev libudev-dev \
desktop-file-utils \
python3-dbus-next
次に、credentialsdとFirefoxアドオンのビルドとインストールを行います。システムにインストールするため、途中でパスワードの入力を求められます。
git clone https://github.com/linux-credentials/credentialsd
cd credentialsd
meson setup -Dprefix=/usr/local build-release
cd build-release
meson install
credentialsdをD-Busのサービスとして立ち上げるため、PCを再起動します。
最後に、Native Messagingのための設定ファイルをコピーします。Ubuntu 25.04では xyz.iinuwa.credentialsd_helper.json のインストール先がドキュメントとは異なるため、以下のようにコマンドを一部変更する必要がありました。
mkdir -p ~/.mozilla/native-messaging-hosts/
ln -s ln -s /usr/local/lib/x86_64-linux-gnu/mozilla/native-messaging-hosts/xyz.iinuwa.credentialsd_helper.json ~/.mozilla/native-messaging-hosts/
ここまで作業をすると、Firefoxの about:debugging から一時的なアドオンとして /usr/local/share/credentialsd/credentialsd-firefox-helper.xpi を追加し、パスキーによるクロスデバイス認証ができるようになります。
楽天証券のページでパスキー認証を行おうとすると、以下のような画面が表示されるので、A mobile deviceを選択します。
次の画面に表示されるQRコードをパスキーの秘密鍵が保存されたスマートフォンで読み込めば、ログインできます。
Firefox Add-onsへの登録
about:debugging から一時的なアドオンとして追加してもパスキーのクロスデバイス認証はできますが、永続的に利用することはできません。そこで、Firefox Add-onsでアドオンを登録する必要がありますが、一点だけ注意点があります。
Firefoxのアドオンの公開方法は、 (1) addons.mozilla.org で公開する方法と (2) 自身のWebサイトで公開する方法の2通りあります。今回作成したアドオンは他人に公開することを想定していないので、登録時に必ず On your own を選択する必要があります。
アドオンの送信後、しばらく待つと署名が完了し、署名済みアドオンをダウンロードできるようになります。
まとめ
本記事では、Ubuntu上のFirefoxでパスキーを用いたクロスデバイス認証を実現するための設定方法を解説しました。
本来であれば、今回のように特別な対応をしなくても、ブラウザやOSにこの機能が標準で搭載されていることが望ましいでしょう。しかし、パスキーに関連する仕様は、FIDO2の一部として、2025年10月現在、W3Cのワーキングドラフト(草案)段階にあります。
今後、この仕様が勧告に向けて議論が進むにつれて、各プラットフォームの対応状況も変化していくはずです。標準機能としてクロスデバイス認証が利用できるようになる日を、気長に待ちたいと思います。


