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

ゆれ子

わたしの絵文字、わかったよ! クローバー・ピーナッツ・ラマ・火山だって。……ラマ?

v0.1.5 から、ダッシュボードのあちこちにアカウントごとの 4 つの絵文字が出るようになりました。更新情報 では「こういうものが出るようになった」と紹介しましたが、今回は、この絵文字がどうやって決まるのか、何のためにあって、何には使えないのかをじっくり見ていきます。鍵のお話 の続きとして読んでください。

長い npub は見比べにくい

鍵のお話 で見たとおり、Nostr では公開鍵そのものがその人を表す名前の役目を果たします。ミラーしたい相手を SWING に登録するときも、相手の npub を貼り付けます。

ところが、npub は人間が自分の目で見比べるのにはあまり向いていません。

npub1ly070xrlz5hn852860uyykjyqcngde92jpe8js04hhn8zz0nerdsqjy69f

どれも npub1 で始まる 63 文字の英数字なので、ぱっと見ではみんな同じに見えます。画面が狭いと npub1ly07…qjy69f のように縮めて出すことになり、見えるのは最初と最後の数文字だけです。かといって、サイト名やタイトルはアカウントの見分けには使えません。誰でも好きな名前を名乗れるからです。

ゆれ子

初めと終わりだけ見て「たぶん合ってる」って思っちゃうの、わかる……。

絵文字のフィンガープリント

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

サイト画面のアカウントごとのカードで、npub の前に 4 つの絵文字が枠に囲まれて並んでいる

絵文字は自分で選べません。公開鍵が決まれば絵文字も決まり、同じ公開鍵なら、どのパソコン・どのブラウザで開いても同じ 4 つになります。ゆれ子の公開鍵なら、いつ誰が見ても 🍀🥜🦙🌋(クローバー・ピーナッツ・ラマ・火山)です。

文字の並びと違って、絵文字は形も色もばらばらなので、目で見てすぐに違いがわかります。「ラマと火山」のように言葉で読み上げられるので、電話やボイスチャットで相手と確認することもできます。

どうやって決まるの?

求め方は単純です。

  1. 公開鍵の 32 バイトから SHA-256 というハッシュ値を計算します。
  2. ハッシュ値の先頭の 4 バイトを取り出します。1 バイトは 0〜255 の数なので、4 つの数になります。
  3. 256 個の絵文字を並べた表から、それぞれの数の番号の絵文字を選びます。

ハッシュ値は、元のデータが少しでも違えばまったく違う値になります。なので、npub が 1 文字違うだけの鍵でも、絵文字はまったく別のものになります。

表の 256 個は、動物・植物・食べ物・道具・乗り物・天気などから選ばれています。これらの絵文字を、OS のフォントではなく、ダッシュボードに同梱した Twemoji の画像で描きます。Windows・macOS・スマホなどどんな環境で開いても同じ絵柄になるので、相手の画面と見比べたときに「わたしのはこういう形のネコだけど、そっちは違うネコなんだね」とはなりません。

この選び方と絵文字の表は 仕様 として公開していて、今の選び方(v1)は今後も変えないことになっています。SWING のダッシュボードと SWING Connect のページはこの仕様で絵文字を出しているので、どちらで見ても同じ絵文字になります。ほかのツールでも、仕様のとおりに作れば同じ絵文字を出せます。

ゆれ子

鍵ごとに出る目が決まってるサイコロを 4 回振る……みたいな感じかな。

どこで見られるの?

フィンガープリントは、アカウントが出てくるところにだいたい出ています。

デスクトップ画面のミラーに追加のダイアログ。公開鍵の欄にゆれ子の npub が入っていて、その下にクローバー・ピーナッツ・ラマ・火山の 4 つの絵文字がドット絵で並び、縮めた npub が続いている

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

よくある使い方

いちばん役に立つのは、誰かをミラーに追加するときです。

サイト画面のミラーに追加のパネル。入力欄に 2 つの npub が入っていて、その下に鍵ごとに「ギター・UFO・荷物・波」と「荷物・ネコ・こいのぼり・鉛筆」の絵文字と、縮めた npub が並んでいる

相手から npub を教えてもらったら、「ミラーに追加」に貼り付けて、出てきた絵文字を相手の SWING Connect のページや、相手が教えてくれた絵文字と見比べます。ここで絵文字が違っていたら、貼り付けた npub はその人のものではありません。コピーするときに一部が欠けた、別の人の npub を取り違えた、そもそも教えてもらった場所がなりすましだった、などが考えられます。追加する前に、もう一度確かめましょう。

自分のフィンガープリントを伝えたいときは、公開画面の「自分の情報」にある「コピー」を押します。絵文字が文字としてコピーされるので、チャットや SNS のプロフィールにそのまま貼れます。

公開画面の自分の情報のパネル。npub と hex の下に、フィンガープリントとして「荷物・ストロー付きカップ・ブロッコリー・流れ星」の 4 つの絵文字とコピーボタンが並んでいる

自分のサイトに 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 を貼り付けて、同じ絵文字が出るか試してみてください。

ゆれ子

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