Dsa

ECDSA 簽名中 xy 和 rs 之間的關係是什麼?

  • August 9, 2017

我正在使用 OpenSSL 和 EVP 介面在 C 中編寫函式以與英特爾 SGX 互動。其中一個函式計算一些數據的 ECDSA(使用 SHA256)簽名。

OpenSSL 中 ECDSA 簽名的輸出是一個帶有兩個整數的 ASN.1 結構,我假設它是rs。但是,英特爾 SGX 中表示簽名的資料結構有兩個值,xy,每個值都是固定長度的 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()*可能有用。

引用自:https://crypto.stackexchange.com/questions/50716