sgcWebSockets 2025.4.0 Enterprise より、WebAuthn プロトコルがサポートされました(現在 BETA)。
WebAuthn(Web 認証)は、Web 上でセキュアなパスワードレス認証を実現するために World Wide Web Consortium(W3C)と FIDO Alliance が開発した Web 標準です。より広範な FIDO2 フレームワークの一部であり、フィッシングやクレデンシャルスタッフィングなどの攻撃に脆弱な従来のパスワードへの依存を減らすことを目的としています。
WebAuthn の核心は、公開鍵暗号を使用したユーザー認証です。ユーザー名とパスワードの代わりに、ユーザーは Web アプリケーション(リライングパーティ)に一意の公開鍵・秘密鍵ペアを登録します。秘密鍵はハードウェアセキュリティキー・スマートフォン・内蔵の生体認証デバイスなどの認証器に安全に保存され、公開鍵はサーバーに保存されます。
認証時、サーバーはユーザーの秘密鍵で署名される必要があるチャレンジを発行します。署名されたチャレンジが返され、保存された公開鍵を使用して検証されることで、レスポンスの完全性と出所が保証されます。このアプローチにより、クレデンシャルの傍受や再利用が防止されます。
WebAuthn はさまざまな認証器とデバイスをサポートしており、開発者とユーザーの両方に柔軟性を提供します。また、PIN や生体認証などの他の要素と組み合わせることで多要素認証(MFA)を実現し、使いやすさを犠牲にすることなくセキュリティを大幅に向上させます。
サポートされるアテステーション形式
アテステーション形式によってデータの構造と検証方法が定義されます。一般的に使用される形式には android-key・packed・fido-u2f・apple・none などがあります。デフォルトではすべてのアテステーション形式が有効です。サポートされるアテステーション形式の一覧を以下に示します:
- NoneAttestation:この場合、アテステーションデータは返されません。デバイス識別子の露出を避けることでユーザープライバシーを優先します。デバイスの出所を気にしないアプリケーションに一般的です。
- PackedAttestation:多くの認証器が使用する柔軟でコンパクトな形式です。認証器はアテステーション証明書と署名を返します。フルアテステーション:ベンダー提供のキーと証明書で署名、またはセルフアテステーション:クレデンシャルの秘密鍵を使用して署名。異なるプラットフォーム(YubiKey・Windows Hello など)で最も広く使用されています。
- TPMAttestation:Trusted Platform Module(TPM)を持つデバイスが使用します。アテステーションは TPM のキーを使用して署名され、証明書チェーンが含まれます。TPM チップを搭載したエンタープライズデスクトップ/ラップトップ(Windows マシンなど)が使用します。
- AndroidKeyAttestation:Android Keystore を持つ Android デバイスが使用します。キーはハードウェアで生成され、アテステーションにはデバイスメーカーが発行した証明書チェーンで署名された情報が含まれます。ハードウェアバックのキーストア(TEE または StrongBox)を持つ Android スマートフォンが使用します。
- AppleAttestation:Touch ID や Face ID などの Apple プラットフォーム認証器が使用します。アテステーションは Apple の内部 API で生成され、特殊な証明書形式が含まれます。Apple の生体認証を使用する Safari で使用されます。
- FidoU2FAttestation:FIDO U2F 認証器が使用するレガシーアテステーション形式です。U2F 互換の証明書と署名を返します。FIDO U2F をサポートする古いセキュリティキー(初期の YubiKey など)が使用します。
WebAuthn フロー
- WebAuthn 登録:サーバーがチャレンジを生成してクライアントに送信し、クライアントは認証器(セキュリティキーや生体認証デバイスなど)を使用してキーペアを作成します。公開鍵がサーバーに送り返され、将来の認証のために保存されます。
- WebAuthn 認証:サーバーがクライアントにチャレンジを送信し、クライアントは認証器に保存された以前に登録した秘密鍵で署名します。署名されたレスポンスはサーバーが保存した公開鍵で検証され、ユーザーの身元が確認されます。

WebAuthn サーバーコンポーネント
TsgcWSAPIServer_WebAuthn コンポーネントは WebAuthn リライングパーティサーバーを実装するシンプルかつ強力なソリューションを提供し、Web アプリケーションでのパスワードレス認証を実現します。WebAuthn アプリケーションは、サーバー側の登録と認証を処理する WebAuthn サーバーと、通常は JavaScript アプリケーションであるクライアント側アプリケーションで構成されます。以下に WebAuthn サーバーのシンプルな設定例を示します:
// ... create the servers
HTTPServer := TsgcWebSocketHTTPServer.Create(nil);
WebAuthnServer := TsgcWSAPIServer_WebAuthn.Create(nil);
WebAuthnServer.Server := HTTPServer;
// ... enable for testing
WebAuthnServer.EndpointsOptions.Test.Enabled := True;
// ... WebAuthn options
WebAuthnServer.WebAuthnOptions.RelyingParty := 'localhost';
// ... bindings
Server.Port := 443;
HTTPServer.SSLOptions.Port := 443;
HTTPServer.Bindings.Clear;
With HTTPServer.Bindings.Add do
begin
Port := 443;
IP := '127.0.0.1';
end;
HTTPServer.SSLOptions.Certificate := 'sgc.pem';
HTTPServer.SSLOptions.KeyFile := 'sgc.pem';
HTTPServer.SSL := True;
// ... active
HTTPServer.Active := True;
Delphi WebAuthn サーバーデモ
以下の Delphi WebAuthn デモでは、新しいクレデンシャルを登録し、その後ユーザーを認証する方法を示しています。
