ユーザー登録不要(匿名)で、メッセージ履歴の残らない、Webチャットアプリ作りました


# Webチャットアプリ SuzumeChunChun

**こちらのサービスは終了いたしました。ご利用いただき誠にありがとうございました。**

**以下の内容は、記録として残してあるだけです。SuzumeChunChunはご利用することはできません。**

## 紹介

完全に匿名で、秘密・プライバシーを守ることができるチャットアプリです。

他言されたら困るけど何かを伝えなければいけない場合や、もし自分が監視されているような状況にあるなど(?)、そんな場合に役に立つアプリだと思います。多分ジャーナリズム(?)なんかのために役に立つんじゃないかと勝手に思ってます。

スパイ映画などで、爆発する指令書が登場するシーンがありますが、爆発する指令書を作るより、このwebアプリを使った方が手軽に秘密を守ってメッセージが送信できます。

まだベータ版ですが、通常利用する範囲では、十分機能するはずです。

(こちらのURLはご利用いただけません 2021/12/30更新)
~~https://suzumechunchun.com~~

(サーバーがアメリカだからか、JavaScriptファイルが大きいからか、速度が少し遅く感じます。すいません！！)

- ユーザー登録が不要なので、個人情報は何も収集しません。
- メッセージの暗号化はブラウザ上で行われます。
- メッセージはサーバー上には一切保存されません。ブラウザ上で表示されて、一定期間後に自動的に削除されます。
- 一部のデータ(「チャンネル名」など)はサーバー上に保存されますが、(ほぼ)全て暗号化、もしくはハッシュ化されています(主キー、タイムスタンプだけ暗号化されません)。
- サーバー上のデータは一定時間後に自動的に削除されます。

セキュリティが重要なアプリなため、オープンソースにしています。
もし欠陥の報告をいただければ、その都度修正していきます。

https://github.com/yrichika/suzumechunchun



## 使い方


匿名性とプライバシーを守ることを徹底したがゆえに、少し面倒な利用方法になっていますが、一度仕様を把握すれば後は簡単だと思います。


### 0. 構造

ユーザー登録が不要なので、誰と誰がチャットするのかの把握が通常のチャットと違います。

多くのメッセージングアプリでは、特定のユーザーに向けてメッセージを送信することができますが、SuzumeChunChunでは、チャットルームのような場でのみメッセージを送信します。

SuzumeChunChunでは、1人の主催者（チャットルームの作成者・「ホスト」）がチャットルーム（「チャットチャンネル」）を作成し、そこに複数のチャットの相手(「クライアント」)を招待して、チャットをします。


### 1. 「合言葉」を用意する

まず一番最初に重要なことは、「合言葉」を用意することです。
パスワードと同じ目的で使われますが、これはパスワードとは違い、**自然言語の一文**であることが望ましいです。

ホストとクライアントの間で、事前に何らかの一文を用意しておいて下さい。
合言葉は、毎回変更できればよりいいですが、本物のスパイでなければそこまでしなくても大丈夫です。
独自の合言葉を考えるのは面倒なので、何かの本からの抜粋などがいいかと思います。
セキュリティ上はそれでも十分なはずです。

例えば、「祇園精舎の鐘の声、諸行無常の響きあり」を今回は合言葉にします。

後ほどこれの利用方法を説明いたしますが、チャットを始める前に、「合言葉」はホストとクライアントの間で共有しておく必要があります。

「共有」といっても、ファイルで共有するとかの意味ではなく、お互いに頭の中で覚えておいて下さい。



### 2. チャットチャンネル作成


![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/b470d7fb-817c-bc62-f4c9-480147870b61.png)

まず、チャットを開始したい人がチャットチャンネルを作成します。このチャットチャンネル作成者がホストになります。

チャットチャンネル名は、クライアントが認識できる名前であれば、何でも問題ありません。

ここでは、例として「SCC」と入力します。




### 3. クライアントにURLを知らせる

![2_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/ca26b47d-fb99-5416-5832-687aec47df34.png)



ホストがチャットチャンネルを作成すると、上部にURLが表示されます。この例だと

`https://suzumechunchun.com/client/request/view/49ushgal......`の部分なんですが、これをクライアントに教えてあげます。
複数のクライアントでもOKです。
通知の方法は、ショートメッセージでも、メールでも、LINEでも何でもOKです。

このURLは他人に盗聴されても問題ないURLなので、それほど秘密性を気にする必要はありません（ただし、SNSなどで公開するのはNGです）。

copyボタンを使っていただければ、そのままクリップボードにコピーできます。



### 4. クライアントがURLにアクセスする

ここからクライアント側の操作になりますが、もしご自身だけで試して見る場合は、以下の点で注意して下さい。



**ホストとクライアントでブラウザのセッションを共存することはできない**ため、ホストとクライアントでセッションを共存させないようにして下さい。

具体的な方法は、以下のどれかを使って下さい。

- 1つのブラウザならホストは通常モード、クライアントは**プライベートモード**という風に分ける。
- ホストページとクライアントページで**別々のブラウザ**を使う。
- ホストはPC、クライアントはスマホ・タブレットと、**端末を分ける**。

今回の例では、クライアントをChromeのプライベートモードでアクセスして、ホストとセッションを共有しないようにしています。



注意事項が多くてすいません。

では、以下がクライアントの画面です。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/6c463f95-adc3-eaf7-4ce9-ebf70e915d93.png)


ここで、「SCC」と表示されているので、どのチャットチャンネルに参加を試みているのか、クライアントは把握することができます。
URLがランダムなトークンで作られているので、ここのチャットチャンネル名が認識できれば、まず正しいところにアクセスしています。

クライアントは、自分だと認識されられる「コードネーム」と、一番最初にホストと共有した「合言葉」を入力します。

ここでは例として、コードネームを「ひよこ」にして、合言葉を先程の「祇園精舎の鐘の声、諸行無常の響きあり」にします。


すると、クライアント側では、認証待ちの状態になります。


![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/57cd67d7-bf3a-3ede-f40f-a7d8bef9e1e4.png)




### 5. ホストがクライアントを認証



ホストの画面下部に、クライアントの認証情報が表示されます。

![5_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/30690db0-5d67-5ba6-dd2b-aa36adaa184b.png)


ここで、このユーザーがちゃんと誰か把握でき、さらに合言葉が正しければ、Acceptボタンをクリックします。
すると、StatusがAcceptedに変わり、この情報はクライアント側に伝わります。

![6_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/3937fe4c-05e7-7ef6-ff10-f226fd8c7f83.png)





### 6. クライアントがチャットチャンネルにアクセス

認証されると、クライアント画面の下部に、チャットチャンネルのURLが表示されます。

![7_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/0064bed7-b506-966e-1010-3b64b0b0278d.png)



ここにアクセスすると、チャットを開始することができます。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/08e7c1a9-2543-6591-b37d-69f989b1eff1.png)



### 7. チャット開始

あとは、通常のチャットができます。

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433703/0f3b5f8e-daff-92ff-d4e6-e0c725384658.png)

メッセージは約20秒ごとに自動的にブラウザからも消えるようになっています。
また、メッセージは最大10メッセージまでしか表示されないので、一番古いメッセージから順番に削除されていきます。



### 8. チャット終了

チャットを終了する際は、クライアントはブラウザを閉じるだけでOKです。

ホストは、**「チャットを終了」ボタンをクリックして**、チャットを終了して下さい。
ブラウザを閉じるだけでも、セッションが削除されるので、チャットチャンネルへは誰もアクセスできなくなります。
ただ、「チャットを終了」ボタンをクリックすることで、サーバー上のWebSocketのキャッシュと、暗号に使っていた秘密鍵を完全に削除するため、より確実です。

もし「チャットを終了」ボタンをクリックし忘れても、メッセージはそもそもサーバー上に保存されていないため、会話の内容が外に漏れることはありません。
サーバー上のデータも、一定時間後に自動的に削除されるため、最終的には何も残りません。


以上が、基本的なSuzumeChunChunの使い方です。





### おわりに

個人の情報を収集する傾向と逆行して、何も情報を収集しないで、プライバシーを守ることに徹底したものを作ってみました。

普段使うようなことはあまりないかと思いますが、望むときに完全にプライバシーが守られる仕組みも必要なのではと思います。

まだ紹介していない機能や、応用した使い方もありますが、また別の記事でご紹介させて頂きたいと思います。