【问题标题】:Performing an EC public key calculation for given secret key gives wrong results对给定的密钥执行 EC 公钥计算会给出错误的结果
【发布时间】:2015-08-24 06:13:47
【问题描述】:

我试图了解给定密钥的 EC 公钥计算。在这个问题之后,我找到了well explained answer,但是(经常发生)出了点问题。根据之前的回答和this document,我使用以下Perl脚本进行计算:

#!/usr/bin/perl

use strict;
use warnings;

use Math::BigInt;

my $d_hex = "18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725";
my $d_num = Math::BigInt->new("0x$d_hex");

my $g_hex = "0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8";
my $g_num = Math::BigInt->new("0x$g_hex");

my $q_num = $d_num->copy()->bmul($g_num);
my $q_hex = $q_num->as_hex();

# Expect: 0x0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6
# Result: 0x479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798611c24f290d443a7c839f40d5512f071e48c9c424b038039d222fa320142ebdd

print "$q_hex\n";

这里的预期结果是指使用 C 语言编写的代码从先前建立的答案计算的结果。如您所见,结果是不同的。我做错了什么?

【问题讨论】:

    标签: perl cryptography public-key elliptic-curve


    【解决方案1】:

    我不习惯 Perl,但我看不到您正在初始化或使用循环组。椭圆曲线运算和非对称加密通常(大部分)总是在循环群中执行

    【讨论】:

    • 谢谢,我找到了一个用 PHP 编写的不错的库,在那里我找到了处理它的方法。完成后我会在那里发布正确的答案。
    【解决方案2】:

    所以,我找到了一个可以从私钥生成地址的 PHP library,并基于这个 PHP 代码在 Perl 中编写了一个 example code。这很奇怪,但在某些情况下有效。无论如何,这足以让我了解它是如何工作的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多