0

私は暗号化の専門家ではありません。実際に使用した経験はほとんどありません。いずれにせよ、私のアプリケーションの 1 つが暗号化をセットアップすることを要求する時が来ました。プログラムは、多くの損害を引き起こす可能性のある非常に重要なものを管理しないことに注意してください.

とにかく、私が使用しているこのスキームが一般的であるかどうか、および欠陥があるかどうかを確認しようとしていました(完全に愚かで恐ろしく欠陥のある設計がある可能性があるため、私は尋ねています)。

わかりました、クライアント -> サーバー通信があります。クライアントは、2048 ビットの RSA キーの公開部分にハード コードできます。クライアントが安全な接続を開始したい場合、クライアントは自分のユーザー名、パスワードの md5 ハッシュ、およびランダムな UUID のハッシュを送信します。これらはすべてサーバーの公開鍵に対して暗号化されています。サーバーは情報を受け取り、秘密鍵を使用して復号化します。データベースをチェックして、彼のログイン + パスが機能するかどうかを確認し、機能する場合は、DB の「セッション」テーブルに新しいエントリを作成します。これには、SessionID、UID (ユーザー ID)、および UUID ハッシュが含まれます。対応するセッション ID の UUID をキーフレーズとして使用すると、サーバーは Blowfish の暗号化された単語「Success!」を含むメッセージを返信します。+ ランダムな UUID (このメッセージはデジタル署名されているため、サーバーから送信されたかどうかを判断できます)。その時点から、クライアントがサーバーに情報を送信すると、平文の sess_id が含まれ、対応するセッション ID のフグの秘密 (DB に暗号化されて保存されます) を暗号化/復号化のキーとして使用して、フグの暗号化メッセージが含まれます。

具体的には、このシステムが「機能するはず」なのか、それとも MITM などの脆弱性が明らかに明白に存在することに誰かが気付いたのか、私は興味があります。

4

3 に答える 3

2

頭のてっぺんから見える問題 (詳細のほとんどは省略されていますが、悪魔が存在することで有名です):

  • 実際の暗号化 RNG ではなく UUID ジェネレーターを使用している場合、エントロピーが不十分である可能性があります。これを軽視しないでください。現実の世界では、暗号化システムをひそかに弱体化するためのお気に入りの方法は、RNG を弱体化することです。

  • 最初の RSA 暗号化は、小さな指数の攻撃や、潜在的に他の創造的な攻撃の影響を受けやすいように思えます。構造が多すぎて快適ではありません。

  • リプレイ攻撃の機会はたくさんあるようです。

  • Blowfish で使用しているブロック暗号モードは何ですか?

TLS/SSL を使用することをお勧めします。自分で構築したものよりもずっと長い間、友好的な目で見られています。

于 2010-02-09T00:14:48.763 に答える
2

SSL または DTLS、IKEv2、HIP、EAP、または適切な標準プロトコルを使用してください。独自の暗号プロトコルを発明しようとしないでください。自分でこれを行うのに十分な専門知識を持っている人はいません。私が見る限り、あなたのプロトコルには十分なエントロピーが含まれていないため、結果のキーはかなり弱くなります。

于 2010-02-08T22:17:56.733 に答える
0

その時点から、クライアントがサーバーに情報を送信すると、平文の sess_id が含まれ、Blowfish 暗号化メッセージが含まれ、対応するセッション ID を暗号化/復号化のキーとして使用します。

セッション ID をプレーンテキストで送信し、それを暗号化キーとして使用している場合、それはどのように安全ですか?

標準の SSL 認証を使用できず、ライブラリの実装者にハンドシェイクについて心配させる理由がわかりません。

于 2010-02-08T15:43:59.267 に答える