株式会社ハウディ・クリプト
Haudi Crypto, Inc.
Openloopは暗号資産ハードウェアウォレットとしてだけでなく、セキュリティキーとしても機能します。1台のデバイスで以下の2つのセキュリティ機能を提供します。
| 機能 | プロトコル | 主な用途 |
|---|---|---|
| パスキー | FIDO2/CTAP2 | Webサイトのパスワードレス認証、二要素認証 |
| PIV/PKCS#11 | PIV (NIST SP 800-73) | SSH認証、TLSクライアント証明書、コード署名 |
この2つの機能は用途が重複せず、相互補完の関係にあります。
| ユースケース | パスキー (CTAP2) | PIV/PKCS#11 |
|---|---|---|
| ブラウザWebAuthn認証 | ✓ | — |
| SSH公開鍵認証 | — | ✓ |
| TLSクライアント認証 | — | ✓ |
| コード署名 / git署名 | — | ✓ |
Openloopのパスキーは 2つの経路 (transport) で利用できます。それぞれ前提条件が異なります。
| Transport | 前提条件 | 利用シーン |
|---|---|---|
| USB CTAPHID (デスクトップ) | ソフトウェアのインストール不要、ブラウザのみ | Windows / macOS / Linux PC |
| BLE (Openloop Connect 経由) | Openloop Connect モバイルアプリ のインストール + デバイスペアリング必須 | iOS / Android スマートフォン |
PIV/PKCS#11 については Openloop Connect(デスクトップアプリ)の起動が必要です。PKCS#11ライブラリはConnectに同梱されています。
OpenloopはFIDO2/CTAP2準拠のセキュリティキーとして動作します。パスワードに代わる安全な認証手段として、対応するWebサイトやサービスで利用できます。
▲ 認証ステータス: 現時点で Openloop は FIDO Alliance の FIDO Certified Authenticator 認証 (FIDO2 Certified) を取得していません。仕様準拠のCTAP2/WebAuthn 実装ではありますが、FIDO Alliance 公式認証および AAGUID 登録 (FIDO Metadata Service) については、将来的な取得を検討する可能性があります。
| 項目 | 仕様 |
|---|---|
| プロトコル | CTAP2 (FIDO_2_0) |
| 後方互換 | U2F (FIDO U2F V2) |
| 通信 (Transport) | USB HID (CTAPHID) / BLE (Openloop Connect 経由、後述) |
| 署名アルゴリズム | ES256 (P-256) / EdDSA (Ed25519) |
| Discoverable Credential | ✓ サポート(Resident Key) |
| User Verification | ✓ デバイスPIN + 物理タッチ |
| 最大クレデンシャル数 | 100 |
| Attestation | 自己証明(Self-attestation) |
▲ ファクトリーリセットについて: ファクトリーリセットを実行すると、すべてのFIDO2パスキーおよびPIV鍵が完全に削除されます。パスキーはリカバリーフレーズでは復元できません。各サービスでのセキュリティキー再登録が必要です。
OpenloopのパスキーはUSBとBLEで動作経路がまったく異なります。混同しやすいので最初に明確化します。
[PC ブラウザ] ──── USB HID (CTAPHID) ──── [Openloop デバイス]
↑
OS標準のセキュリティキー機能で動作
Openloop Connect は不要
[iOS/Android ブラウザ]
↓ navigator.credentials API
[OS Credential Manager]
↓ Provider 選択 (ユーザー操作)
[Openloop Connect アプリの Credential Provider Extension/Service]
↓ BLE
[Openloop デバイス]
▲ iOS 注意: ピッカーに「Openloop Connect」と表示されるが、通信は USB ではなく BLE で行われます。iOS の仕様上、Extension の表示名は親アプリ名 (Openloop Connect) に固定されるため、BLE 経由で動作することがUI上分かりにくい点に注意してください。
ほとんどの RP (Relying Party、=Webサイト) では 1回の登録で
USB/BLE どちらの transport でも使用可能 です。しかし一部のRP
(代表例: Google) は厳格な transports hint
フィルタリングを行うため、USB登録 credential は
USB経路でのみ、BLE登録 credential は BLE経路でのみ
使えます。
| RP | USB登録分の BLE 利用 | BLE登録分の USB 利用 |
|---|---|---|
| 大半のサイト (Microsoft, GitHub, JAL 等) | ✓ 動作 | ✓ 動作 |
| ✗ iOS BLE picker から見えない | △ 動作 (Mac/Chrome の transport filter は緩い) |
同じ Openloop デバイス で USB と BLE の2回 passkey 登録 することで、両 transport で使える状態にできます。Openloop は同じハードウェアでも transport ごとに異なる credential ID を生成するため、サーバ側に独立した2つのcredentialとして登録されます。
Google アカウント設定:
├─ セキュリティキー欄: USB登録分 (PC/Mac で利用)
└─ パスキー欄: BLE登録分 (iPhone/Android で利用)
パスキー機能はデフォルトで無効になっています。USB / BLE どちらを使う場合でも以下の手順で有効化してください。
パスキーのクレデンシャルには2種類あります。
| 種類 | 説明 | 特徴 |
|---|---|---|
| Resident Key(Discoverable Credential) | クレデンシャル情報をデバイス内に保存。ユーザー名の入力なしで認証可能。 | デバイスの保存領域を使用。Openloopでは最大100個まで保存可能。 |
| Non-Resident Key | クレデンシャルIDにデバイス固有の暗号で包んだ情報を埋め込む。デバイス内に状態を保持しない。 | 保存数の制限なし。ただし認証時にサーバーからcredentialIdの提示が必要。 |
Webサイトがどちらを要求するかは、登録時の residentKey
パラメータで決まります。近年のパスキー対応サービス(Google、Microsoft、GitHub等)はResident
Keyを要求するのが一般的です。
ℹ デバイスに保存されたResident Keyの一覧は、設定 > パスキー > クレデンシャル一覧 で確認・削除できます。Non-Resident Keyはデバイスに状態を持たないため一覧には表示されません。
PC のブラウザから Openloop を USB セキュリティキーとして登録します。
登録済みのWebサイトにPCのブラウザからログインする際に使用します。
iPhone / Android のブラウザから、Openloop Connect 経由で BLE 接続した Openloop に passkey を登録します。
ℹ transport icon表示: Openloop デバイスのパスキー一覧画面では、各 credential の左に 🔌(USB) または 📶(Bluetooth) アイコンが表示され、どちらの経路で登録されたかを区別できます。
登録したパスキーはOpenloopデバイス上で管理できます。
▲ パスキーリセットを実行すると、すべてのクレデンシャルが削除されます。各Webサイトで再登録が必要になります。
| OS | Chrome | Edge | Safari | Firefox |
|---|---|---|---|---|
| Windows | ✓ | ✓ | - | ✓ |
| macOS | ✓ | - | △ | △ |
| OS | ブラウザ | Openloop Connect 必須 |
|---|---|---|
| iOS 17+ | Safari (Credential Provider Extension 経由) | ✓ |
| Android 14+ | Chrome / Edge (Credential Provider Service 経由) | ✓ |
▲ iOS の場合、ブラウザの passkey ピッカーには「Openloop Connect」と表示されますが、これは iOS Extension仕様の親アプリ名固定 (CFBundleDisplayName 無視) によるもので、実際の通信は BLE で行われます。
パスキーに対応する主要なWebサイト・サービス:
ℹ 対応サービスの最新リストは passkeys.directory で確認できます。
OpenloopはPIV(Personal Identity Verification, NIST SP 800-73)スマートカードインターフェースを実装しています。PKCS#11共有ライブラリを通じて、SSH認証やTLSクライアント認証など、パスキーではカバーできないユースケースに対応します。
SSH / Firefox / pkcs11-tool
↓ PKCS#11 C API
libopenloop-pkcs11 (.dylib / .dll / .so)
↓ PIV APDU → WebSocket (ws://127.0.0.1:21320)
Openloop Connect (APDUの透過転送)
↓ USB HID
Openloop デバイス (PIVハンドラ → SE050で署名)
PKCS#11ライブラリはOpenloop Connect経由でデバイスと通信するため、PIV/PKCS#11機能を使用する際はOpenloop Connectが起動している必要があります。
設定 > パスキー・PIV > PIV ON でPIVを有効化します。OFFにするとPKCS#11のスロットが非表示になります。
また、以下の設定も確認してください:
PIV PINはオプションです。PINを設定するとUSB経由のPIN認証が有効になり、PIN送信時は確認画面なしで署名されます(ブラインド署名)。PINを設定しない場合は、従来通りデバイス画面での確認操作が必要です。
OpenloopのPIV実装は、PIN送信の有無に応じて2つの動作モードを提供します。
| モード | 動作 | 用途 |
|---|---|---|
| PIN送信あり | ブラインド署名(確認画面なし、自動署名) | 自動化・CI/CD・スクリプト向け |
| PIN未送信 | 従来の確認画面フロー(デバイス画面で承認) | 対話的な利用 |
ℹ 1つのデバイスで両方のモードを使い分けることができます。PINを送信するかどうかはクライアント側(SSH設定等)で制御します。
# PINの初期設定
pkcs11-tool --module "$MODULE" --login --init-pin --new-pin 123456
# PINの変更
pkcs11-tool --module "$MODULE" --login --change-pin --pin 123456 --new-pin 654321PINを削除するには、以下のいずれかの方法を使用します:
PINを8回連続で間違えるとロックされます。ロック状態になった場合は、デバイスUIの🗑ボタンでPINを削除し、再設定してください。
# PIN付きでSSH接続
ssh -o "PKCS11Provider=$MODULE" -o "PKCS11Pin=123456" user@host▲ PINをコマンドラインに直接記述すると、シェル履歴やプロセス一覧に残る可能性があります。セキュリティが重要な環境では、ssh-agentの利用やPIN未送信モード(デバイス確認画面フロー)を検討してください。
PKCS#11ライブラリはOpenloop
Connectに同梱されています。アプリインストールパス配下の
pkcs11/ フォルダ内です:
| OS | アプリパス相対 |
|---|---|
| macOS | <app>/Contents/Resources/pkcs11/libopenloop-pkcs11.dylib |
| Windows | <app>/resources/pkcs11/libopenloop-pkcs11.dll |
| Linux | <app>/resources/pkcs11/libopenloop-pkcs11.so |
アプリのインストール先 <app>
はインストール方法により異なります:
| インストール方法 | インストール先 |
|---|---|
| macOS (DMG) | /Applications/Openloop Connect.app |
| Windows (公式インストーラ) | C:\Program Files\Openloop Connect |
| Windows (Microsoft Store) | PowerShell で
(Get-AppxPackage 7CA75049.OpenloopConnect).InstallLocation |
| Linux (deb) | /opt/Openloop Connect |
以降の例では、macOS DMG 版の完全パスをシェル変数に設定して使用します:
MODULE="/Applications/Openloop Connect.app/Contents/Resources/pkcs11/libopenloop-pkcs11.dylib"OpenloopをPKCS#11経由でSSHハードウェアキーとして使用します。秘密鍵はデバイスのSE050セキュアエレメント内に保管され、外部に取り出すことはできません。
PIVスロット(デフォルト: 9A Authentication)に鍵ペアを生成します。鍵の生成方法は以下のいずれかです:
# デバイスからSSH公開鍵を取得
ssh-keygen -D "$MODULE"
# ファイルに保存
ssh-keygen -D "$MODULE" > ~/openloop_key.pub取得した公開鍵をリモートサーバーの
~/.ssh/authorized_keys に追加してください。
# 単発の接続
ssh -I "$MODULE" user@hostname毎回 -I
オプションを指定する代わりに、~/.ssh/config
に設定を記述できます。
# 特定のホストに適用
Host myserver
HostName 192.168.1.100
User ubuntu
PKCS11Provider /Applications/Openloop Connect.app/Contents/Resources/pkcs11/libopenloop-pkcs11.dylib
# すべてのホストに適用
Host *
PKCS11Provider /Applications/Openloop Connect.app/Contents/Resources/pkcs11/libopenloop-pkcs11.dylib
OpenloopのPIV/PKCS#11はP-256、Ed25519、RSA-2048の3つのアルゴリズムをサポートしています(RSA-2048対応)。SSH実装によってPKCS#11経由で利用できるアルゴリズムが異なります。
| SSH実装 | RSA-2048 | P-256 (ECDSA) | Ed25519 (EdDSA) | 備考 |
|---|---|---|---|---|
| OpenSSH (8.5以降) | ✓ | ✓ | ✓ | 推奨。全アルゴリズムをフルサポート。 |
macOS システムSSH (/usr/bin/ssh) |
✓ | △ | ✗ | PKCS#11経由ではRSAのみ安定。 |
| PuTTY (Windows) | ✓ | △ | ✗ | PKCS#11対応が限定的。RSA中心。 |
| Dropbear | ✗ | ✗ | ✗ | PKCS#11非対応。 |
▲ OpenSSH(Homebrew版)の使用を強く推奨します。 macOSのシステムSSH(Apple版)はPKCS#11経由でのECDSA/EdDSAサポートが不完全です。RSA-2048鍵を使用すれば互換性の問題を回避できます。
# Homebrew OpenSSHのインストール
brew install openssh
# Homebrew版を使用(フルパス指定)
/opt/homebrew/bin/ssh -I "$MODULE" user@hostname
# バージョン確認(8.5以上であることを確認)
/opt/homebrew/bin/ssh -V
# ~/.ssh/config で IgnoreUnknown UseKeychain を追加
# (Homebrew SSHが認識しない macOS 独自オプションの警告を抑制)# PKCS#11ライブラリのデバッグ出力を有効化
OPENLOOP_PKCS11_DEBUG=1 ssh-keygen -D "$MODULE"
# SSH接続の詳細ログ
ssh -vvv -I "$MODULE" user@hostname主要ブラウザの中で、Firefoxは唯一、外部PKCS#11モジュールの読み込みをサポートしているブラウザです。ChromeやEdge、SafariはOS標準のキーチェーン/証明書ストアのみを使用し、サードパーティのPKCS#11ライブラリを直接読み込む機能を提供していません。そのため、OpenloopのPKCS#11ライブラリを使ったTLSクライアント認証はFirefoxで利用します。
PKCS#11モジュールをFirefoxに登録して、TLSクライアント証明書認証(mTLS)を利用します。
Openloop と入力クライアント証明書を要求するWebサイトにアクセスすると、Firefoxが自動的にOpenloopデバイスから証明書を選択するよう促します。署名操作にはUser Presence(デバイスへの物理的なタッチ)が必要です。
macOSでは、Openloop Connectが以下のパスにマニフェストを配置することで、PKCS#11モジュールをFirefoxに自動登録できます:
~/Library/Application Support/Mozilla/PKCS11Modules/openloop_pkcs11.json
自動登録が有効な場合、手動での登録は不要です。
OpenSCのpkcs11-toolコマンドを使って、デバイスの鍵やオブジェクトを操作できます。
# macOS
brew install opensc
# Ubuntu/Debian
sudo apt install opensc
# Windows
# OpenSCインストーラーからインストール: https://github.com/OpenSC/OpenSC/releasespkcs11-tool --module "$MODULE" -Tpkcs11-tool --module "$MODULE" -O# P-256 をスロット 9A(Authentication)に生成
pkcs11-tool --module "$MODULE" --keypairgen \
--key-type EC:prime256v1 \
--id 01 --label "PIV AUTH"
# Ed25519 をスロット 9A に生成
pkcs11-tool --module "$MODULE" --keypairgen \
--key-type EC:edwards25519 \
--id 01 --label "PIV AUTH"# テストデータを作成し、スロット 9A の鍵で署名
echo "test data" | openssl dgst -sha256 -binary > /tmp/hash.bin
pkcs11-tool --module "$MODULE" --sign \
--mechanism ECDSA \
--id 01 \
--input-file /tmp/hash.bin \
--output-file /tmp/sig.binpkcs11-tool --module "$MODULE" --delete-object \
--type privkey --id 01| スロット | 名前 | 用途 |
|---|---|---|
9A |
PIV Authentication | SSH認証、一般的な認証。最も使用頻度が高い。 |
9C |
Digital Signature | 文書署名、S/MIME。常にPINが必要。 |
9D |
Key Management | 暗号化/復号化、鍵共有。 |
9E |
Card Authentication | 物理アクセス、非接触認証。PIN不要。 |
| アルゴリズム | PIV ID | 備考 |
|---|---|---|
| P-256 (secp256r1) | 0x11 | NIST P-256によるECDSA。広くサポートされている。 |
| Ed25519 | 0x22 | Curve25519によるEdDSA。SSHにはOpenSSH 8.5以上が必要。 |
| RSA-2048 | 0x07 | PKCS#1 v1.5署名。SSH/GPG/PDF署名に対応。鍵生成に約10秒。 |
| PIVスロット | PKCS#11 ID | CKA_LABEL | 用途 |
|---|---|---|---|
| 9A | 01 | PIV AUTH | Authentication |
| 9C | 02 | SIGN | Digital Signature |
| 9D | 03 | KEY MGMT | Key Management |
| 9E | 04 | CARD AUTH | Card Authentication |
PKCS#11ライブラリのデバッグ出力を有効にすることで、通信の詳細を確認できます:
OPENLOOP_PKCS11_DEBUG=1 ssh-keygen -D "$MODULE"| 資料 | URL |
|---|---|
| CTAP2仕様 (FIDO Alliance) | https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html |
| WebAuthn仕様 (W3C) | https://www.w3.org/TR/webauthn-2/ |
| U2F仕様 (FIDO Alliance) | https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/ |
| CTAPHID — USBトランスポート | https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#usb |
| パスキー対応サービス一覧 | https://passkeys.directory |
| 資料 | URL |
|---|---|
| NIST SP 800-73 (PIV仕様) | https://csrc.nist.gov/pubs/sp/800/73/4/final |
| PKCS#11仕様 (OASIS) | https://docs.oasis-open.org/pkcs11/pkcs11-base/v3.0/pkcs11-base-v3.0.html |
| OpenSC (pkcs11-tool) | https://github.com/OpenSC/OpenSC |
| OpenSSH PKCS#11ドキュメント | https://man.openbsd.org/ssh-keygen#D |
| 資料 | URL |
|---|---|
| Openloop PIV/PKCS#11 デモ | https://crypto.haudi.jp/openloop/demo/piv/ |
| Openloop パスキー デモ | https://crypto.haudi.jp/openloop/demo/ctap2/ |
| Openloop Connect | https://crypto.haudi.jp/openloop/ |
Copyright © 2026 Haudi Crypto, Inc. All rights reserved.