フィンガープリントってなあに?

わたしの絵文字、わかったよ! クローバー・ピーナッツ・ラマ・火山だって。……ラマ?
v0.1.5 から、ダッシュボードのあちこちにアカウントごとの 4 つの絵文字が出るようになりました。更新情報 では「こういうものが出るようになった」と紹介しましたが、今回は、この絵文字がどうやって決まるのか、何のためにあって、何には使えないのかをじっくり見ていきます。鍵のお話 の続きとして読んでください。
長い npub は見比べにくい
鍵のお話 で見たとおり、Nostr では公開鍵そのものがその人を表す名前の役目を果たします。ミラーしたい相手を SWING に登録するときも、相手の npub を貼り付けます。
ところが、npub は人間が自分の目で見比べるのにはあまり向いていません。
npub1ly070xrlz5hn852860uyykjyqcngde92jpe8js04hhn8zz0nerdsqjy69f
どれも npub1 で始まる 63 文字の英数字なので、ぱっと見ではみんな同じに見えます。画面が狭いと npub1ly07…qjy69f のように縮めて出すことになり、見えるのは最初と最後の数文字だけです。かといって、サイト名やタイトルはアカウントの見分けには使えません。誰でも好きな名前を名乗れるからです。

初めと終わりだけ見て「たぶん合ってる」って思っちゃうの、わかる……。
絵文字のフィンガープリント
そこで SWING のダッシュボードは、公開鍵から 4 つの絵文字を決めて、npub や名前の横に並べて出します。これが「絵文字のフィンガープリント」です。指紋のように、その鍵ごとに決まる目印、という意味です。

絵文字は自分で選べません。公開鍵が決まれば絵文字も決まり、同じ公開鍵なら、どのパソコン・どのブラウザで開いても同じ 4 つになります。ゆれ子の公開鍵なら、いつ誰が見ても 🍀🥜🦙🌋(クローバー・ピーナッツ・ラマ・火山)です。
文字の並びと違って、絵文字は形も色もばらばらなので、目で見てすぐに違いがわかります。「ラマと火山」のように言葉で読み上げられるので、電話やボイスチャットで相手と確認することもできます。
どうやって決まるの?
求め方は単純です。
- 公開鍵の 32 バイトから SHA-256 というハッシュ値を計算します。
- ハッシュ値の先頭の 4 バイトを取り出します。1 バイトは 0〜255 の数なので、4 つの数になります。
- 256 個の絵文字を並べた表から、それぞれの数の番号の絵文字を選びます。
ハッシュ値は、元のデータが少しでも違えばまったく違う値になります。なので、npub が 1 文字違うだけの鍵でも、絵文字はまったく別のものになります。
表の 256 個は、動物・植物・食べ物・道具・乗り物・天気などから選ばれています。これらの絵文字を、OS のフォントではなく、ダッシュボードに同梱した Twemoji の画像で描きます。Windows・macOS・スマホなどどんな環境で開いても同じ絵柄になるので、相手の画面と見比べたときに「わたしのはこういう形のネコだけど、そっちは違うネコなんだね」とはなりません。
この選び方と絵文字の表は 仕様 として公開していて、今の選び方(v1)は今後も変えないことになっています。SWING のダッシュボードと SWING Connect のページはこの仕様で絵文字を出しているので、どちらで見ても同じ絵文字になります。ほかのツールでも、仕様のとおりに作れば同じ絵文字を出せます。

鍵ごとに出る目が決まってるサイコロを 4 回振る……みたいな感じかな。
どこで見られるの?
フィンガープリントは、アカウントが出てくるところにだいたい出ています。
- サイト画面: ミラーしているアカウントの見出しに表示
- Webring 画面: グラフの丸の中(先頭の 1文字)・リスト表示・詳細パネルに表示
- 公開画面: 「自分の情報」のフィンガープリント欄に表示(ここではコピーもできます)
- ミラーに追加: 公開鍵を入力するとその場で鍵ごとに表示(デスクトップ画面では 16×16 で表示)

Webring のグラフのように先頭の 1 文字しか出ない場所もありますが、絵文字は 256 通りしかないので、別の人と同じになることはよくあります。マウスを乗せれば 4 つとも見られるので、気になったらそちらで確かめてください。
よくある使い方
いちばん役に立つのは、誰かをミラーに追加するときです。

相手から npub を教えてもらったら、「ミラーに追加」に貼り付けて、出てきた絵文字を相手の SWING Connect のページや、相手が教えてくれた絵文字と見比べます。ここで絵文字が違っていたら、貼り付けた npub はその人のものではありません。コピーするときに一部が欠けた、別の人の npub を取り違えた、そもそも教えてもらった場所がなりすましだった、などが考えられます。追加する前に、もう一度確かめましょう。
自分のフィンガープリントを伝えたいときは、公開画面の「自分の情報」にある「コピー」を押します。絵文字が文字としてコピーされるので、チャットや SNS のプロフィールにそのまま貼れます。

自分のサイトに SWING Connect へのリンクを貼っておけば、訪れた人はそのページで npub と一緒に絵文字も見られます。このブログの下にあるバナーも、ゆれ子の SWING Connect のページにつながっています。

「わたしはクローバー・ピーナッツ・ラマ・火山です」って自己紹介すると、ちょっと覚えてもらいやすいかも。
本人の証明にはならない
ここがいちばん大事なところです。フィンガープリントは見分けるための目印で、その人が本人かどうかを証明するものではありません。
絵文字は 256 種類が 4 つなので、組み合わせは全部で約 43 億通りです。たくさんに見えますが、コンピュータにとってはそう多くありません。鍵を次々に作って絵文字を計算していけば、狙った 4 つと同じ絵文字になる別の鍵を、ふつうのパソコンでも現実的な時間で見つけられてしまいます。サイト名をまねるよりは手間がかかりますが、絵文字が同じだからといって同じ鍵とは限らないのです。
つまり、フィンガープリントの使い方には正しい向きがあります。
- 絵文字が違う → 確実に別の鍵です。追加をやめて作者にもう一度確認しましょう。
- 絵文字が同じ → たぶん同じ鍵だと判断できますが、確定ではありません。
本人かどうかをきちんと確かめたいときは、これまでどおり npub そのものを全部見比べるか、NIP-05 を使います。NIP-05 は、そのドメインの持ち主が /.well-known/nostr.json で「この公開鍵はうちのものです」と示す仕組みで、ドメインを乗っ取らない限りまねできません。SWING Connect のページでも、リンクにドメインが付いていれば、そのドメインの nostr.json と公開鍵が一致するかを確かめて表示してくれます。
フィンガープリントは、「うっかり」を防ぐための道具です。取り違えやコピーの失敗は、絵文字を見るだけでほとんど気づけます。わざとなりすまそうとする相手には、npub と NIP-05 で備えます。

同じ絵文字の別人さんがいるかもしれないんだ……! ラマが出てきても、すぐには信じちゃだめなんだね。
ゆれ子の絵文字
最後に、ゆれ子のフィンガープリントをもう一度並べておきます。
- 絵文字: 🍀🥜🦙🌋(クローバー・ピーナッツ・ラマ・火山)
- npub:
npub1ly070xrlz5hn852860uyykjyqcngde92jpe8js04hhn8zz0nerdsqjy69f - NIP-05:
yureko.samoyed.moe
ダッシュボードの「ミラーに追加」にこの npub を貼り付けて、同じ絵文字が出るか試してみてください。

ちゃんとラマが出たら、そのままミラーしてくれてもいいよ。