前提・実現したいこと
AndroidでElliptic Curve Cryptographyを使って電子署名をしたいと思っています。
秘密鍵は静的な情報を使用する想定ですが、ECPrivateKeySpecのパラメータに与えるべき情報がよくわかりません。
現状は生成時と同じ曲線などを指定してダミーのキーペアを作成して、その情報からパラメータを取得しています。
質問内容
- 静的な鍵を使用する場合、ECPrivateKeySpecに与えるパラメータはどのように指定すればよいのでしょうか?
- 作成したsignatureを検証する側では64byteを想定していますが、下記の実装で生成する場合に72byteで生成されます。 生成されるsignatureのサイズは何を元に決まるのでしょうか?
補足
- 秘密鍵は32byteのデータを使用しています
検証コード
fun getSignature(message: String) : ByteArray { val ecdsaSign = Signature.getInstance("SHA256withECDSA") ecdsaSign.initSign(getPrivateKey()) ecdsaSign.update(message.toByteArray(charset("UTF-8"))) val signed = ecdsaSign.sign() return signed } fun getPrivateKey(): PrivateKey? { val privateKeyBytes = toBytes( 0x11, 0x11, ‥ ) try { val kf = KeyFactory.getInstance("EC") val params = getParams() val ecpks = ECPrivateKeySpec(BigInteger(privateKeyBytes), params!!) return kf.generatePrivate(ecpks) } catch (e: Exception) { e.printStackTrace() } return null } fun getParams(): ECParameterSpec? { try { val kpg = KeyPairGenerator.getInstance("EC") val gps = ECGenParameterSpec("secp256r1") kpg.initialize(gps) val apair = kpg.generateKeyPair() val apub = apair.public as ECPublicKey return apub.params } catch (e: Exception) { e.printStackTrace() } return null }
あなたの回答
tips
プレビュー