专栏中心

EEPW首页 > 专栏 > 公钥

公钥

发布人:电子禅石 时间:2020-02-27 来源:工程师 发布文章
公钥

比特币的公钥是根据私钥计算出来的。

私钥本质上是一个256位整数,记作k。根据比特币采用的ECDSA算法,可以推导出两个256位整数,记作(x, y),这两个256位整数即为非压缩格式的公钥。

由于ECC曲线的特点,根据非压缩格式的公钥(x, y)的x实际上也可推算出y,但需要知道y的奇偶性,因此,可以根据(x, y)推算出x',作为压缩格式的公钥。

压缩格式的公钥实际上只保存x这一个256位整数,但需要根据y的奇偶性在x前面添加02或03前缀,y为偶数时添加02,否则添加03,这样,得到一个1+32=33字节的压缩格式的公钥数据,记作x'。

注意压缩格式的公钥和非压缩格式的公钥是可以互相转换的,但均不可反向推导出私钥。

非压缩格式的公钥目前已很少使用,原因是非压缩格式的公钥签名脚本数据会更长。

/* Dependencies */
typedef enum MotBaseTypes_ECCPoint_PR {
    MotBaseTypes_ECCPoint_PR_NOTHING,   /* No components present */
    MotBaseTypes_ECCPoint_PR_x_only,
    MotBaseTypes_ECCPoint_PR_fill,
    MotBaseTypes_ECCPoint_PR_compressed_y_0,
    MotBaseTypes_ECCPoint_PR_compressed_y_1,
    MotBaseTypes_ECCPoint_PR_uncompressedP256
} MotBaseTypes_ECCPoint_PR;

/* ECCPoint */
typedef struct MotBaseTypes_ECCPoint {
    MotBaseTypes_ECCPoint_PR present;
    union MotBaseTypes_ECCPoint_u {
        OCTET_STRING_t   x_only;
        NULL_t   fill;
        OCTET_STRING_t   compressed_y_0;
        OCTET_STRING_t   compressed_y_1;
        UncompressedP256_t   uncompressedP256;
    } choice;
    
    /* Context for parsing across buffer boundaries */
    asn_struct_ctx_t _asn_ctx;
} MotBaseTypes_ECCPoint_t;


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

苹果调整 iPhone 17 系列生产结构:Air 机型减产,基础款增产五百万台

消费电子 2025-10-24

Arteris与阿里巴巴达摩院深化合作,加速高性能RISC-V SoC设计

Nordic Semiconductor通过Memfault推动的nRF Cloud提供完备的设备可观测性与OTA更新功能

Intersil Zilker Labs电源导航软件

视频 2011-10-17

英飞凌推出针对工业与消费类应用优化的OptiMOS™ 7功率MOSFET

电源模块设计

视频 2011-10-17

纳芯微推出集成隔离电源的隔离采样芯片NSI36xx系列

西门子推出Tessent IJTAG Pro,加速复杂半导体设计与测试进程

从技术领先到市场引领:芯力特如何借力世强硬创,敲开年采购千万颗的头部客户大门?

Intersil ZL9101 数字电源模块 - 热设计

ZL9101M数字电源模块简介

视频 2011-10-17

学子专区论坛 — ADALM2000实验:有源混频器

据称良率受限,三星 Exynos 2600 或仅覆盖 Galaxy S26 约 30% 产量

消费电子 2025-10-24

ISL55210子评估板的介绍

视频 2011-10-17

Axelera AI 推出 “Europa” AI 处理器,挑战 NVIDIA 生态

消费电子 2025-10-24
更多 培训课堂
更多 焦点
更多 视频

技术专区