首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PKCS#11中,我可以为secp256r1 ECDSA签名设置一个自定义基点吗?

在PKCS#11中,我可以为secp256r1 ECDSA签名设置一个自定义基点吗?
EN

Cryptography用户
提问于 2023-04-28 21:40:47
回答 1查看 57关注 0票数 1

根据FIPS 186-4§D.1.1.5基点的选择,我应该能够在P-256 (secp256r1)上创建带有自定义基点的ECDSA签名。

标准PKCS#11支持这个特性吗?

这就是基于org.xipki:ipkcs11wrapper:1.0.4和SoftHSM 2.6.1构建示例代码的程度:

代码语言:javascript
复制
import org.xipki.pkcs11.wrapper.*
import org.xipki.pkcs11.wrapper.PKCS11Constants.*
import org.xipki.pkcs11.wrapper.attrs.Attribute
import java.math.BigInteger
import java.util.*

const val PATH = "/opt/homebrew/lib/softhsm/libsofthsm2.so"
val PIN = "1234".toCharArray()
val MESSAGE = "hello world".toByteArray()
val KEY_ID = AttributeVector(
    Attribute.getInstance(CKA_ID, BigInteger.valueOf(1))
)

fun main() {
    val module = PKCS11Module.getInstance(PATH).apply { initialize() }
    val slot = module.getSlotList(true).first()
    val token = PKCS11Token(slot.token, true, PIN).apply {
        require(supportsMechanism(CKM_ECDSA, CKF_EC_F_P))
        require(!supportsMechanism(CKM_ECDSA, CKF_EC_ECPARAMETERS))
    }
    val key = token.getKey(KEY_ID)
    val params = null // I would expect to be able to set a base point here
    val mechanism = Mechanism(CKM_ECDSA, params)
    val value = token.sign(mechanism, key.id().handle, MESSAGE)
    println(Base64.getEncoder().encodeToString(value))
}

代码成功运行,包括require断言。但它仍然使用P-256的标准基点。我怀疑Mechanism参数是可配置的,但在库或标准中找不到合理的值。

EN

回答 1

Cryptography用户

发布于 2023-04-29 09:36:16

ECDSA使用标准曲线进行签名,但某些标准理论上允许使用自定义基点,但这并不常见,而且我不知道任何支持它的API。PKCS#11、版本2.403.0版都不支持它:在这两种情况下,ECDSA机制都没有参数。

软码码的角度来看,它支持ECDSA,无论是使用博坦后端还是OpenSSL后端,这两个扩展都不实现选择自定义基点的扩展。这是有意义的,因为SoftHSM打算成为HSM的功能替代品,而大多数HSM没有这个特性。

在创建关键对象时,您可以通过配置不同的曲线来使用secp256r1进行ECDSA,但这是一个自定义的基点。原则上,您可以在自定义曲线上创建私有公共的键对象:CKA_EC_PARAMS参数可以指定命名曲线,也可以指定所有曲线参数。但是很少有库或HSM支持除了命名曲线之外的任何东西。自定义曲线是有风险的(如果你不知道你在做什么,你可以很容易地选择不安全的参数),而且很难实现(很多优化需要精确的参数知识),所以它们永远不会流行。

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/106322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档