ynotbit は、P2P の暗号化メッセージングプロトコル Bitmessage のデスクトップクライアントです。C で書かれた軽量な実装 notbit をネットワークエンジンに使い、画面は Qt Widgets (C++20) で作りました。Windows、macOS (Apple Silicon)、Linux で動き、画面は日本語にも対応しています。
Bitmessage とは
Bitmessage では、メッセージは受信者の公開鍵で暗号化され、ネットワーク上のすべてのノードに配られます。各ノードは届いたメッセージの復号を試し、鍵を持つ受信者だけが読めます。中央のサーバーはなく、誰が誰に送ったかも外から見えにくい仕組みです。送信時にはスパム対策としてプルーフ・オブ・ワークを計算します。アドレスは BM- で始まる文字列です。
主な機能
- 鍵は自分の手元に: ID の鍵はパスワードで守られた保管庫ファイルに、メールは別の暗号化されたメールボックスファイルに保存します。
- ロック中も受信: 鍵を持たないリレーが、保管庫をロックしている間もネットワークのメッセージを集め続け、ロックを解除したときに自分宛てのメールを取り出します。
-
Markdown のメール: 作成画面は MarkText 風のビジュアル Markdown エディターです。返信は
>によるメール風の引用で、引用部分も同じエディターで編集できます。 -
画像入りのメール: Bitmessage には添付ファイルがないため、画像は Markdown の
data:URL としてメールの中に入れて送ります。1 通に収まるよう自動で縮小します。 - チャンネルと購読: 共有アドレスでやり取りするチャンネルと、ブロードキャストの購読をフィード表示で読めます。
- アドレス帳: 連絡先の名前はこのメールボックスの中だけに保存され、送信されることはありません。
- Tor 経由の接続: SOCKS5 プロキシを設定できます。
- 7 言語の画面: 日本語、英語、簡体字中国語、繁体字中国語、韓国語、ロシア語、ウクライナ語。
| 購読 | メールの中の画像 | 返信 |
|---|---|---|
![]() |
![]() |
![]() |
インストール
v0.6.0 のリリースページ からダウンロードします。
-
Windows (x86_64):
ynotbit-windows-x86_64.zipを展開し、ynotbit.exeを起動します。 -
macOS (Apple Silicon、macOS 15.6 以降):
ynotbit-macos-arm64.zipを展開し、ynotbit.appを「アプリケーション」フォルダーに移します。アドホック署名のみで Apple の公証を受けていないため、初回は開けないという警告が出ます。その場合は システム設定 → プライバシーとセキュリティ を開き、このまま開く をクリックしてください。 -
Linux (x86_64):
ynotbit-x86_64.AppImageに実行権限を付けて起動します。
chmod +x ynotbit-x86_64.AppImage
./ynotbit-x86_64.AppImage
使い始める
- 起動したら保管庫 (
.bmvault) を作成し、パスワードを決めます。 - メールボックス (
.bmmail) を作成します。 - メニューの ID → ID を作成… で自分の BM- アドレスを作ります。
- メールを書く で宛先に相手の BM- アドレスを入れて送信します。進み具合 (受信者の鍵の取得、プルーフ・オブ・ワーク、受領確認) は 送信トレイ で確認できます。
- ID → チャンネルに参加または作成… でフレーズを入力すると、そのチャンネルに参加できます。
保管庫とメールボックスは別々のファイルです。ファイル → メールボックスと保管庫をバックアップ… で、両方をまとめてバックアップしてください。メールボックスだけでは暗号鍵を復元できません。
仕組み (技術メモ)
- 2 つのプロセス: 画面のアプリ (C++20、Qt Widgets) とは別に、ネットワークを担当する notbit エンジン (C) をリレーとして動かします。リレーは保管庫やメールボックスの鍵を一切受け取りません。
-
オブジェクトストア: ネットワークから届いたオブジェクトは 1 つの SQLite ファイル
objects.sqliteに保存されます。リレーが書き込み、保持期間の上限 (既定 2 GiB / 90 日) に合わせて整理し、アプリが読み取ります。 - 暗号: 保管庫は Argon2id (64 MiB、3 パス) と XChaCha20-Poly1305 (libsodium)、メールボックスは SQLCipher で暗号化しています。
-
画像: 1 つの Bitmessage オブジェクトに収まるよう、画像は描き直してメタデータ (EXIF や位置情報) を落とし、
data:URL が 160 KB 以内になるまで縮小します。収まれば可逆の PNG、収まらなければ品質を下げた JPEG にします。 - アップデート通知: ynotbit のリリースアドレスからの署名付きブロードキャストで新しいバージョンを知らせます。購読は不要で、設定でオフにできます。
開発メモ: QTextDocument で画像が重くなる罠
Qt の QTextDocument::loadResource() をオーバーライドすると、Qt 標準のリソースキャッシュは使われなくなります。さらに QTextLayout は描画のたびに行を組み直し、そのつど画像のサイズを問い合わせます。写真入りの投稿が並ぶフィードでは、1 回の描画で同じ JPEG を 5 回ほどデコードしていて、Mac ではスクロール 1 フレームに約 90 ms かかっていました。デコード結果を共有キャッシュに入れ、QTextImageFormat に幅と高さを先に設定してレイアウト時の問い合わせをなくしたところ、ベンチマークで 1 フレームあたり約 1 ms になりました (次のリリースに入ります)。
注意
- 開発中のソフトウェアです。独立したセキュリティ監査は受けていません。
- 画像以外のファイル添付には対応していません。
リンク
- GitHub: https://github.com/yshurik/ynotbit
- 日本語の README: https://github.com/yshurik/ynotbit/blob/main/README.ja.md
- 質問や感想は GitHub の Issues か、Bitmessage のチャンネル
ynotbit(フレーズynotbit) へどうぞ。
日本語は母語ではないため、不自然な表現があればコメントで教えていただけるとうれしいです。



