シンプルな暗号化されたWebチャット。 socket.io、Web暗号APIを搭載しています。このプロジェクトは、クライアント側の暗号化の仕組みと、チャットサービスとしてどのように統合できるかの例です。
DarkWireサーバーはnode.jsアプリケーションです。
darkwire.ioのWebクライアントは、JavaScriptでReact JSとReduxを使用して書かれています。
.dist拡張機能なしでserver/およびclient/ディレクトリの.env.distファイルをコピーし、それらをニーズに合わせて適応させます。
DarkWireが機能するためのHTTPS接続が必要です。これは、LocalHostおよびHTTPS接続の背後でのみアクセスできるCrypto Browser APIを使用しているためです。
NVMを使用して、このコマンドを使用して正しいバージョンのノードをインストールできます。
nvm install # If the right node version is not already installed
nvm use
npm install yarn -g # To install yarn
依存関係をインストールします
$ yarn
サーバーとクライアントを開始します
$ yarn setup
$ yarn dev
以下を実行するだけです。
$ docker-compose up
これにより、デフォルト.envファイルが自動的に作成されます。
サーバーとクライアントの生産ビルドを作成します
$ yarn build
サーバーを開始します
$ yarn start
それを構築します。
$ docker build --tag darkwire.io:latest .
次に実行します。例:
$ docker run --init --name darkwire.io --rm -p 3001:3001 darkwire.io
server/.env.distおよびclient/.env.distで利用可能な環境変数のいずれかを使用できます。デフォルトはdockerfileで使用できます
セキュリティの問題を[email protected]に報告してください。
Darkwireは、非対称暗号化(RSA-OAEP)、対称セッションキー(AES-CBC)、およびセキュリティのために署名キー(HMAC)の組み合わせを使用します。
アリスとボブの間のチャットの概要を次に示します(グループチャットにも適用されます):
ステップ5では、すべての人の公開鍵でキーを暗号化するため、グループチャットも同じように機能します。メッセージが送信されると、部屋の全員のための暗号化されたキーが含まれ、受信者はユーザーIDに基づいてそれらを選びます。
Darkwireは、あなたがコミュニケーションをとっている人があなたがそうであると思う人であるという保証を提供しません。認証機能は、将来のバージョンに組み込まれる場合があります。
DarkWireは、BTOAを使用してドキュメントをBase64にエンコードし、チャットメッセージと同じように暗号化されます。
デフォルトの転送可能なファイルサイズ制限は4MBですが、 REACT_APP_MAX_FILE_SIZE変数を使用して.envファイルで変更できます。
DarkWireはSocket.ioを使用して、Secure WebSocket(WSS)を使用して暗号化された情報を送信します。
部屋は、すべての参加者が去るまでサーバー上のメモリに保管され、その時点で部屋が破壊されます。パブリックキーのみが、部屋の寿命の期間中、サーバーメモリに保存されます。
チャット履歴は各参加者のブラウザに保存されるため、ウィンドウが閉じたときに(そのユーザーの場合)効果的に消去されます。