こんにちは、Habr! Javaの暗号化の基礎を学びたい初心者向けの一連の記事のうち 、Jakob Jenkovによる3番目の記事「Java MessageDigest」の翻訳を紹介します。
目次:
- 暗号化
- 暗号
- メッセージダイジェスト
- Mac
- 署名
- キーペア
- キージェネレーター
- KeyPairGenerator
- キーストア
- キーツール
- 証明書
- CertificateFactory
- 証明書パス
Java MessageDigest
JavaクラスMessageDigestは、バイナリデータからメッセージダイジェストを計算できる暗号化ハッシュ関数を表します。 暗号化されたデータのセットを受信すると、転送中に変更されていないことを確認できません。 メッセージダイジェストは、この問題の解決に役立ちます。
暗号化されたデータが輸送中に変更されたかどうかを判断するには、送信者はデータからメッセージダイジェストを計算し、データとともに送信する必要があります。 暗号化されたデータとメッセージダイジェストを受信する相手側は、データからメッセージダイジェストを再計算し、計算されたメッセージダイジェストがデータで受信したメッセージダイジェストと一致するかどうかを確認できます。 2つのメッセージダイジェストが一致する場合、暗号化されたデータが転送中に変更されなかった可能性があります。
メッセージダイジェストを変更検出メカニズムとして使用するには、いくつかの条件を満たしている必要があります。 ただし、正確な条件は暗号理論の一部であり、この記事では検討していませんが、Javaを使用してMessageDigestクラスでメッセージダイジェストを受信する方法のみを説明しています。
MessageDigestのインスタンスを作成する
MessageDigestクラスのインスタンスを作成するには、MessageDigestクラスの静的getInstance()メソッドが呼び出されます。 MessageDigestのインスタンスを作成する例を次に示します。
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
getInstance()に渡される文字列パラメーターは、特定のメッセージに使用されるダイジェストアルゴリズムを決定します。
メッセージダイジェストアルゴリズム
Java暗号化APIは、次のメッセージダイジェストアルゴリズムをサポートします(外部暗号化プロバイダーはさらにサポートできます)。
- MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
これらのアルゴリズムのすべてが等しく安全であるとは限りません。 執筆時点では、SHA-256以上を使用して、最高レベルのセキュリティを確保することをお勧めします。
メッセージダイジェスト計算
MessageDigestのインスタンスを作成することにより、それを使用してメッセージダイジェストを計算できます。 メッセージダイジェストを計算するためのデータブロックが1つある場合は、 digest()メソッドを使用します。 単一のデータブロックからのメッセージダイジェスト計算は次のようになります。
byte[] data1 = "0123456789".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] digest = messageDigest.digest(data1);
同じメッセージダイジェストに含まれるデータブロックが複数ある場合は、 update()メソッドを呼び出し、 ダイジェスト()の呼び出しで終了します。 複数のデータブロックからのメッセージダイジェスト計算は次のようになります。
byte[] data1 = "0123456789".getBytes("UTF-8"); byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.update(data1); messageDigest.update(data2); byte[] digest = messageDigest.digest();