在从CommonCrypto实现iOS的过程中,我注意到有一个名为CCECCryptorTwinDiversifyKey的函数,其描述如下:
通过从给定的熵导出两个标量u,v,使给定的EC密钥多样化。
但是描述让我猜测这个函数是做什么的,或者什么时候使用它。在互联网上寻找“电子商务多元化”和“电子商务双多元化”也没有给我带来任何的成功。因此,我的问题是:在谈论电子商务密钥和何时使用它时,双胞胎的多样性是什么?
发布于 2020-11-10 13:01:31
我只能找到一个来源: Apples‘s CommonCrypto的开源。全部来自CommonECCryptor.h
@function CCECCryptorTwinDiversifyKey @抽象通过从给定熵导出两个标量u,v使给定的EC键多样化。@ entropyLen必须是2的倍数,大于或等于所选曲线的比特数的2倍加上8个字节,例如2* (32 + 8) = 80字节(NISTP-256)。使用CCECCryptorTwinDiversifyEntropySize()确定需要生成和传递的最小熵长度。熵必须从均匀分布中选择,例如随机字节、DRBG的输出或KDF的输出。u,v是通过将熵分解成大小相等的两个部分来计算的。对于每一部分t(解释为大端数),所选曲线上的标量S将通过S= (t mod (q-1)) + 1计算,其中q是公共密钥的曲线发生器G的阶,这将计算u.P + v.G,其中G是所选曲线的生成元。对于私钥,这将计算d‘= (d *u+ v)和P= d’* G;G是所选曲线的生成元。
当我们想要某种程度的匿名时,多样化是必要的,就像在CryptoCurrencies中,如果您使用相同的公钥,那么您一直都是链接的。如果您可以使用您的私钥/公钥使您的公钥多样化,那么您就能够使用多样化的新标识,并且您无法轻松地与您的原始身份连接。
在上述方案中,新的公钥P' (从当前的公钥P (包括u和v ))的多样化将是P' = [u]P + [v]G,多样化的私钥将是
d' = (d \cdot u + v)与多种公钥的验证
总之,你有一个新的身份,但在幕后,它仍然是你。
要回答这个问题,我们需要一些假设,让用户随机生成u,v统一- -这是关键的-,系统中有2^{30}用户--略高于10亿-,每个用户一生中都有多样化的2^{20}时间--略高于100万-。
现在,我们将使用经典的生日计算来查看2^{256}公钥周围的曲线的碰撞概率。
我们将利用这样一个事实,即均匀随机选取的k单元在n单元集合中的碰撞概率可以用以下方法来近似。
然后是我们的k = 2^{50}和n = 2^{256};
当碰撞概率在1/2^{100}附近时,我们简单地说它不会发生。因此,对于像P-256或Curve25519这样的256位曲线来说,碰撞是可以忽略的(不会发生的)。
主要区别在于,通过提供u和v,您可以很容易地证明该标识与初始标识相连接。
将随机标识与初始标识连接起来等于一个离散对数问题,因为我们不知道私钥。
如果我们知道私有密钥d和d',那么双分集连接就成了一项微不足道的任务。生成一个随机u,然后求解v;
注:我找不到这个想法背后的学术论文。如果有人告诉我我会很高兴的。
https://crypto.stackexchange.com/questions/86073
复制相似问题