X:/CHATは、フロントエンドでHTML、CSS、およびJavaScriptを使用し、バックエンドでnode.jsを使用するWebアプリケーションです。これにより、ユーザーは安全な方法で互いに通信できます(ただし、Node.jsは新規であり、そのセキュリティを保証することはできません)。
JavaScriptとローカルストレージは、Webアプリが機能するために絶対に必須です。ローカルストレージは、パブリックキー、プライベートキー、設定などを保存するために使用されます。
「匿名のチャット」機能を使用する場合、サーバーによって保存されるものは絶対にありません。私は考えることができる最も安全なコミュニケーション形式のコミュニケーションを作りたかったので、匿名のチャットを通して会話のログを保存しないことさえ選択しました。 「匿名チャット」ボタンをクリックすると、「/匿名」にリダイレクトされます。ここでは、公開キーと秘密鍵とともにIDが生成されます。これらは、ブラウザ(ローカルストレージ)にのみ保存されます。サーバーはこの情報のいずれも保存しません。サーバーが保存するのは、会話IDと作成時間だけです。これは、1時間後に会話を期限切れに設定できるように行われます。読み込みが完了したら、必要な人にURLを送信し、接続することができます。彼らがやると、彼らは彼らのために生成されたパブリック/プライベートキーペアとIDを取得します。その後、公開キーとIDが提供されます。メッセージを送信すると、RSA-2048の公開キーを使用して暗号化し、秘密鍵を使用して(局所的に)decryptします。メッセージはクライアント側に暗号化されているため、サーバーは何が言われているかを知りません。ページを更新すると、メッセージがどこにも保存されていないため、リフレッシュした人のメッセージが削除されます。しかし、サーバーに何も保存されていないという事実により、ユーザーは自分のIDなどを簡単に変更できることを意味します。そのため、このプロジェクトは一般の人々ではなく小グループで使用されるようになりました。サーバーストアに匿名の会話をすることは、ユーザーが会話が不変であるという利点を提供しますが、サーバーがそれらを変更できること、そしてそのログが存在することを意味します。それで、あなたはむしろあなたの友人、またはいくつかのランダムサーバーを信頼したいですか?
通常のチャットは、一般的なチャットアプリケーションに似ています。メッセージはまだRSA-2048を使用してクライアント側に暗号化されており、ユーザーのプライベートキーはAES-256-CTRで暗号化されており、ユーザーのパスワードのSHA512ハッシュを復号化キーとして使用します。ユーザーのパスワードは、10個の塩ラウンドでBCRyptを使用して保存されます。要するに、サーバーコードが変更されていない場合、またはユーザーの秘密鍵をキャプチャするものがない限り、会話のコンテンツを取得する方法はまったくありません。ユーザーの設定、連絡先、およびその他のデータは、簡単にアクセスできるようにテキストファイルにJSON形式で保存されます。これらはプレーンテキストに保存されますが、ユーザーのパスワードとAEで簡単に暗号化するのは簡単です。あなたがそれを現実にしたいなら、覚えておいてください、それを容易にするためにすでに書かれた関数があることを忘れないでください。 「aes_encrypt(plantext、password)」と「aes_decrypt(暗号化、パスワード)」機能を使用することができます。
いくつかのバグや予期しない動作があるかもしれませんが、これは予想されることです。これは、結局のところ、私の最初のnode.jsプロジェクトです。アプリを破ろうとすると、成功する可能性が非常に高いです。私が望むように、検証チェックはそれほど多くありませんが、ユーザーのアカウントや会話を保護するのに十分です。何かがうまくいかない場合は、事前にお詫び申し上げます。