キー生成、暗号化、および復号化機能を備えた ElGamal 楕円曲線暗号システムの単純な実装 (Java BigInteger を使用) はありますか? 講義で大学生に説明するために使用できるものはありますか?
たとえば、Paillier 暗号化関数は、一般性を失うことなく、次のようにコーディングできます。
public BigInteger encrypt(BigInteger input) throws PaillierException {
if(!isInZN(input)) {
throw new PaillierException(PaillierException.TYPE_PLAINTEXT_NOT_IN_ZN, input);
}
BigInteger plaintext = handleNegative(input);
BigInteger r = randomInZStarN();
return (((n.multiply(plaintext).add(BigInteger.ONE)).multiply(r.modPow(n, nSquared)))).mod(nSquared);
}
これには最適化 g=(1+n) が含まれており、暗号文 c = (1 + mn) r^n mod n^2 になります。
Java 7 ネイティブ実装や BouncyCastle 実装を提案しないでください。実際の JCA 準拠の複雑な実装は必要ありません。
ありがとう。