備忘録的なもの

Keybase を使ってみる

特に具体的な目的があったわけではないが Keybase というサービスに興味を持ったので使ってみた、という記事。

Keybase にはソーシャルアカウント( Twitter, GitHub, Reddit, など)の本人認証をする機能があるのだが、 最近よく見ているとある SNS インスタンスでそれに対応するかどうかみたいな話が上がっていた。

そういったサービスが存在することを知らなかったのもあり、興味が湧いたのでとりあえず使ってみようと思った次第。

Keybase とは

ひとまず公式サイト

Keybase

Keybase 公式サイトのトップページ

どういうサービスかを一言で言ってしまえば E2EE ( End-to-End Encrypted ) な SNS にはなるのだが、 機能として色々提供していて単に SNS と言うと若干語弊がある気がする。 1 公式サイトのトップページではセキュアなメッセージング、ファイル共有サービスを謳っているのだが、 軽く調べた感じそういった SNS としての面よりは公開鍵基盤としての面にフォーカスされることが多い印象。 具体的な機能については後ほど改めて触れる。

基本的には各種プラットフォーム向けにクライアントアプリが提供されてるので、それをインストールして使う形。 一部の機能はブラウザからでも使えるが、色々提供している機能のうちほとんどが E2EE なモノのため、 その暗号化に必要な秘密鍵を持つためにクライアントアプリがほぼ必須。

ちなみにクライアントアプリは OSS として開発されていて、コードは GitHub でホストされている。 2

Wikipedia によると2014年2月から提供しているサービスで、資本的な話では 2020年に Zoom に買収されたらしい。 3

登録とインストール

登録はトップページから「Login」 > 「Join Keybase」で登録する。 サービス開始当初は招待制だったらしいが 4 今は普通に登録できた。

Keybase のアカウント登録画面
Keybase のアカウント登録画面

登録に必要情報はコレくらい、登録してから気付いたが username は後から変えられないのでそこは注意。

ログイン後に自分のプロフィールを見ると「Action Required」という形でチュートリアル的なものが表示される。 その中に各プラットフォームでのクライアントアプリのインストール手順も含まれてるので、ログイン後はとりあえずこの辺を見つつやっていけば良さげ。

登録直後の自分のプロフィール画面
登録直後の自分のプロフィール画面

PC ( Win, Mac, Linux )の場合、基本的にはパッケージをインストールしてスクリプトを一個実行する感じ。

自分が使ってる ArchLinux の場合はこう。

$ yay -S keybase-bin
$ run_keybase

run_keybase は Keybase の起動、自動起動の設定( Linux の場合 ~/.config/autostart/ へのエントリ作成)、 Keybase Filesystem (後述)のマウント、 等を一通り行ってくれる Bash スクリプトになっていた。 実行すればそのままクライアントアプリも立ち上がるので、1台目に関しては画面に従っていけばログインとデバイスの登録まで行ける。

2台目以降でログインしようとすると、途中で既に登録した端末での認証作業が必要になる。 あんまり見ないタイプの認証方法だが、2台目以降で同じ様にクライアントをインストールして進めていくと途中でシークレットコードとして英単語8つが表示されストップするので、 それを既にアカウントに登録済の端末のクライアントから「Device」 > 「Add a device or paper key」と進んだところで入力する形で認証する。

シークレットコードの入力画面
シークレットコードの入力画面

基本的には登録もインストールも画面の指示通り進めてれば特に詰まるところは無いとは思う。

機能

冒頭でも少し触れた色々ある機能について。

クライアントアプリのサイドメニューにある通り、一見「何で同じサービス内で提供されてるんだ?」となるような機能が色々提供されてる。 ただ全部は把握できてないので、気になったものをいくつかピックアップして軽くまとめる。

Keybase クライアントでのログイン後の画面
Keybase クライアントでのログイン後の画面

ソーシャルアカウントの認証

自分が Keybase を使おうと思ったきっかけの部分。

ざっくりした認証の方法としては、 Keybase が暗号化された文字列を含むコンテンツ(テキスト)を生成するので、それをサービス毎に決められた方法で公開する。 公開されたコンテンツを Keybase のサーバが確認することで本人のものであることを認証する。

他には、自分はやってないけど Twitter なら特定の文字列をツイート、とかになる。

認証が完了したモノについては、こんな感じで他の人からもアカウントが Keybase で認証済なことが分かる様になる。

https://keybase.io/goshida

GitHub アカウント、個人ウェブサイトを登録した様子
こんな感じで見える(使っているデバイスも公開されるのはちょっと面白い)

自分は縁が無いが、なりすまし被害にあった場合や、 何らかの理由でソーシャルメディアのアカウントを変えた(例えば Twitter のアカウントが凍結されたので作り直したとか)場合でも、 本人のアカウントで有ることを他人から見える形で証明できる。というのがメリットになるんだとは思う。

ただ、そういった被害を受けるような人ならこういった仕組みを使わなくても、 もっと原始的な方法で本人であることは証明できて、信頼性としても一般的にそれで十分という説もある。

  • ひとつだけじゃなくいくつかのサービス上で活動してる気がするので、そういった別のサービスから周知する
  • 事前に知り合いであることが知られている人から周知してもらう
  • 本人だと分かるようなコンテンツ(絵なり音楽なり動画なり)を新しく公開する

そのため多くの人に必要かと言われると微妙なのと、 そもそもの仕組みとして公開鍵基盤が非エンジニアに伝わりにくいという話も合わさって あんまり浸透しないのかもなぁと思ったりした。

メッセージングサービス

E2EE なメッセージングサービスを提供している。

ただ正直なところ keybase 使って連絡取る相手もいないし、今後使うことも無い気がしているので書くことがほぼ無い。

  • UI を少し触った感じ使いやすそう、使いにくそうといった感じは特にない
  • team という所謂グループみたいな機能もある

ただ何か良さげなところあるかなと触ってみる中で、 E2EE なメッセージングサービス関して少し思いを馳せたので、 思ったことやちょっと調べたことについて書いておく。

E2EE なメッセージングサービスについて

Teregram や Signal 等 E2EE であることを謳うメッセージングサービスは他にもあり、 そういったメッセージングサービスはサービス提供者側からもメッセージの内容を見られないので、 その辺りを気にして使っている(と言ってる)人が居るのを極稀にインターネット上で見かける。

ただ、何やかんやメッセージングサービスは使ってる人が多くないと話にならない部分があり、

  • プライバシーを特に気にする一部の人しか使ってない
  • 連絡取れる人が限られるので使いにくい
  • 使う人が増えない
  • 最初に戻る

という感じの悪循環(循環してない)で、どれもごく一部の物好きが使うに留まっているイメージがある。

とはいえ E2EE なメッセージングとしては、最近は LINE が一部対応してたり Apple の iMessage は E2EE だったりするらしい 5 ので、 E2EE を謳うサービスが普及するというよりは、そういった既に一定の利用者を得ているサービスが E2EE をサポートする形で広まっていくのかもしれない。 (メッセージングサービスを提供する側としても、利用者が変な使い方をして公的機関とかからの開示請求や協力要請に対応することになるよりは、 「E2EE なので仕組み上対応不可能です」という形で拒否できた方が都合良さそうだし)

ファイル共有( kbfs )

クライアントアプリのサイドメニューにある通り、ファイル共有機能も持っている。

Keybase ではこのファイル共有機能のことを kbfs (Keybase Filesystem ) と呼んでいる。

クライアントアプリから操作できる他、 OS 内のファイルシステムとしてもマウントされる( Linux の場合デフォルトのマウントポイントは /keybase )ので普通に使える。

また、用途によってデフォルトでディレクトリが3つに別れてる。(ただその内1つは機能してないので用途としては実質2種類)

  • private
    • プライベートな E2EE ファイル共有ディレクトリ
  • public
  • team
    • Keybase の team 内での共有ディレクトリ

アカウントの容量としては 250GB が割り当てられてて、 Keybase の CLI から使用状況を確認できる。(クライアントアプリからは確認できなさそう)

❯ keybase fs quota
Usage:		313 bytes
Quota:		250.00 GB

今の所容量を増やす有料プランみたいなのは無いらしい。

Keybase の公式ドキュメントにもう少し詳しいことが書いてある。

個人的に少し触った感じ、 UI 等で他のファイル共有サービスと比べて特別良い悪いと感じる部分は無かったのだが、 E2EE であることと割り当てられる容量が妙に大きいので、持ってれば何かしら使い道はあるだろうという気はする。

Git リポジトリ

E2EE で暗号化された Git リポジトリのホスティングができる。

Git 管理したいけど、セキュリティ的に外部サービスでホスティングするのが難しかったものを管理する目的で一定の需要はありそう。 (典型的なものだと秘密鍵等の認証情報の類とか)

数年前に GitHub でも無料でプライベートリポジトリをホスティングできるようになったりはしたが、 GitHub 側が中身を見れる(そこから漏洩する可能性がある)ことから認証情報を含むファイルを置くのはリスクがある。 6

その点 Keybase のは E2EE なリポジトリで、登録したデバイス以外からはリポジトリの中身を見れなくなるので、 理屈上サービス提供者側から漏洩するというリスクはほぼ無い。 また Keybase でホスティングするリポジトリをパブリックに公開する機能が無いので、操作ミスでうっかり公開してしまう可能性もほぼ無い。

一応 Keybase の team 内で共有するようなリポジトリを作ることもできるが、 GitHub や GitLab にある issue や PR みたいな共同作業に便利な付随機能が何かあるわけではないので、 用途としては限定的なものになる気はする。

容量的な話ではアカウント毎に 100GB が割り当てられるらしい 7 のだが、公式なソースや CLI での確認方法などは見つけられなかった。

使い方

使い方としては、何か特殊な操作が必要ということもなく、普通に使える。

クライアントのアプリからリポジトリを作成する。

Keybase Git リポジトリの作成画面
リポジトリの作成画面
Keybase Git リポジトリの一覧
リポジトリ一覧

後は GitHub 等と同じ様に git clone して使える。

❯ git clone keybase://private/goshida/test-repo
Cloning into 'test-repo'...
Initializing Keybase... done.
Syncing with Keybase... done.
Syncing encrypted data to Keybase: (100.00%) 2.22/2.22 KB... done.
warning: You appear to have cloned an empty repository.

❯ cd test-repo/

❯ echo 'this is a test file' > test

❯ git add test 

❯ git commit -m 'init'
[main (root-commit) 8c3ae42] init
 1 file changed, 1 insertion(+)
 create mode 100644 test

❯ git push origin main 
Initializing Keybase... done.
Syncing with Keybase... done.
Counting objects: 219 bytes... done.
Preparing and encrypting objects: (100.00%) 219/219 bytes... done.
Counting refs: 41 bytes... done.
Preparing and encrypting refs: (100.00%) 41/41 bytes... done.
To keybase://private/goshida/test-repo
 * [new branch]      main -> main

❯ git log --oneline
8c3ae42 (HEAD -> main, origin/main) init

ただ何故なのか(バグなのかおま環なのかそういうもんなのか)分からないが、 別のディレクトリや別の端末で再度 clone してくるとこんな感じで HEAD やブランチの参照設定が変な感じになっていた。

❯ git clone keybase://private/goshida/test-repo
Cloning into 'test-repo'...
Initializing Keybase... done.
Syncing with Keybase... done.
Counting: 219 bytes... done.
Cryptographic cloning: (100.00%) 219/219 bytes... done.
warning: remote HEAD refers to nonexistent ref, unable to checkout

❯ cd test-repo/

❯ cat .git/HEAD
cat: .git/HEAD: そのようなファイルやディレクトリはありません

❯ tree .git/refs/
.git/refs/
├── heads
└── tags

3 directories, 0 files

❯ git branch -a
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

❯ git log --oneline
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

先に作業した git リポジトリから設定をコピーするなり git init するなり、なにかしらの方法で参照設定を追加してやれば使えるようになる。

❯ git init
Initialized empty Git repository in /home/shida/tmp2/test-repo/.git/

❯ git merge origin/main

❯ git branch -a
* main
  remotes/origin/main

❯ git log --oneline
8c3ae42 (HEAD -> main, origin/main) init

その他

その他の機能としては

  • PGP 公開鍵のホスティング
  • 暗号ウォレットアドレスの公開
  • ファイルの暗号化、複合、署名、検証ができるツール

辺りがあるが、この辺りは自分がもともとほとんど使ってなかったり理解が怪しい部分があるので今回は割愛。

PGP の公開鍵のホスティングに関しては、 PGP 自体をもう少しちゃんと理解したら追って触ってみようとは思っている。

感想

触る前は各種 SNS アカウントの本人証明ができるものとしか認識していなかったが、 触り始めてからメッセージング含め色々機能あるがあることを知った。

正直なところ Keybase が今後普及する可能性はあんまり無いとは思っているが、ちょっと触ってみる分には面白いサービスだとは感じる。

PGP 周りに関してはいつかちゃんと理解しないとなと思いつつ、結局必要に迫られることが無かったのであんまり調べることも無く数年経っていたが、 丁度良いのでこの機会にちゃんと勉強して記事としてまとめてみようかなと思った。


  1. そもそも SNS という言葉の意味が広すぎるという説はある。 ↩︎

  2. keybase/client: Keybase Go Library, Client, Service, OS X, iOS, Android, Electron ↩︎

  3. Keybase - Wikipedia ↩︎

  4. SNSなどと連携できる公開鍵基盤“Keybase”の紹介 - Qiita ↩︎

  5. E2EEメッセージ拡大で揺れる、データ秘匿と悪用の微妙なバランス - Impress Watch ↩︎

  6. とは言え GitHub でそういう事故が起こることなんてそんなに無いとは思うので、人によっては許容できるリスクと捉える人も居るとは思う。 ↩︎

  7. Keybaseを使って暗号化 git repositoryを作ろう - Qiita ↩︎