私钥-公钥对 一个以太坊账户就是一个 SECP256K1 密钥对。"SECP256K1"只是我们使用的特定椭圆曲线的名称。...这个曲线的名称或者规范对于理解密钥对的工作原理并不重要,还有很多不同名称和参数的曲线。 一个密钥对包含一个私钥和一个公钥。私钥需要保密的,通过它可以访问账户。...,它是椭圆曲线上的一个点,具有 x 坐标、y 坐标,如(0, 1), (42, 138), 或者(34876, 4893)。...不过这些都不是曲线上的公钥。 要通过私钥找到这个点,你需要对使用的基点`G`[2]和标量(私钥)执行一个椭圆曲线序列乘法[3]运算。结果会得到另一个点,就是你的公钥。...公钥是底层椭圆曲线上 x 和 y 坐标对应的点(此处:SECP256K1,与比特币使用相同)。 以太坊地址是序列化公钥的截断 Keccak-256 哈希。
公钥是一个椭圆曲线上的点,可以表示为(x,y)的坐标形式,在比特币中公钥是一个65字节的字节数组,由04开头,后面跟随64字节的x坐标和64字节的y坐标组成 对公钥进行哈希运算。...公钥是一个椭圆曲线上的点,可以表示为(x,y)的坐标形式,在比特币中公钥是一个65字节的字节数组,由04开头,后面跟随64字节的x坐标和64字节的y坐标组成 计算交易的哈希值。...签名是一个由两个大整数r和s组成的序列,通常表示为一个64字节的字节数组,签名用于验证交易的真实性和完整性 通过公钥Q、交易哈希值和签名验证交易的真实性和完整性。...具体来说就是通过公钥Q计算出椭圆曲线上的点P,然后通过签名中的r和s可以计算出椭圆曲线上的点Q,如果点Q和点P相等,则交易验证通过,否则交易验证失败 以下是一个使用Go语言实现椭圆曲线加密算法对比特币交易进行签名验证的示例代码...公钥是一个椭圆曲线上的点,可以表示为(x,y)的坐标形式,在比特币中公钥是一个65字节的字节数组,由04开头,后面跟随64字节的x坐标和64字节的y坐标组成 选择一个私钥d2。
如果是非压缩公钥,则xB和yB都需要输入,分别填非压缩公钥的前32字节和后32字节。 其实说白点儿xB和yB合起来才是一串完整的非压缩公钥,只是把公钥分成了两段罢了。...至于为啥公钥要搞成x,y两段,是因为公钥是椭圆曲线上的一个点,一个点包含(x,y)两个分量,这才确定了一个坐标。 为啥给定了x就能求得y,给定y能否求得x呢?...当然了,根据椭圆曲线方程:y^2=x^3+ax+b, a,b都是常数是已知的,给了x就能得到y,给定y就能得到x。有时候压缩公钥别人会给02开头的,有时候会给03开头的。...理论上方程式和各种参数组合可以是任意的,但是在密码学中,为了安全,系统预先定义了一系列的曲线,称为命名曲线(name curve),比如secp256k1就是一个命名曲线。...那么破解一个228字节的椭圆曲线秘钥需要煮沸地球上所有水的能量。如果RSA要达到一个同样的安全水平,你需要一个2,380字节的秘钥。
至于为啥公钥要搞成x,y两段,是因为公钥是椭圆曲线上的一个点,一个点包含(x,y)两个分量,这才确定了一个坐标。 为啥给定了x就能求得y,给定y能否求得x呢?...当然了,根据椭圆曲线方程:y^2=x^3+ax+b, a,b都是常数是已知的,给了x就能得到y,给定y就能得到x。有时候压缩公钥别人会给02开头的,有时候会给03开头的。...国密sm2使用的是固定的值”1234567812345678″。 a,b,xG和yG是椭圆曲线算法选定的椭圆曲线参数。后面有说明。这几个都是个固定值。 xA和yA这个就是公钥的前后两段。...理论上方程式和各种参数组合可以是任意的,但是在密码学中,为了安全,系统预先定义了一系列的曲线,称为命名曲线(name curve),比如secp256k1就是一个命名曲线。...那么激活成功教程一个228字节的椭圆曲线秘钥需要煮沸地球上所有水的能量。如果RSA要达到一个同样的安全水平,你需要一个2,380字节的秘钥。
不要自己编写代码来生成随机数或者用你的编程语言随机生成一个简单的随机数。 公钥 以太坊公钥是椭圆曲线上的一个点,一个满足椭圆曲线等式的(x,y)坐标。...它由两个从私钥生成的数字组成,并且只能单向生成,这意味着,如果你有一个私钥,就可以计算出公钥,但是你不能从公钥计算出私钥。...公钥是私钥通过椭圆曲线乘法得来,是不可逆的: ,这里的 是私钥,G 是常数点(生成点), 是公钥。 椭圆曲线乘法(×)与普通的乘法不同。...椭圆曲线密码学 椭圆曲线密码学是非对称的,基于离散算法问题的公钥密码学,这种离散算法问题由椭圆曲线上的点的加法和乘法来表示。...》的作者 -椭圆曲线- 以太坊使用一个特定的椭圆曲线和一组数学常数,标准定义为secp256k1。
在前面章节我们介绍过,私钥是一个随机数,而公钥是将椭圆曲线上的G点与私钥对应的数字进行“乘法”后所得的结果。有了公钥和私钥,我们就很容易确认一笔交易的合法性。...首先假设我们有一个私钥记为N, 让它与椭圆曲线上的G点做 “乘法”操作后得到公钥P,因为公钥依然是椭圆曲线上的一点,因此P由x,y两个坐标组成,他们分别是32字节大小的数值,我们需要对这两个数值进行预处理...在前面章节中我们看到,在求余模式下, -x % p 等价于 (p-x) % p,因此基于有限域的椭圆曲线,如果点(x ,y)在曲线上,那么点(x , p - y)同样在曲线上。...同时有限域的元素个数p我们都选取为素数,因此如果y是偶数,那么p - y就是奇数,基于这个特性,给定椭圆曲线上一点(x, y),我们其实只需要存储x的值,然后确定y是奇数还是偶数即可,因为我们可以通过x...计算出y或者p - y,因此给定曲线上一点,在压缩模式下,它的预处理步骤如下: 1,选取数组起始字节,如果y是偶数,那么起始字节取值0x02,要不然取值0x03 2,将x的值转换成32个字节的数组,以大端的模式存储
前面我们了解了很多数据结构,例如有限群,椭圆曲线,公钥,私钥等,相关数据在应用时都需要通过网络进行数据传输,因此相关的数据结构需要进行序列化。...SEC,由于椭圆曲线关于x轴对称,因此给定一个x坐标,它最多对应两个y坐标,这两个y互为相反数。...于是给定椭圆曲线上一点(x,y),压缩形态SEC生成的步骤为: 1,如果y是奇数,那么以0x03开头,如果是偶数则以0x02开头 2,添加32字节的x坐标值 于是相应实现代码就是: def sec(self...既然节省掉y,那么接收方收到数据后就需要还原它,还记得椭圆曲线的格式为 y ^ 2 = x^3 + a * x + b,我们知道了x的值,那意味着知道了y平方的值,现在我们需要计算y的值。...Format),它的序列化步骤如下: 1,如果是主网私钥,以0x80开头,如果是测试网以0xef开头 2,将私钥转换为大端字节数组进行编码 3,如果公钥使用压缩SEC格式,那么在末尾添加0x01 4,
非对称加密算法中的公钥暗码体制依据其所依据的问题一般分为三类:大整数分化问题、离散对数问题和椭圆曲线问题。 1000.jpg 第一,引进区块链加密技能 加密算法一般分为对称加密和非对称加密。...离散对数问题类是指基于离散对数的困难性和强单向哈希函数的一种非对称分布式加密算法。椭圆曲线是指使用平面椭圆曲线来计算一组非对称的特殊值,比特币就采用了这种加密算法。...比特币的公钥是私钥通过Secp256k1椭圆曲线算法生成的65字节随机数。公钥可用于生成比特币交易中使用的地址。...生成进程是公钥先通过SHA256和RIPEMD160哈希处理,生成20字节的摘要成果(即Hash160的成果),再通过SHA256哈希算法和Base58转化,构成33个字符的比特币地址。...公钥生成进程是不可逆的,即私钥不能从公钥推导出来。比特币的公钥和私钥通常存储在比特币钱包文件中,其间私钥最为重要。丢掉私钥意味着丢掉相应地址的所有比特币财物。
根据mathworld中给出的椭圆曲线定义,描述椭圆曲线的函数可以定义如下: y^2 = x^3 + a*x + b 其中a、b是曲线的特征参数,决定了椭圆曲线的形状。...举个例子,对于椭圆曲线y^2 ≡ x^3 - 7x + 10 (mod p),当p的值分别是19、97、127、487时,其在坐标轴上的图像如下: ECD 注意这些点的集合在直角坐标中是关于直线y=p...举例来说,椭圆曲线y^2 ≡ x^3 - x + 3 (mod 127),且P=(16, 20),Q=(41,120)。...例如对于椭圆曲线*y^2 ≡ x^3 + 2x + 3 (mod 97)*和点 P=(3,6),在计算乘积时发现: 0P = 0 1P = (3,6) 2P = (80,10) 3P = (80,87)...已知私钥d和G我们可以很容易通过乘法计算出公钥H,但是反过来从公钥计算私钥却要面临离散对数问题。
这是以太坊黄皮书关于钱包(私钥、公钥、地址)的描述,仅仅 2 行文字。主要讲解私钥通过 ECDSA(椭圆曲线签名算法)推导出公钥,继而经过 Keccak 单向散列函数推导出地址。...从公钥推导出地址 (40 位 16 进制字符 / 160 比特 / 20 字节) 这是从ethereumjs/keythereum中剥离出来的 JavaScript 代码,关于黄皮书上的公式的具体实现...当我们调用 secp256k1.publicKeyCreate 获得公钥时,实际使用的是非对称加密中的椭圆曲线算法。通过该算法可以从私钥推导出公钥,这是一个不可逆的过程:K = k * G。...这就是椭圆曲线算法上的离散对数问题,也是为什么你可以分享地址(或公钥)给别人,但不能暴露自己的私钥。...在椭圆曲线中, 点的相加等同于从该点画切线找到与曲线相交的另⼀点, 然后映射到 x 轴。下图展示了从曲线上获得 G、2G、4G、8G 的几何操作。 什么是哈希算法?
他们支持通过使用钱包加密功能隐藏他们的私钥并且不公开密码,但这样的“中性”钱包也失去了生成公钥的权力。 确定性钱包不需要这种频繁的备份,椭圆曲线数学允许可以在不显示私钥的情况下计算公钥的方案。...详细说明:密钥分散 约定 在本文的其余部分,我们假设使用Bitcoin公钥密码术,即使用由secp256k1(http://www.secg.org/sec2-v2.pdf)定义的字段和曲线参数的椭圆曲线加密...serP(P):使用SEC1的压缩格式将坐标对P=(x,y)串行化为字节序列:(0x02或0x03)|| ser256(x),其中头字节取决于省略的y坐标的奇偶校验。...叶节点的链码被忽略,只有它们嵌入的私钥或公钥是相关的。由于这种结构,知道扩展私钥允许重构所有后代私钥和公钥,并且知道扩展公钥允许重建所有后代非硬化公钥。...(如果主密钥为0x00000000) 32字节:链码 33字节:公钥或私钥数据(公钥的serP(K),私钥的0x00 || ser256(k)) 可以通过首先添加32个校验和位(从双SHA-256校验和派生
可以看到,整个密钥协商过程中,小红和小明公开了 4 个信息:P、G、A、B,其中 P、G 是算法的参数,A 和 B 是公钥,而 a、b 是双方各自保管的私钥,黑客无法获取这 2 个私钥,因此黑客只能从公开的...),此时小红的公私钥为 Q1 和 d1,小明的公私钥为 Q2 和 d2; 双方交换各自的公钥,最后小红计算点(x1,y1) = d1Q2,小明计算点(x2,y2) = d2Q1,由于椭圆曲线上是可以满足乘法交换和结合律...G 和私钥计算出服务端的椭圆曲线公钥,这个会公开给客户端。...至此,双方都有对方的椭圆曲线公钥、自己的椭圆曲线私钥、椭圆曲线基点 G。...于是,双方都就计算出点(x,y),其中 x 坐标值双方都是一样的,前面说 ECDHE 算法时候,说 x 是会话密钥,但实际应用中,x 还不是最终的会话密钥。
二是公钥可向其他人公开,甚至人人可获取,私钥则保密,其他人无法通过该公钥推算出相应的私钥。利用此种算法生成的公钥和私钥,目前所知实际上是无法从公钥反向破解出私钥的。...但找到这样的算法的可能性是非常小的。 ECC:椭圆曲线算法。在1985年由Neal Koblitz和Victor Miller分别独立提出。...两者对比之下,各有千秋,但对于追求更高安全性的区块链来说,大多数公链还是会选择椭圆曲线算法。 加密算法的应用场景 非对称加密在区块链中主要应用于信息加密、数字签名和登录认证。...比如比特币和以太坊均使用的是ECC椭圆体系加密。 椭圆曲线加密算法也是Gaia的选择——一个指数级的安全算法。 GaiaWorld使用椭圆曲线算法生成公钥和私钥,选择的是curve25519曲线。...签名过程不依赖随机数生成器,不依赖hash函数的防碰撞性,没有时间通道攻击的问题,并且签名很小,只有64字节,公钥也很小,只有32字节。
理论上,这里的椭圆曲线所选择的几何方程是固定的,它可以表示为: y^2 = x^3 + ax + b 上式中a和b都是普通标量参数,以上方程所绘出的几何曲线如下图所示,其中红色曲线表示(a, b)...其次,Alice要创建一对钥,即一个私钥和一个公钥。私钥来自于[1, n-1]范围内一个随机数: ? 公钥如下,它来自私钥和基点的椭圆曲线点倍积: ?...计算 z,来自 e的最左边L_n个bits。 计算参数 w: ? 计算两个参数 u1 和 u2: ? 计算(x1, y1),如果(x1, y1)不是一个椭圆曲线上的点,则验证失败: ?...ecdsa.PublicKey结构体通过持有一个elliptic,Curve接口的实现体,可以提供椭圆曲线的所有属性,和相关操作;PublicKey的成员(X,Y),对应于算法理论中公钥 ? ...具体到变量类型上,Address类型是一个长度为20 bytes的字符串,而椭圆曲线数字签名中的公钥,原生含义应该是曲线上的一个点的坐标(X, Y),那么它们之间必然存在格式上的相互转换。
]byte) (*PrivateKey, *PublicKey) { // 根据字节pk,返回x,y x, y := curve.ScalarBaseMult(pk) // 定义一个私钥结构体,结构体中包含...:公钥结构体 priv := &PrivateKey{ PublicKey: e.PublicKey{ Curve: curve, X: x, Y: y, }...“曲线”的私钥和公钥。...} return elliptic.Marshal(S256(), p.X, p.Y) } // S256()是特定的椭圆曲线,在程序启动的时候进行初始化,后来调用只是获取其引用而已。...)的其他字节数组进行 sha3 处理. // sha3 的结果共有 32 字节。
在公开密钥加密和电子商业中RSA被广泛使用。它被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数字签名的算法,它能够抵抗到目前为止已知的所有密码攻击。...Curve Cryptography),ECC加密算法是一种公钥加密技术,以椭圆曲线理论为基础。...利用有限域上椭圆曲线的点构成的Abel群离散对数难解性,实现加密、解密和数字签名。将椭圆曲线中的加法运算与离散对数中的模乘运算相对应,就可以建立基于椭圆曲线的对应密码体制。...获取椭圆曲线的阶 """ x1 = x0 #-p的x坐标 y1 = (-1*y0)%p #-p的y坐标 tempX = x0...x0,y0,x1,y1 def get_graph(a, b, p): """ 输出椭圆曲线散点图 """ x_y = [] # 初始化二维数组 for
具体分为以下三个步骤: 创建随机私钥 (64 位 16 进制字符 / 256 比特 / 32 字节) 从私钥推导出公钥 (128 位 16 进制字符 / 512 比特 / 64 字节) 从公钥推导出地址...(40 位 16 进制字符 / 160 比特 / 20 字节) 以太坊黄皮书上关于钱包(私钥、公钥、地址)的描述如下: 椭圆曲线 公钥密码学 加密通常分为对称加密与非对称加密。...椭圆曲线原理 椭圆曲线由满足下列形式方程的所有点组成: y 2 = x 3 + a x + b y^2=x^3+ax+b y2=x3+ax+b 其中 4 a 3 + 27 b 2 ≠ 0 4a^...因此,椭圆曲线密码学就利用了这一原理,在给定基准点 P P P 的情况下,随机生成私钥 x x x ,再利用椭圆曲线快速计算出公钥 X X X 。...因此,我们将椭圆曲线的定义转化为: y 2 ≡ x 3 + a x + b ( m o d p ) y^2\equiv x^3+ax+b\qquad (mod\quad p) y2≡x3+ax+b(modp
openssl_pkey_get_details($res); $pub_key = $key_detail["key"]; $priv_pem = PEM::fromString($priv_key); // 转换为椭圆曲线私钥格式...3)->asTagged()->asExplicit()->asBitString()->string()); $pub_key_len = strlen($pub_key_hex) / 2; // 从公钥导出以太坊地址...在我的教程中,我使用OpenSSL函数生成PEM格式的椭圆曲线私钥,如下所示: $config = [ 'private_key_type' => OPENSSL_KEYTYPE_EC,...每个EC公钥始终以0x04开头。为了获得以太坊钱包地址的正确哈希值,我们需要删除前导0x04。...以太坊钱包地址长度为20个字节,长度为40个字符,因此我们只需要哈希数据的最后20个字节。
),ECC加密算法是一种公钥加密技术,以椭圆曲线理论为基础。...利用有限域上椭圆曲线的点构成的Abel群离散对数难解性,实现加密、解密和数字签名。将椭圆曲线中的加法运算与离散对数中的模乘运算相对应,就可以建立基于椭圆曲线的对应密码体制。...(x1 - x3) - y1) % p return x3,y3 def get_rank(x0, y0, a, b, p): """ 获取椭圆曲线的阶 """ x1 = x0 #-p...def get_graph(a, b, p): """ 输出椭圆曲线散点图 """ x_y = [] # 初始化二维数组 for i in range(p): x_y.append([...= False): x0,y0,x1,y1 = val x_y[x0][y0] = 1 x_y[x1][y1] = 1 print("椭圆曲线的散列图为:") for i in range(p
领取专属 10元无门槛券
手把手带您无忧上云