Community Translations - Signature verification using 0xE0E0 certificate of OPTIGA™ Trust M – KBA235163

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
keni_4440091
Level 7
Level 7
500 replies posted 100 solutions authored 50 solutions authored

Dear Supporter

I want to translate the following KBA. Please confirm to my work.

Signature verification using 0xE0E0 certificate of OPTIGA™ Trust M – KBA235163

Regards,

Nino

0 Likes
1 Solution
4 Replies
Sharath_V
Moderator
Moderator
Moderator
First comment on blog 250 sign-ins 100 replies posted

Hi @keni_4440091 , thanks for your interest in the KBA. Please go ahead and translate it.

Regards,

Sharath

0 Likes

Dear Sharath

The following shows the translation version of the targeted KBA.

Please confirm and double check.

Regards,

Nino

------------------------------------------------------------------------------------------------------------------------

OPTIGA™ Trust Mの0xE0E0証明書を使用した署名検証 – KBA235163

 

Version: **

 

OPTIGA™ Trust Mには、0xE0F0の秘密鍵、および0xE0E0の公開鍵証明書(TLS ID証明書チェーン形式)の事前に用意された鍵ペアがあります。

以下のように、対応する秘密鍵から生成された署名を検証する、この公開鍵証明書を使用します:

 

方法1:証明書から公開鍵を使用する

 

optiga_util_read_data APIを使用して、0xE0E0データオブジェクトから公開鍵証明書を読みます。読んだ内容を印刷し、ローカルデバイスにそれを保存します(メモ帳にコピーします)。OpenSSLツールを使用して証明書をデコードし、公開鍵をメモします。「example_crypt_ecdsa_verify」コード例のecc_public_key_componentバッファに、この公開鍵をコピーします。適切なダイジェストおよび署名を使用して、この例を実行します。

 

方法2:証明書OIDObject ID)を使用する

 

OIDを使用して署名を検証するには、データオブジェクトは単一のX.509証明書(ASN.1 DERエンコード)のみを含む必要があります。0xE0E0の公開鍵証明書は、TLS ID証明書チェーンの形式であるため、このOIDを直接使用して署名を検証することはできません。したがって、最初に、optiga_util_read_data APIを使用して、0xE0E0データオブジェクトから公開鍵証明書を読みます。読んだ内容を印刷し、DER-エンコードされたX.509証明書の最初のバイトを示す0x30バイトを探します。(以前のすべてのデータバイトは、X.509公開鍵証明書の一部ではない証明書チェーンデータを含みます)

 

署名検証コードでは、optiga_util_read_data APIを使用して0x30データに対応するオフセットから0xE0E0証明書を読みます。これを、optiga_util_write_data APIを使用して、0xE0E8 / 0xE0E9としてoptiga_oidと一緒にトラストアンカーデータオブジェクトに保存します。ここで、このトラストアンカーOIDポインターを、OPTIGA_CRYPT_OID_DATAとしてpublic_key_source_typeと一緒にoptiga_crypt_ecdsa_verify APIに渡します。このフローを以下に示します。

 

uint16_t CertChainOID, TrustAnchorOID;
int16_t offset, bytes_to_read;
uint8_t public_key_buffer[1024];
.
.
CertChainOID = 0xE0E0;
rustAnchorOID = 0xE0E8;
offset = 0x09;    // offset corresponding to 0x30
bytes_to_read = sizeof(public_key_buffer);
.
.
Return_status = optiga_util_read_data (me, CertChainOID, offset, public_key_buffer, &bytes_to_read);
Return_status = optiga_util_write_data (me, TrustAnchorOID, OPTIGA_UTIL_ERASE_AND_WRITE, 0x00, public_key_buffer, bytes_to read);
Return_status = optiga_crypt_ecdsa_verify (me, digest_value, sizeof(digest_value), sign, sizeof(sign), OPTIGA_CRYPT_OID_DATA, (void *) &TrustAnchorOID);

 

Labels    OPTIGA™ Trust M

Tags:  internal certificate  OPTIGATM Trust M  signature verification  Add tags

0 Likes

The translation is sent for review

0 Likes