
2026/01/26 4:31
ATProto の鍵管理について、私の判断は正しかった。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
著者は、デフォルトの
did:plc の代わりに did:web を識別子として使用し、自身の NixOS サーバー上で ATProto アカウントを設定しました。公開鍵と秘密鍵のペアを生成し、did.json ファイルをウェブサーバーにアップロードし、DNS/CORS ヘッダーを構成しました。PDS 上でアカウントを作成すると「deactivated」と表示され、手動で curl リクエストとログの確認が必要でした。それを解決するために ATProto Touchers Discord でアカウントを削除し、最初からやり直しました。getRecommendedDidCredentials が返す公開鍵に置き換えた後、著者は Bluesky にログインし「Profile does not exist」というエラーが表示されました。これは did:web がバーナー(ブラックリスト)に登録されたことを示しています。このバーニングによりプロファイルは非表示になり、いいねやフォローも見えず、投稿は AppView の「invalid」プロファイルとして表示されました。
このアカウントのバーニングが解除されたのは、HackerNews 上で可視性が示されたことで開発者の Bryan Newbold が介入した後でした。著者は
getRecommendedDidCredentials が標準的な DID ドキュメントフィールドと若干異なる JSON キーを返すため、手動で編集する必要があることを指摘し、did:web ユーザー向けのドキュメントやツールが不十分である点を強調しています。
彼らはバーニングメカニズムを Mastodon のデータベース削除問題と比較し、中央権威がインスタンスのアイデンティティを無効化できる方法を示しています。全体として、本当に分散型であることは企業管理なしに自己ホスト型ソーシャルメディアを可能にしますが、現在の実践ではツールやサポートのギャップにより十分に機能していないというメッセージです。
本文
ATProto の鍵管理について私が正しかった
ホーム | 公式サイト
注記:
本投稿は「実際に起きたことの説明」と「私自身の分析」の2部構成に改訂されています。
私は一般的に ATProto を好みませんが、特定の設計決定とその結果について誠意ある批判を行うつもりです。この投稿が HackerNews で upvote を獲得したことがチームの注目を集めたようで、ミッション達成と言えます。以降、私のアカウントは手動で復元されました。これまで同様の問題に直面していた他ユーザーには同じ対応がなかったと認識しています。
何が起きたか
本日、Bluesky で使用する ATProto アカウントを
did:web を使って作成しようとしました。手順は以下の通りです:
-
PDS ソフトウェアを自分が管理しているサーバにセットアップ
NixOS を利用しているため、非常に簡単でした。 -
を作成did:web
これは公開鍵・秘密鍵ペアを生成することです。最初は Mai Lapyst のチュートリアルに従おうとしましたが、古くて重要なステップが抜けていました。 -
ドキュメントを自分の Web サーバへアップロードし、適切な DNS エントリを設定did.json
ほぼ問題なくできました。ただし
に対して CORS ヘッダーも設定する必要がありました。did.json -
新しい PDS 上でアカウント作成
招待メールを受け取りアカウントを作りましたが、状態は「deactivated(停止)」になり、有効化できませんでした。これを手動で curl でリクエストし、サーバの PDS ログに出るエラーを読むことで対処しました。 -
ATProto Touchers Discord で助けを求め、指示通りアカウントを削除
(Discord の推奨はアカウントを削除することでした) -
最初からやり直し。
が返す公開鍵で DID 内の公開鍵を書き換えて再作成getRecommendedDidCredentials -
Bluesky (bsky.app) にログイン すると「Profile does not exist(プロフィールが存在しません)」というエラーが出ました。
この時点で、GitHub の issue を見つけたところ、完全に空のアカウントを削除した結果、私の
did:web がシステムの残りのほぼ中央集権的部分(AppView)からブラックリストに載せられたことが示唆されていました。この状態は「burned(焼却)」と呼ばれます。後日経験豊富なユーザーから、これは Bluesky AppView の既知だが未文書化の挙動であると確認されました。
友人に Blusky で見てもらった結果:
- Bluesky では私の存在は全く認識されず(いいねやフォローも見えません)
- Blacksky プロダクション では表示名とバイオは見えるものの、投稿は表示されない
- Blacksky の AppView では逆に「invalid(無効)」プロフィールとして投稿が現れました
手動で「unburn」することはできたものの、サポートリクエストとは関係ありませんでした。この記事は Hacker News のフロントページに掲載され、Bryan Newbold にも目に留まりました。これは問題です。
意見ゾーン
以前、「Key Management, ATProto, and Decentralization」という記事を書き、ATProto が分散化をどう扱っているか不満を述べました。その後 Blacksky は AppView を立ち上げ、理論上は真に分散化された Blusky エクスペリエンスが可能になりました。私の基準は、Bluesky の企業ハードウェアで動作する何かを使わずにアカウントを作ることでした。
私は好きではないシステム(Signal, Matrix, Mastodon)を使う理由は、関心ある人々とのソーシャルインタラクションが可能だからです。ATProto と特に Bluesky も同様で、投稿しない友人たちと RSS でフォローしているものの、彼らの投稿には相互作用できません。このネットワークを利用し、新しい分散化 AppView レイヤーがどれほど機能するかを理解したいという動機があります。
このプロセスはほとんど文書化されておらず、個々のエンドポイントはある程度説明されていますが、全体像をまとめた場所は GitHub の issue コメントにしかありません。
getRecommendedDidCredentials のドキュメント(未読部分)は以下のようになっています:
このサービスへ移行するアカウントの DID ドキュメントに含めるべき資格情報を記述してください。
ここで私は「移行中」ではなく、新規アカウントです。また、返される JSON キーはほぼ同じですが、実際に使えるように手作業で編集する必要があります。これは良くありません!
did:web は「より少ない中央集権化」または「自分の信頼を持ち込む」オプションとして推奨されていますが、一般ユーザー向けに使いやすいような取り組みがほとんど見られません。
さらに大きな問題は、中央集権的な「burn」が Bluesky を利用する人々との交流を妨げる点です。Mastodon には同様の仕組みがあります。Mastodon サーバを設置しデータベースを削除すると、既に連携したインスタンスは再度連携できなくなります。これは実際の問題ですが、私が投稿もフォローも行っていない状態で「burn」された
did:web では起こり得ません。
たとえ投稿やフォローをしていたとしても、それは特定の接続のみが焼却されるはずです。経験は損なわれますが、壊れるわけではありませんし、影響を受けたサーバ管理者と協力して修正できるはずです。同様に、Bryan Newbold が HackerNews でこの記事を見てくれたおかげでアカウントを取り戻せました。重要なのは一つの接続だけ(Blacksky を数えれば二つ)ですが、その AppView はまだ一般公開されていません。これが中央集権化であり、他に呼べるものではないと私は思います。
Bluesky も ATProto も好きではありません。コミュニティ主導のプロジェクトが巨額の資金を得て、我々全員が小さなソーシャルメディアサーバを自らホストする世界であれば良いのですが、そのような現実は存在しません。そのため VC バックされた企業ソーシャルメディアと相互運用しなければならず、これらのプラットフォームが「分散化」と名乗る際には本当にその機能を果たすべきだと思います。