よみの暇つぶしブログ
作ろうと思ったきっかけ私は普段Discordを主な連絡ツールとして使っているのだが、少し前にモバイル版のUI変更があってから、細かなバグが多い。 そして最近、いろんな有名企業が利用者情報関連でやらかしてる…(名前は出さないが) →自分で作ってしまえばいいんだ! …というのが動機。 ちょっとセキュア?ネット上に公開されているサービス(チャットツール、SNS、動画配信サイト)がなぜ利用者情報の流出を起こすのか? ヒューマンエラー、サーバープログラムのバグ、マルウェア感染、色々あるが、私の意見はこうだ。 つまり、ユーザーに直接関係のある重要な情報(チャット履歴、アカウントの登録情報)はこちらで預からなければ良い。何十年も前から情報を預かっている実績と信頼のGoogleに任せるべきである。と考える |
作図まずは、自分の考えをコンポーネント図に書き起こすところから。 コンポーネント図があれば、自分も理解しやすくなるのはもちろんのこと、他者からのフィードバックを受ける際にも役に立つ。draw.io便利すぎる コンポーネント図(仮) 細かい仕様のメモ・メッセージの内容はサーバーでは復号せずに、E2EEで通信を行う。 ・漏れたらやばいものはうちのサーバーには保存しない、チャット履歴はユーザーのGoogleアカウントに紐付けられるGoogleドライブに保存。 ・メッセージの受け流しはRabbitMQを使用。メモリ上で処理する(※) ・クライアント - クライアントの通信はいつ、どのくらいチャットをしたのか履歴が残らないため企業利用がNGらしい。(通信経路にサーバーを含める必要がある) ・ユーザーの識別、認証(ログイン)はGoogle認証(OAuth2.0)で行う。また、しばらくアカウントへのアクセスがなかった場合はセッション切れとし、自動ログアウト。 ・DHベースの鍵共有を使ってクライアント同士の共通鍵を決め、E2E接続を確立。SSL×共通鍵で、実質的な2重暗号となる。 ・画像などは相手に送信が完了されるまでの受け渡しとして外部のリソースサーバーに保存。送信が完了した時点で破棄。 ・ユーザー情報(Googleアカウントのアドレス、ユーザーアイコンのURI、表示名、ユーザーID)は、AWS(日本国内のデータセンター)のSQLサーバーに保存。 ・DDoS対策に、通信経路にSPA(Single Packet Authorization)を導入 RabbitMQを触ってみるその前に、RabbitMQってなんぞや?という話から。 Advanced Message Queuing Protocol (AMQP) を使用した、オープンソースのメッセージ指向ミドルウェアだよ(Wikipediaより) クライアントから送られてきたメッセージは一度このRabbitMQに保管され、受信側のクライアントに受け渡されるというもの。受信側がオフラインである場合は、受け取られるまでそのメッセージはRabbitMQ上に保存される。 インストールはそこまで難しくはない。RabbitMQはErlangという言語で動いているため、インストールをして、RabbitMQの公式ページからWindows向けのセットアップツールをダウンロード、インストール。 インストールが終わったら、インストール先にsbinというディレクトリがあるので、そこにあるバッチファイルを使ってWEB管理ツールを有効化。これでlocalhost:15672にアクセスすると、GUIが使えるようになる。 pikaクライアントを使ってメッセージの受け渡しを試してみた 今後の課題・アカウントのメールアドレスとユーザーの一意の識別子、アイコンのURI、ニックネームなどを保存するSQLサーバーのアクセスをどのように安全に保つか。 ・メッセージの内容をメモリ上で保存する際、サーバーがクラッシュしたら一時的にメモリ上に保存していたメッセージの内容が消えてしまう。ディスク上にキューを持つとしても、扱いをどうするか。 |
2024/07/24