主页 > imtoken钱包有客服吗 > 随机数如何出现在比特币中

随机数如何出现在比特币中

imtoken钱包有客服吗 2024-01-07 05:10:34

中国的比特币叫什么?

1. H=H1(α)H=H1(α)。

2.我直接引用了维基百科上VRF的定义,意思是对于一个输入x,私钥SK的拥有者可以计算y=FSK(x)y=FSK(x),证明PSK(x)PSK(x ). 根据证明(proof)和SK对应的公钥PK(PK=gSKPK=gSK),任何人都可以验证y是否计算正确,但不知道SK是什么。

3、这个就更简单了,将这些点序列化,然后Hash得到一个大整数。 请注意,这个大整数需要对曲线的阶数取模。

4. 接下来我们要证明两者相等。

5. 2).k,由证明者使用ECVRF_nonce_generation生成。

6.另外,你需要知道在ECDSA中:。

7. V=HsΓc=Hk+cxΓc=Hk+cxHxc=Hk+cxHcx=HkV=HsΓc=Hk+cxΓc=Hk+cxHxc=Hk+cxHcx=Hk。

8. 也就是说,证明者生成一个随机数,并给出一个证明比特币随机数从哪里来,证明这个随机数是按照我们确定的规则生成的。

9、两点相减表示除法,如HB=HBHB。

10. H1:将任意信息映射到曲线上的点。

比特币的实际应用

1、思路也很简单,把Hash(m)(注意是256位的hash)作为曲线上的X,然后带入上面的椭圆曲线公式,求出对应的Y。

2. pub(super)fnhash_points(points: &[EdwardsPoint])->ed25519_Scalar{letmutresult=[0u8;32];letmuthash=Sha512::new().chain(&[SUITE, TWO]);forpointinpoints.iter( ){hash=hash.chain(point.compress().to_bytes());}result[..16].copy_from_slice(&hash.result()[..16]);ed25519_Scalar::from_bits(result)//这里,基点实际上是取模}。

3、虽然随机数用ΓΓ表示,也就是曲线上的一个点,但是通过Hash计算很容易将其转化为一个大整数。

4. 1). 使用 UU 代替 BkBk。

5. ED25519数字签名算法。 pub(super) fnnonce_generation_bytes(nonce: [u8;32], h_point: EdwardsPoint)->[u8;64]{letmutk_buf=[0u8;64];k_buf.copy_from_slice(&Sha512::new().chain(nonce)。 chain(h_point.compress().as_bytes()).result()[..],);//生成的思路也很简单,就是Hash后得到一个大整数k_buf}。

6、这里的nonce是私钥推导出来的,h_point就是下面用的H.。

7. 生成随机数和证明。 c'c'的计算和prover计算cc的过程只有两个地方不同:。

8. Y:公钥,其中Y=BxY=Bx。

9. x:可以认为是私钥,也可以是从私钥推导出来的。

10. 3). 证明:{ΓΓ, cc, ss}。

区块链中的比特币

1. 简要说明:。 H2:将一系列点散列成一个大整数。

2、ED25519是一种具有极高签名和验证性能的数字签名算法。 一个4核4GHz的Westmerecpu每秒可以验证71000个签名,非常安全,相当于大约3000位的RSA。 签名过程不依赖随机数生成器,不依赖哈希函数的防碰撞,不存在时间通道攻击问题,而且签名很小比特币随机数从哪里来,只有64字节,公钥为也很小,只有32个字节。 ED25519的用法可以参考。

3. 验证过程。 1234567891011121314151617181920212223242526。

4. 2). αα:VRF 输入源。 c'=H2(H,Γ,U,V)c'=H2(H,Γ,U,V)。

5.推导中所用符号的含义。 k=ECVRFnoncegeneration(SK,H)k=ECVRFnoncegeneration(SK,H)。

6.可验证(知道公钥PK的人都知道SK生成的随机数是否合规)。

7. 12345678910111213141516171819202122232425262728293031323334353637。

8.Γ=HxΓ=Hx。 什么是 VRF。

9. B:ED25519 曲线中的基点。

10、验证者只知道x,不知道私钥SK持有者广播前的随机数是多少?

中本聪比特币地址

1. 123456789.私钥SK的持有者无法伪造随机数,x一旦确定,随机数也就确定了。

2. 如果c'c'和cc相等,则认定ΓΓ是证明者按照规则产生的随机数。

3. SK:私钥。 2). 将 HkHk 替换为 VV。

4.大小写字母代表曲线上的点,小写字母代表大整数。

5. Libra使用的椭圆曲线是ED25519,而不是以太坊和比特币使用的secp256k。 虽然有区别,但本质上都是椭圆曲线,基本性质完全相同。 所以适用于S256曲线的VRF算法在Libra中也是一样的。

6、如果一个整数乘以一个点,其实就是用一个指数来表示,比如x∗B=Bxx∗B=Bx。

7. 1). Y:公钥。 证明V=HkV=Hk。

8. 123456789101112131415161718192021。

9. Libra中VRF的实现。 这里的证明其实就是证明Γ=HxΓ=Hx,而不是通过其他任何方式。

10. 随机数产生过程及证明。 1). 私钥是 x。

如何获得比特币

1.证明U=BkU=Bk。 需要补充的是,验证者无法知道: 。

2. //self为私钥,alpha为VRF的输入源 pub(super)fnhash_to_curve(&self, alpha:&[u8])->EdwardsPoint{letmutresult=[0u8;32];letmutcounter=0;letmutwrapped_point:选项=无; while wrapped_point.is_none(){result.copy_from_slice(&Sha512::new().chain(&[SUITE,ONE]).chain(self.as_bytes()).chain(&alpha).chain(&[counter]) 。 result()[..32],//这里用的是sha512,但只取前半部分,所以是256位);wrapped_point=CompressedEdwardsY::from_slice(&result).decompress();counter+=1; } wrapped_point.unwrap().mul_by_cofactor()}。

3. 然后将Proof=Γ, c, sProof=Γ, c, s发送给验证者..

4.这就是所谓的随机数(除了SK持有者,其他人提前不知道)。

5. s=k+cxs=k+cx。 ///更长的private key whichiss lightly optimized for proof generation.//////Thisissimilarinstructuretoed25519_dalek::ExpandedSecretKey.Itcanbeproducedfrom///aVRFPrivateKey.pubstructVRFExpandedPrivateKey{pub(super)key:ed25519_Scalar,pub(super)nonce:[u8;32],}///Producesaproofforaninput( using theexpandedprivatekey)pubfnprove(&self, pk:&VRFPublicKey, alpha:&[u8])->Proof{leth_point=pk.hash_to_curve(alpha);//k其实是一个随机数,这里使用RFC6979中的规则使得每生成的证明完全一样,//它也用在比特币和以太坊签名中。 但是如果你硬要用随机数,别人也帮不上忙,//而且完全可以工作 letk_scalar=ed25519_Scalar::from_bytes_mod_order_wide( &nonce_generation_bytes(self.nonce, h_point));//nonce是由私钥hash生成的,可以认为私钥确定,nonce确定,h_point的用法和签名中一样,//就是要签名的信息 so 在原文中,共识是这样的:k =ECVRF_nonce_generation(SK, //h_string)//Gamma=x*Hletgamma=h_point*self.key;//c=ECVRF_hash_points(H, Gamma, k*B, k*H) letc_scalar=hash_points(&[h_point, gamma , ED25519_BASEPOINT_POINT*k_scalar, h_point*k_scalar,]);//s=(k+c*x)modq//proof={gama,c,s}Proof{gamma, // 这也是生成的随机数c VRF:c_scalar,s:k_scalar+c_scalar*self.key,}}。

6. ///AnECVRFpublickey#[derive(Serialize, Deserialize, Deref, Debug, PartialEq, Eq)]pubstructVRFPublicKey(ed25519_PublicKey); ///Givena[`Proof`] 和一个输入,返回证明是否对输入有效 /// 和 publickeypubfnverify(&self, proof: , alpha: &[u8])->Result{//也映射已知的某些信息alpha到H点 leth_point=self.hash_to_curve(alpha);//PK: 是公钥 letpk_point=CompressedEdwardsY::from_slice(self .as_bytes()).decompress().unwrap();// c'=ECVRF_hash_points(H, Gamma, U, V) letcprime=hash_points(&[h_point, proof.gamma, ED25519_BASEPOINT_POINT*proof.s-pk_point*proof.c, //U=s*Bc*Yh_point*proof.s -proof.gamma*proof.c, //V=s*Hc*Gamma]);//等于有效,不等于无效 ifproof.c ==cprime{Ok(())}else{bail! (“针对此公钥过度验证的证明”)}}。

7. U=BsYc U=BsYc。 U=BsYc=Bk+cxYc=Bk+cxBxc=Bk+cxBcx=BkU=BsYc=Bk+cxYc=Bk+cxBxc=Bk+cxBcx=Bk。

8. ECVRF_nonce_generation。

9. 12345678910. c=H2(H, Γ, Bk, Hk) c=H2(H, Γ, Bk, Hk)。

10. 原来的文章提到了使用双线性映射来做这个。 当然,VRF可以有多种不同的实现方式,只要满足上述条件即可。 一个是随机的,另一个是可验证的。

有多少个比特币聪

1. V=HsΓcV=HsΓc。 具体对应代码为hash_to_curve。

2.实施过程。 VRF的全称是verifiable random function,即可验证的随机数。 他有两个特点:第一,他产生随机数,第二,他是可验证的!

3、根据私钥和待签名信息,推导出一个确定的大整数。

4. 同时,ED25519用于zcash的签名。 ED25519也有其独特的应用,这应该也是注重隐私的Libra采用它的原因。