Java 15では電子署名のアルゴリズムとして,Edwards-Curveデジタル署名アルゴリズム(EdDSA)が追加されている。これは,RFC8032で定義されているものだ。
さっそく,EdDSAアルゴリズムを用いてデジタル署名を作成するプログラムを作成してみる。
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class EdDSAExample
{
public static void main(final String[] args) throws Exception
{
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("Ed25519");
KeyPair keyPair = keyPairGen.generateKeyPair();
String message = "Hello World";
Signature signature = Signature.getInstance("Ed25519");
signature.initSign(keyPair.getPrivate());
signature.update(message.getBytes());
byte[] sign = signature.sign();
System.out.println(byteToHex(sign));
}
private static String byteToHex(byte[] bytes)
{
return IntStream.range(0, bytes.length)
.mapToObj(i->String.format("%02x", bytes[i]))
.collect(Collectors.joining(" "));
}
}
コンパイルして,実行すると次のようなデジタル署名が出力される。
45 7a 1f 2e 40 0a 82 1a 56 e3 96 6e 0c b5 b5 f5 30 7f 28 f2 a1 64 49 5d 62 f6 74 46 6a f4 11 7e 8e dc d9 a7 ce 78 0e 65 ee 71 24 79 89 4f aa 8c 38 a2 98 55 10 4b 79 e1 76 6b d7 de 32 df 40 08