SHA-1の代わりにSHA-2暗号化を実装しようとしています。
このため、これら 2 つのハッシュ アルゴリズムのビット数が異なることがわかっており、混乱しています。
これはどのように達成でき、どの部分で必要な変更を加える必要がありますか?
Java、Python、その他の主要なプログラミング言語のオープン ソース ライブラリを使用できます。
SHA-1の代わりにSHA-2暗号化を実装しようとしています。
このため、これら 2 つのハッシュ アルゴリズムのビット数が異なることがわかっており、混乱しています。
これはどのように達成でき、どの部分で必要な変更を加える必要がありますか?
Java、Python、その他の主要なプログラミング言語のオープン ソース ライブラリを使用できます。
まず第一に、SHA-1 も SHA-2 に関連するものも「暗号化」アルゴリズムではありません。それらはハッシュ関数です。SSL では、ハッシュ関数は主に、HMAC構造による機密性ではなく整合性のために使用されます。ハッシュ関数は、任意の長さの入力を受け取り、入力データの一種の「ダイジェスト」である固定長の出力を生成します。この操作は、元に戻すことはできません。
ハッシュ関数は「公開」です。機密データやキーはありません。誰でも任意の入力に対してハッシュ関数の出力を計算できます。「メッセージ認証コード」(MAC) は一種の「鍵付きハッシュ」です。秘密鍵 (つまり、任意のビットの集まり) もプロセスで入力されるため、(再) 計算するには鍵の知識が必要です。 MAC出力。これは整合性チェックに使用されます (送信者はキーを使用して MAC を計算し、受信者はキーを使用して MAC を再計算します。MAC が一致する場合、データは正しいです。キーを知らない攻撃者はデータを変更し、変更されたデータで有効な MAC を計算します)。
HMAC は、ハッシュ関数 (SHA-1 など) を MAC に変換する構造です。TLS (SSL の現在の標準名) は HMAC を使用します。HMAC の出力は、特定のハッシュ関数hと共に使用すると、 hの出力と同じサイズになります。HMAC/SHA-1 は名目上 160 ビットの出力を生成しますが、一部のプロトコルでは、最初の 96 ビットのみを保持するのが通例です。このような切り捨ては、SSL では発生しません。
FIPS 180-3標準では、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 という名前の 5 つのハッシュ関数が定義されており、出力長はそれぞれ 160、224、256、384、512 ビットです。SHA-224、SHA-256、SHA-384、および SHA-512 関数は、口語的に「SHA-2」として知られているため、「SHA-2」は 1 つの関数ではなく、4 つのハッシュ関数のファミリーです。
TLS仕様では、暗号スイートが定義されています。暗号スイートは、クライアントとサーバーが接続の初期段階 (「ハンドシェイク」) で合意する一連の暗号化アルゴリズムです。アルゴリズムの中には、データの整合性を確保するために使用する MAC があります。標準暗号スイートの一部は、MAC が「SHA-256 を使用した HMAC」、つまり SHA-2 関数の 1 つを使用するものであることを指定しています。
したがって、あなたの質問に対する答えは、「HMAC/SHA-256 で暗号スイートの 1 つを使用するようにクライアントとサーバーを構成するだけです」です。SSL 実装がそのような暗号スイートをサポートしていない場合は、それを変更する必要があります。これには、SSL がどのように機能するかを完全に理解する必要があります。完全な RFC 5246 を読んで理解する必要があります。
この質問は今後ますます目にすることになると思います。GoDaddy には、証明書署名要求を送信するときに、SHA1 または SHA2 のどちらを使用するかを指定するオプションが追加されました。
しかし、これは興味深い読み物でした。基本的に、それが何を求めているのか、サーバーにどちらか一方を使用する暗号を強制的に使用させる方法を知っていました。違いが何であるか、またはどちらか一方を使用する方が良い理由を正確に知っているかどうかはわかりません。
私が見る限り、SSL で SHA256 を実装するために知っておく必要があることはすべてRFC 5246でカバーされています。
しかし、これを行うのに十分な暗号化を理解しているとは思えません... SHA 2 は存在せず、SHA256、SHA384、または SHA512 を探していますが、それは暗号化アルゴリズムではなく、暗号化ハッシュ関数です。
それで、あなたは実際に何をしようとしていますか?
このhashlib
モジュールMessageDigest
は、すべての SHA-2 アルゴリズムをサポートしています。