Dsa
ECDSA 簽名中 xy 和 rs 之間的關係是什麼?
我正在使用 OpenSSL 和 EVP 介面在 C 中編寫函式以與英特爾 SGX 互動。其中一個函式計算一些數據的 ECDSA(使用 SHA256)簽名。
OpenSSL 中 ECDSA 簽名的輸出是一個帶有兩個整數的 ASN.1 結構,我假設它是
r
和s
。但是,英特爾 SGX 中表示簽名的資料結構有兩個值,x
和y
,每個值都是固定長度的 32 字節。#define SGX_SHA256_HASH_SIZE 32 #define SGX_ECP256_KEY_SIZE 32 #define SGX_NISTP_ECP256_KEY_SIZE (SGX_ECP256_KEY_SIZE/sizeof(uint32_t)) typedef struct _sgx_ec256_private_t { uint8_t r[SGX_ECP256_KEY_SIZE]; } sgx_ec256_private_t; typedef struct _sgx_ec256_public_t { uint8_t gx[SGX_ECP256_KEY_SIZE]; uint8_t gy[SGX_ECP256_KEY_SIZE]; } sgx_ec256_public_t; typedef struct _sgx_ec256_signature_t <----- this structure { uint32_t x[SGX_NISTP_ECP256_KEY_SIZE]; uint32_t y[SGX_NISTP_ECP256_KEY_SIZE]; } sgx_ec256_signature_t;
我需要以某種方式將OpenSSL 的 libcrypto 返回的
r
和轉換為英特爾 SGX中使用的和。在 ECDSA 簽名的上下文中,這些參數之間的關係是什麼?s``x``y
ECDSA 簽名是這對夫婦 $ (r, s) $ 和 $ r \equiv (k\times G)_x \pmod{q} $ 和 $ s \equiv k^{-1} (H(m) + r,t) \pmod q $ 在哪裡 $ G $ 是階橢圓曲線的一個點 $ q $ 和 $ t $ 密鑰。 $ r $ 和 $ s $ 因此,如果 ECDSA 算法中使用的點是有序的,則為 256 位整數 $ q \approx 2^{256} $ 這是 secp256 曲線。
大機率, $ x $ 代表 $ r $ 和 $ y $ 代表 $ s $ . 您只需要將您的 OpenSSL 簽名轉換為適當的格式。
OpenSSL *BN_bn2bin()*可能有用。