为了账号安全,请及时绑定邮箱和手机立即绑定

我们可以为 OpenSSL ECC 拥有多个公钥和一个私钥吗?

我们可以为 OpenSSL ECC 拥有多个公钥和一个私钥吗?

PHP
呼啦一阵风 2022-07-16 16:44:58
我在我的项目中使用 php OpenSSL。如何使用单个私钥创建多个公钥?在 RSA 中,我们不能做这样的事情。但是ECC呢?
查看完整描述

2 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

[k]G根据定义,对于一般椭圆曲线密码系统中的每个私有标量(私钥),曲线上都有一个点(公钥)由G曲线生成点和k私有标量生成。

仅供参考,在双有理等效曲线的一个有点不寻常的怪癖中,您实际上可以将蒙哥马利曲线 X25519 公钥映射到两个扭曲的爱德华兹曲线 Ed25519 公钥,因为蒙哥马利曲线点不携带 av 坐标,但是,这对您的用例。

通常,如果我们想从单个种子(源)定义多个密钥对(不仅仅是公钥),可以使用从主密钥派生的密钥来实现。

但是,您必须处理多个私钥。

您似乎建议私钥将存在于服务器上,所以我认为您实际上不需要多个公钥。我建议您使用单个密钥对和 EdDSA 或 ECDSA 签署多个密钥对以在客户端设备上使用。签名可用于将其来源链接到单个身份。

请提供更多背景信息,我将进一步提供帮助。


查看完整回答
反对 回复 2022-07-16
?
jeck猫

TA贡献1909条经验 获得超7个赞

在 ECC 中有一种方法,叫做多样化密钥。它存在于苹果的 CommonCrypto 中,来自CommonECCryptor.h


@function   CCECCryptorTwinDiversifyKey


@abstract   Diversifies a given EC key by deriving two scalars u,v from the

            given entropy.


@discussion entropyLen must be a multiple of two, greater or equal to two

            times the bitsize of the order of the chosen curve plus eight

            bytes, e.g. 2 * (32 + 8) = 80 bytes for NIST P-256.


            Use CCECCryptorTwinDiversifyEntropySize() to determine the

            minimum entropy length that needs to be generated and passed.


            entropy must be chosen from a uniform distribution, e.g.

            random bytes, the output of a DRBG, or the output of a KDF.


            u,v are computed by splitting the entropy into two parts of

            equal size. For each part t (interpreted as a big-endian number),

            a scalar s on the chosen curve will be computed via

            s = (t mod (q-1)) + 1, where q is the order of curve's

            generator G.


            For a public key, this will compute u.P + v.G,

            with G being the generator of the chosen curve.


            For a private key, this will compute d' = (d * u + v) and

            P = d' * G; G being the generator of the chosen curve.

就像您的情况一样,加密货币也可能需要它。通过多样化,人们可以实现某种程度的匿名性。如果一个人总是使用相同的公钥,那么他们一直都与这个公钥相关联。如果一个人可以用他们的私钥/公钥使他们的公钥多样化,那么他们就能够使用多样化的新身份。身份多元化,很难与原本的身份联系起来。


在上述方案中,新的公钥u和v将是多元化[u]P + [v]G的,多元化的私钥将是


d' = (d \cdot u + v)


并验证多样化的公钥


P' = [d']G = [d \cdot u + v]G = [d \cdot u]G + [v]G = [u]P + [v]G


总之,你有了新的身份,但在幕后,依然是你。


查看完整回答
反对 回复 2022-07-16
  • 2 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信