パスキー・ボット構築で学んだこと

(Note: The original title is short, so the translation preserves its brevity while conveying the meaning.)

2025/12/23 3:58

パスキー・ボット構築で学んだこと (Note: The original title is short, so the translation preserves its brevity while conveying the meaning.)

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

改善された概要

Passkeybot.com は、軽量なサーバー側 HTTP ハンドラーを挿入してパスキー認証を追加するホスト型ログインページを提供します。サービスはデバイスレベルのセキュアエレメント(Apple の Secure Enclave Processor、YubiKey、SIM カード)に依存し、暗号鍵の秘密情報をユーザーのデバイス内に保持します。プライベートキーは決して外部へ送られず、パブリックキーのみがサーバーに登録用として送信されます。

サービスではブラウザが統一された Passkey API を公開する方法と、単純なボタンタップや生体認証プロンプトである User Presence と、より強力な生体検証である User Verification の違いを説明しています。鍵ペアはデバイス上で生成され、アテスタションレコードにより真正の認証器が使用されたことを証明します。ただし、Apple はエンタープライズ MDM が有効になっていない限りデフォルトでアテスターションを無効化しています。

本文では最近のブラウザ実験(Chrome の Immediate Mediation 試行と Return‑of‑Request‑Origin (ROR) サポート)も触れています。これらは異なるオリジン間でパスキーを要求できるようにしますが、ROR は HTTPS 上でのみ機能し、iOS 18 や Firefox ではサポートされていません。

また、セキュリティ上の懸念点も指摘しています。JavaScript が侵害された場合、認証器は署名内容を表示しないためユーザーに任意データへの署名を強要される恐れがあります。Subresource Integrity はスクリプト保護に有効ですが、ルート HTML を守ることはできません。

まとめでは Passkeybot が PKCE(Proof Key for Code Exchange)を利用してベアラートークンを排除している点と、将来の計画として Digital Credentials API と連携しパスキーをネイティブ OS ウォレットに格納すること、アテスターションポリシーを洗練させること、

crypto.subtle.generateKey
を用いた一般的な暗号署名向けの非抽出可能鍵生成を拡張することが挙げられています。

ユーザーはよりスムーズで安全なログイン体験を享受でき、企業はパスワードサポートコストを削減できます。業界全体としては標準化されプライバシーに配慮した認証へと進む動きが加速します。

本文

近年リリースした passkeybot.com(パスキー認証を数行のサーバー側HTTPハンドラーで実装できるホスト型サイン‑インページ)について、開発中に得た知見をまとめました。


Secure Enclave Processors (SEP) とは

  • Apple 製品には Secure Enclave(SE) が搭載されており、メインCPUの内部に設けられた小型コンピュータです。暗号化された独立したメモリと専用OSを持ち、秘密鍵などの機密情報は外部へ漏れません。
  • メインOS は SE に「データを署名してほしい」と要求し、その署名結果だけで秘密鍵の所有権を証明します。
    OS と SE の間では専用メッセージプロトコルのみが使用されます。
  • パスキー認証が有効になっている場合、ユーザーは SE がプライベートキーで署名する前に生体情報やパスコードを入力しなければなりません。
  • 他社製品にも同様の仕組み(名称は異なる)が存在します。
    (例:電話 SIM カードは「Secure Element」で、Java を走らせた CPU がカード内で秘密を保持し、署名により所有権を証明します。)

User Presence (UP) と User Verification (UV)

用語意味
Presence「ユーザーがボタンをタップしてその場にいた」こと。
Verification「ユーザーが生体情報やパスコードを入力した」こと。

JavaScript の Passkey API でどちらもリクエストできます。

  • Presence はデバイスがロック解除済みならば偽造しやすいですが、
  • Verification は必ず再認証が必要です。

Authenticator(認証器)とは

  • ハードウェア + ソフトウェアで構成される認証器は、プライベート/パブリックキー対を保持し、Passkey チャレンジに署名することで鍵の所有権を示します。
    Apple 製品の場合は SE がこれに該当します。
  • ブラウザはユーザーに「どの認証器を使うか」を尋ね、OS レベルの API を介してその認証器とやり取りします。

例:

① ユーザーがデバイス内 Apple SEP を選択 → サイトが JS API 呼び出し → ブラウザは Swift API で Passkey 操作
② ユーザーが Yubikey を選択 → サイトが JS API 呼び出し → ブラウザは Yubikey USB API で Passkey 操作

JS API はこれらの認証器 API を統一的に扱い、ブラウザ側でそれぞれのプロトコルを実装しています。Chrome DevTools にはテスト時に OS パスワード入力を省く仮想認証器も用意されています。


Attestation(アテステーション)とは

項目説明
Signingプライベートキーで署名できること=所有権の証明。
Attestationどのハードウェア/ソフトウェアが鍵ペアを生成したかを示し、特定デバイスの信頼ポリシーを実装可能にします。
アテステーション情報は正確なハードウェア構成を露出するため、ユーザー指紋として利用されることがあります。
発生タイミング鍵ペア作成時のみで、認証毎には行われません(キーが別デバイスへ同期された場合は元のアテステーションは無効)。
厳格なアテステーションを要求すると、デバイスごとに新しい鍵ペアが生成され、移動したパスキーの利用を防止します。
Apple の設定デフォルトではアテステーションは無効です。企業向け機能(MDM)で有効化し、許可リストを定義できます。
Passkey の用途認証のみであり、意図の署名には使われません。ユーザーが認証するときに送られるチャレンジは 16 バイト以上のランダムデータを含み、リプレイ攻撃を防止します。また、メタデータハッシュも含むことがあります。
認証器 GUI は「sign in to your_domain.com」だけを表示し、取引等の任意内容署名は許可されません。

JS コードは安全である必要があるが検証不可能

  • サイト側の JavaScript が改ざんされると個人情報を読むことや偽チャレンジをユーザーに署名させることができます。
    認証器は実際に何が署名されたかを GUI に表示しないため、攻撃者は自由にデータを改変できてしまいます。
  • ブラウザは Subresource Integrity (SRI) をサポートしていますが、ルート HTML ドキュメント自体は検証されません。
    攻撃者は SRI ハッシュを変更して悪意あるスクリプトを実行できます。Chrome 拡張機能も同様に JS を注入可能です。
  • もし認証器が「ページ上で読み込まれた HTML/JS」をアテステートできれば、改ざんの検出が容易になるでしょう。

「即時サイン‑イン」API(Chrome Origin Trial)

navigator.credentials.get({ mediation: "immediate" })
  • パスキーをすでに持っているユーザーは高速に署名できます。
  • パスキーが無い場合、JS が次のステップを決定し、ブラウザ UI で他デバイスへの切り替えを表示しません。
  • JS からはユーザーのパスキー一覧を取得できず、常にブラウザ UI を通じて表示します。
キー数即時 JS の応答
0
NotAllowedError
(次ステップを JS が選択)
1該当キーでサインインするよう促す
>1ユーザーにキーを選択させる

Related Origin Requests (ROR)

  • ドメイン所有者が
    /.well-known/webauthn
    を配信し、他ドメインから自ドメインへのパスキー作成を許可するリストを定義できます。
    Passkeybot.com は ROR を使って passkeybot 自身の権限付与を実装しています。
  • HTTPS 必須であり、localhost では機能しません(認証器は HTTPS 経由で well‑known ファイルを取得します)。
  • iOS 18 および Firefox では未対応です。
  • ルートドメインに作成したパスキーはすべてのサブドメインで有効ですが、サブドメイン単位で作成したものはそのドメインのみで使用できます。

カウンタは「ヒューリスティック」だけ

  • 認証器は各パスキー利用時にカウンタを増加させます。
    クローン認証器の検出に使えますが、正当な理由(例:複数デバイスで同期)で誤動作するケースも多いため、最終的にはヒューリスティックとして扱われます。

Bluetooth を利用した近距離デバイス上のパスキー

  • 公衆 PC へサインインするときにローカルにパスキーが無くても、ユーザーのデバイス認証器と BLE 通信で署名プロトコルをやり取りできます。
    近接性(BLE のみ)で安全性を担保しつつ、鍵自体はデバイス内に留まります。

Signal API を使ったパスキー削除

  • JS API はパスキーの一覧取得・直接変更はできません。ブラウザ GUI や Apple Passwords からのみ操作可能です。
  • 削除を「シグナル」することで、ユーザーに対して削除の意図を示すだけで確認応答は返されず、ユーザーデータ漏洩リスクを低減します。

現在サポートされている Signal API メソッド:

PublicKeyCredential.signalUnknownCredential({ rpId, credentialId })
PublicKeyCredential.signalAllAcceptedCredentials({ rpId, userId, allAcceptedCredentialIds })
PublicKeyCredential.signalCurrentUserDetails({ rpId, userId, name, displayName })

user.id
userHandle
は「1 つのアカウント」を表す

  • 同じ値ですが、JS API の呼び出し先で名前が異なります。
  • 複数パスキーを 1 つのロジカルアカウントに紐付ける際に使用されます。
  • パスキー API(特にシグナル API)では必ず設定・保存する必要があります。
  • 新規パスキーごとにユニークな
    user.id
    を生成し、関係を保持すれば「アカウント単位」でのパスキーグルーピングがブラウザ UI で行われなくなる可能性があります。

crypto.subtle.generateKey
による非抽出可能鍵

crypto.subtle.generateKey(algorithm, extractable, keyUsages)
  • プライベートキーを外部に抽出できない鍵ペアを生成します(パスキーと同様)。
    署名操作は可能ですが、JS が改ざんされてもプライベートキー自体は読み取れず、移動も不可能です。
  • PKCE(Proof Key for Code Exchange)は OAuth に後付けで組み込まれた仕組みです。

PKCE の概要

  1. フロー開始
    code_verifier
    (32 バイトのランダム)と
    code_challenge
    (SHA‑256 ハッシュ)を作成。
  2. ユーザーに
    code_challenge
    を提示し、認証サービスへ送信。
  3. 認証サービスはトークンを発行し、
    code_challenge
    と紐付ける。
  4. トークンを引き換える際には
    (token, code_verifier)
    のペアが必要。
  5. そのため、トークン自体が盗まれても
    code_verifier
    を持つ本人だけが使用できます。

PKCE は「静的シークレットを保持できない環境」(JS アプリやデスクトップクライアント)向けに設計されました。
Passkeybot では PKCE の原理を応用し、API クライアントごとにベアラートークンの管理を回避していますが、OAuth 標準とは名前・相互作用が異なります。


Digital Credentials API

  • OS のネイティブウォレットへのブラウザブリッジです。
    ID、チケット、バッジ、会員カードなどを要求でき、実際の本人確認書類を共有せずに「年齢証明」や「運転免許証」等の検証が可能になります。

同じ日のほかのニュース

一覧に戻る →

2025/12/23 4:15

**イラスト付きトランスフォーマー**

## Japanese Translation: 記事は「Attention is All You Need」で紹介されたTransformerアーキテクチャと、従来の再帰型や畳み込み型ニューラル機械翻訳モデルに比べてその注意力ベース設計がトレーニングを高速化する方法について説明しています。 Transformerはエンコーダスタック(通常6層)とデコーダスタック(同じく6層)で構成されます。各層には以下の要素があります: 1. **自己注意**では、トークン埋め込み(512次元ベクトル)がクエリ・キー・バリュー行列にそれぞれ64次元へ射影されます。ドット積スコアは \(\sqrt{64}\) で縮小し、softmax を適用して値を重み付けし、合計します。 2. **マルチヘッド注意**では、各層に8セットの Q/K/V 射影が使用されます。すべてのヘッドからの出力は連結され、最終的な重み行列 \(W_O\) を通じて射影されます。 3. フィードフォワードニューラルネットワーク(ReLU の間にある2つの線形層)。 すべてのサブレイヤは残差接続とその後のレイヤ正規化で包まれています。 位置エンコーディング(512次元の正弦/余弦ベクトル)は埋め込みに加算され、モデルがトークン順序を知り、訓練時より長いシーケンスを扱えるようにします。デコーダでは自己注意がマスクされ、将来位置は \(-\infty\) に設定されるため、オートレグレッシブ生成が保証されます。 最終的なデコーダ出力は線形射影されてロジットベクトル(次元はターゲット語彙サイズ ≈10 000 単語)となり、その後 softmax で単語確率を得ます。訓練では、これらの分布とワンホットエンコードされた目標トークン間のクロスエントロピー損失が最小化され、逆伝播により最適化されます。 デコーディングは貪欲法またはビームサーチで行うことができ、記事では将来的にデコーディング戦略と大規模語彙や長いシーケンスへの訓練を改善する予定だと述べています。本文は元論文、Tensor2Tensor コード、Jupyter ノートブック、および後続のTransformerバリアントを参照し、Twitter での訂正を歓迎しています。 産業界において、Transformers を採用すると NLP プロジェクトが加速し、翻訳品質が向上し、言語集約型サービスへの展開が拡大します。

2025/12/23 4:37

**超音波による癌治療:サウンドウェーブで腫瘍と戦う**

## Japanese Translation: ### Summary HistoSonics の Edison システムは、水で満たされた膜を通じて高強度超音波を届け、腫瘍内部で崩壊する空洞泡を生成し、周囲の健康な組織を保護しながらがん細胞を機械的に液化します。この技術は 2001 年にミシガン大学で Zhen Xu によって発見されました。彼女は 20 MPa を超える負圧のマイクロ秒バーストが過熱なしに泡を作り出せることを示し、後に 2009 年に HistoSonics を設立して商業化しました。 FDA は 2023 年に肝臓腫瘍用として Edison を承認しました。主要な腎臓癌研究は 2026 年に完了予定で、その後規制承認が期待されます。大規模な膵臓試験(5 年生存率 13 % を目標)が進行中で、初期結果では深部病変の成功した焼灼と良好な耐容性が示され、ヒストトリッピーを他治療法と組み合わせることで残存疾患に対処し免疫応答を誘発できる可能性が示唆されています。 HistoSonics は、その目的に特化したデバイスが物理学、生物学、および生体医学工学を統合し、ロボット制御・コンピュータガイドシステムで繊維組織(例:血管)を保護しつつ液化腫瘍残渣の自然除去を可能にすると主張しています。技術はまた、がんタンパク質を露出させることで免疫応答を刺激し、免疫療法と組み合わせた際に全身性抗腫瘍活性を高める可能性があります。 新しいガイダンス技術—超音波ではなく X 線画像—と治療エコーを解析するフィードバックシステムが開発され、組織破壊のリアルタイムモニタリングが改善されています。 2025 年 8 月にジェフ・ベゾスの所有グループが HistoSonics を 22.5 億米ドルで取得し、研究開発と市場拡大への新たな資源を提供しました。成功すればヒストトリッピーは肝臓・腎臓・膵臓以外の癌にも非侵襲的手術オプションを広げ、音波をがん治療における変革的モダリティとして位置付ける可能性があります。

2025/12/23 3:46

**GLM‑4.7:コーディング機能の進化**

## Japanese Translation: (combining missing details, removing unfounded inferences, keeping clarity):** --- ## Summary GLM‑4.7 は GLM‑4.6 に対し、複数の面で大幅な性能向上を示しています: - **コーディングベンチマーク:** SWE‑bench (+5.8 % で 73.8 %)、SWE‑bench Multilingual (+12.9 % で 66.7 %)、Terminal Bench 2.0 (+16.5 % で 41 %)。 - **ツール使用 & ウェブ閲覧:** τ²‑Bench と BrowseComp において顕著な向上を示し、モデルのツール実行とウェブサイトナビゲーション能力が改善されています。 - **複雑推論:** HLE ベンチマークで +12.4 %(42.8 %)に達し、チャット・創作執筆・ロールプレイシナリオでの性能も向上しています。 リリースには、新しい *思考モード* — Interleaved Thinking, Preserved Thinking, Turn‑level Thinking — が含まれ、ツール使用と複雑なエージェント操作を強化します。GLM‑4.7 は 17 の評価テスト(例:MMLU‑Pro, GPQA‑Diamond, AIME 2025, IMOAnswerBench, LiveCodeBench‑v6)で競合他社より優れた性能を示しています。 ### Availability - **API アクセス:** Z.ai、OpenRouter などのパートナー経由で利用可能。ユーザーは「glm‑4.7」を選択するか、API リクエストで直接呼び出すことができます。 - **ローカルデプロイメント:** 重みは HuggingFace と ModelScope に公開されており、vLLM および SGLang 推論用の公式ドキュメントがあります。 - **価格とアップグレード:** GLM Coding Plan の購読者は自動でアップグレードされます。新規ユーザーは Claude レベルの性能を約 1/7 の価格で、使用量上限が 3 倍になるメリットがあります。 ### Ecosystem impact リリースはすでに人気のコーディングエージェント(Claude Code, Kilo Code, Cline, Roo Code)へ統合されており、Vibe Coding の UI 改善と同時期です。手頃な価格で高性能なコーディング支援とオープンウェイトを提供することで、GLM‑4.7 はソフトウェア開発ワークフロー全体のコスト低減と生産性向上が期待されています。 --- **Key points retained:** All major quantitative gains, new thinking modes, benchmark superiority, availability channels, pricing structure, local inference support, and ecosystem integrations are explicitly mentioned. Unnecessary inferences have been removed, and vague phrasing (e.g., “clear performance boost”) has been replaced with concrete data.