PKIなしでTLSを必要とするクライアント/サーバーシステムで構成されるプロジェクトを作成しています。
設計要件:
クライアントは、「THE」サーバーと通信していることを認証する必要があります
サーバーは、「A」クライアントと通信していることを認証する必要があります
通信は機密でなければなりません
セッションの機密性は、前のセッションの機密性を中継してはなりません(別名フォワードシークレット)
また、送信されたデータの整合性を検証する必要があります
PFSにはDHE、AES/CBC暗号による認証にはSRP(または代替PSK)、整合性にはSHA)を使用することを考えています。
私の質問は..
このプロトコルスタックは可能ですか?
AES 256 CBCは機密性について信頼できますか?
この設計ですべての要件が満たされますか?
また、クライアントのSRP/PSKパスワードがサードパーティによって取得された場合、そのクライアントは他のクライアントを回避できますか?
ps:可能な限り最高のセキュリティオプションを目指しています
フィードバックを事前に感謝し、混乱が生じたことをお詫びします。私は暗号について学び始めました。
TLSでPKIを使用する必要はありません。 PKIが行う唯一のことは、認証をTLSスケールの一部にすることです。自己署名証明書を使用する場合、PSKまたは同様のすべての信頼情報(証明書や事前共有キーなど)をすべての通信ピアに安全な方法で配布する必要があります。これらの情報も最新の状態に保つ必要があります。つまり、新しい通信パートナーが追加されたとき、秘密が危険にさらされたときなどです。代わりにPKIを使用すると、このプロセスは、更新の必要がほとんどないトラストアンカー(ルート証明書)を共有し、証明書が取り消されたかどうかを定期的にチェックすることになります。したがって、PKIを使用すると、新しい信頼情報を簡単に作成および共有したり、侵害された信頼情報を取り消したり置き換えたりすることができます。
すでにすべての通信ピアを完全に制御でき、新しい信頼情報を安全に配布し、侵害された場合にこれらを取り消す方法がある場合は、PKIを使用する必要はありません。このインフラストラクチャをまだ持っていない場合は、PKIを使用する方が、すべてを自分で実装するよりも簡単で、おそらく安全です。
あなたが言及する特定のプロトコルスタックに関して:PSK/SRP認証は、dave_thomson @が以下のコメントで正しく指摘しているように、鍵交換としてDHE/ECDHEを使用して理論的に使用できますが、これらの暗号はめったに実装されないようです。ただし、証明書ベースの認証では、DHE/ECDHEが一般的に使用され、自己署名証明書にもPKIは必要ありません。また、SHA-256を使用するAESは、 [〜#〜] aead [〜#〜] を使用する安全な暗号ですが、今日のGCM暗号が好まれています。また、ECDHEはDHEよりも優先されます。
また、クライアントのSRP/PSKパスワードがサードパーティによって取得された場合、そのクライアントは他のクライアントを盗聴することができますか?
本質的な秘密(事前共有鍵、パスワード、秘密鍵)が取得された場合、DHE/ECDHEが鍵交換に使用されていると、攻撃者は盗聴されたデータを復号化できません。この点でPSK/SRPキー交換がどのように動作するかはわかりません。しかし、すべての場合において、攻撃者はピアになりすまして、中間者攻撃の内部で復号化されたトラフィックにアクセスすることができます。攻撃者は秘密を持っているので、これは相手が問題に気付かずに行うことができます。つまり、認証は引き続き成功します。これは、そのようなシークレットの失効と置換を実装する必要がある理由の1つです。これはすでにPKIに含まれています。