私は次のシナリオを持っています:2つのパーティーがファイルを交換したい。
ファーストパーティが安全なサーバーにファイルを公開する
整合性を検証できるようにするために、最初のパーティは2番目のパーティにファイルのハッシュを送信します。
第二者は安全なサーバーからファイルをダウンロードします
第二者はダウンロードしたファイルのハッシュを計算し、そのハッシュを第一者に送信して整合性を確認します。
このシナリオを実装する最良の方法は何ですか? -ファイルの整合性を計算するのに最適なハッシュ関数は何ですか?
-2つのパーティ間でハッシュを交換する最良の方法は何ですか?
あなたが説明するシナリオは「一般的なダウンロードのシナリオ」です。 「ファーストパーティ」は、「セカンドパーティ」がファイルをダウンロードできるのと同じサーバーにファイルのハッシュを公開するだけです。
次に、第2者はファイルのハッシュを計算し、サーバーで公開されているハッシュを使用してそれを確認できます。
「安全なサーバー」という想定が、サーバー上の情報を攻撃者が操作または置換できないことを意味し、通信がTLSによって保護されている場合、このワークフローは安全です。
この実践には多くの例があります。 https://www.openssl.org/source/ を見てください。各.tarファイルのsha256ハッシュが公開されています。
ファイルの整合性を計算するのに最適なハッシュ関数は何ですか
sha256のような一般的に使用されるハッシュ関数
二者間でハッシュを交換するための最良の方法は何ですか
すでに上記で回答されている場合は、ファイルのハッシュをサーバーに公開するだけです。
公開鍵暗号を使用してファイルを暗号化または署名することは非常に簡単です。そのようなよく知られたツールセットの1つは Gnu Privacy Guard です。
パーティー1とパーティー2の両方が証明書を生成し、公開鍵を交換します。パーティー1は、ファイルに署名するか、秘密鍵で暗号化してファイルを共有します。パーティー2は、パーティー1の共有公開鍵を使用して署名/ハッシュを検証します。