こんにちは、Habr! Javaの暗号化の基礎を学びたい初心者向けの一連の記事のうち 、Jakob Jenkovによる5番目の記事「Java Signature」の翻訳を紹介します。
目次:
- Java暗号化
- Java暗号
- メッセージダイジェスト
- Mac
- 署名
- キーペア
- キージェネレーター
- KeyPairGenerator
- キーストア
- キーツール
- 証明書
- CertificateFactory
- 証明書パス
Java署名
Signatureクラス( java.security.Signature )は、バイナリデータのデジタル署名を作成します。 デジタル署名は、秘密/公開キーペアの秘密キーで暗号化されたメッセージダイジェストです。 公開鍵を所有する人は誰でもデジタル署名を検証できます。
署名インスタンスを作成する
Signatureクラスを使用する前に、静的getInstance()メソッドを呼び出してこのクラスのインスタンスを作成する必要があります。 以下は、Signatureインスタンスが作成される例です。
Signature signature = Signature.getInstance("SHA256WithDSA");
getInstance()メソッドに渡される文字列パラメーターは、使用されるデジタル署名暗号化アルゴリズムを決定します。
署名インスタンスの初期化
Signatureのインスタンスを作成したら、使用を開始する前に初期化する必要があります。 Signatureインスタンスは、そのinit()メソッドを呼び出すことにより初期化されます。 Java署名インスタンスを初期化する例:
SecureRandom secureRandom = new SecureRandom(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair(); signature.initSign(keyPair.getPrivate(), secureRandom);
ご覧のとおり、Signatureインスタンスは、秘密/公開キーペアの秘密キーとSecureRandomインスタンスで初期化されます。
デジタル署名の作成
Signatureインスタンスが初期化されると、それを使用してデジタル署名を作成できます。 デジタル署名は、 update()メソッドを(1回以上)呼び出し、 sign()の呼び出しで終了することにより作成されます。 バイナリデータのデジタル署名を作成する例:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature.update(data); byte[] digitalSignature = signature.sign();
デジタル署名検証
他の人が作成したデジタル署名を検証する場合は、署名インスタンスを検証モードで(署名モードではなく)初期化する必要があります。 検証モードでSignatureインスタンスの初期化がどのように見えるかを以下に示します。
Signature signature = Signature.getInstance("SHA256WithDSA"); signature.initVerify(keyPair.getPublic());
Signatureインスタンスが検証モードで初期化され、キーペアの公開キーがパラメーターとして渡されることに注意してください。 検証モードで初期化した後、Signatureインスタンスを使用してデジタル署名を検証できます。
byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature2.update(data2); boolean verified = signature2.verify(digitalSignature);