【问题标题】:Why isn't the key equal using OpenSSL diffie hellman?为什么使用 OpenSSL diffie hellman 的密钥不相等?
【发布时间】:2013-06-12 07:37:04
【问题描述】:

在执行这个 diffie hellman 交换示例时,我无法弄清楚为什么我的密钥不相等。 我在 C (openssl/dh.h) 中使用 openssl 库。

看起来很简单,但由于某种原因,键不一样。我错过了什么?

有什么想法吗?谢谢!

    void hexprint(unsigned char *printBuf, int len)
    {
        int i;
        for(i = 0; i < len; i++)
        {
            printf("%x ", printBuf[i]);
        }
        printf("\n");
    }

    int main(int argc, char *argv[])
    {
        srand(time(NULL));
        DH *dh1;
        DH *dh2;
        unsigned char *dh_secret1;
        unsigned char *dh_secret2;
        dh1 = DH_generate_parameters(256, 2, NULL, NULL);
        dh2 = DH_generate_parameters(256, 2, NULL, NULL);

        DH_generate_key(dh1);
        DH_generate_key(dh2);

        dh_secret1 = malloc(DH_size(dh1));
        memset(dh_secret1, 0, DH_size(dh1));
        dh_secret2 = malloc(DH_size(dh2));
        memset(dh_secret2, 0, DH_size(dh2));

        DH_compute_key(dh_secret1, dh2->pub_key, dh1);
        DH_compute_key(dh_secret2, dh1->pub_key, dh2);

        printf("Secret Key 1: \n");
        hexprint(dh_secret1, 32);
        printf("Secret Key 2: \n");
        hexprint(dh_secret2, 32);

        free(dh_secret1);
        free(dh_secret2);
        DH_free(dh1);
        DH_free(dh2);
    }

【问题讨论】:

    标签: c cryptography openssl diffie-hellman


    【解决方案1】:

    因为在 DH 中,用户必须共享相同的参数。 只执行一次DH_generate_parameters,并在用户之间共享。

    【讨论】:

    • 正确,通常需要进行交换,然后他们派生密钥,然后检查公钥是否确实不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多