2196962_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2196962_ja-JP

2196962_ja-JP

CA X509証明書の署名のRSA検証による真正性の確認

こんにちは@lukaszadrapaさん

私は CA 自己署名証明書を作成しました。これを使用して、公開キーによって証明書の署名を検証する必要があるアプリケーションを構築する必要があります。

これは私のアプリケーション コードですが、検証失敗のエラー コードが表示されています。

int main(void) {
/* ==========================================================
* 1. 環境とハードウェアセキュリティモジュールを初期化する
* ============================================================ */
終了するまで待機します();
 
/*NVMカタログ内のECCキーペアのキーハンドル*/
hseKeyHandle_t g2b_keyPairHandler = GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM,
0, 0);
/* RAMカタログ内の公開鍵のキーハンドル*/
hseKeyHandle_t g2b_keyPubHandler = GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_RAM, 0,
0);
 
/*キーカタログをフォーマットします */
g2b_HSE_Status = フォーマットキーカタログ(g2b_nvmKeyCatalog_rsa,
g2b_ramKeyCatalog_rsa);
 
/*フレームワーク内のキーを処理するためのキーアロケータドライバを初期化します*/
g2b_HSE_Status = HKF_Init(g2b_nvmKeyCatalog_rsa、g2b_ramKeyCatalog_rsa);
 
/* ==========================================================
* 2. CA証明書(PEM形式)をロードする
* ============================================================ */
静的定数char *ca_pem =
"-----証明書開始-----\r\n"
"MIIDhDCCAmygAwIBAgIINYKWbrYzIuEwDQYJKoZIhvcNAQELBQAwSDELMAkGA1UE\r\n"
"BhMCSU4xJzAlBgNVBAoTHkdldHRvYnl0ZSBUZWNobm9sb2dpZXMgUHZ0IEx0ZDEQ\r\n"
「MA4GA1UEAwwHUm9vdF9DQTAeFw0yNTEwMjgxMTQ0MDBaFw0zNTEwMjgxMTQ0MDBa\r\n」
「MEgxCzAJBgNVBAYTAklOMScwJQYDVQQKEx5HZXR0b2J5dGUgVGVjaG5vbG9naWVz\r\n」
「IFB2dCBMdGQxEDAOBgNVBAMMB1Jvb3RfQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\r\n」
"DwAwggEKAoIBAQC5+qqEb+wIDQTG7mgAAgXdH9eM1PjuR34e4qDZDTW7aRukWt0I\r\n"
"Whwef6NbfXV51N/CI+4+446sND4jW8Y4tK8h7i+QJBaTx3sdDyBO3JNthpp/uUtt\r\n"
"+2EUGJP8tKNiP1GhhAjjCMmHwrY3kqyAzXKiCdRFGnWOdQvae6QfgTogDGoXwfEj\r\n"
"IGRfOAXZYOLo/+PTm7AZvF+eWSGnXV3mnvP0FimE/NhBdJwL3T8AoxaMW+jNWRTf\r\n"
"XV5NAZili62U7Va/BdGSw3Vrbf70O3S7nbnQWmHJTKrZT8CjUft2fVXpsNWJ+lAp\r\n"
"cWqRrOtY5Ux5sO2ke5l52vXVrWckwSHESCCjAgMBAAGjcjBwMA8GA1UdEweb/wQF\r\n"
"MAMBAf8wHQYDVR0OBBYEFOaB3KdlqOw1UgifcfwjaAQmyoHjMAsGA1UdDwQEAwIB\r\n"
"BjARBglghkgBhvhCAQEEBAMCAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZp\r\n"
"Y2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAtkNO6oP39gHMzH6Zz53dOs6zqJbrZFab\r\n"
「w1ekLN30hwAbC9v32zp9Elq1zFnZRQAeILOYTpeR2ejD2PgpZATeYhH9w93OgDgx\r\n」
"/CWtDQAcYN/kOvIzAaFGBY3+QoRsOTzggLNNehhO4ZhevBjRS6QWsJDY1RaAp8ss\r\n"
"9QWJnuYtkfUAtfqDD3jGC3VsE9h5dBQn4JG0REeC7go6S7D+ofzzgBDbK/gwdFcr\r\n"
「YnS4e9Mse0D1RQjFEaEKibB0hX7L3uEAzVIDCS2lD/0jzwCLxQ1xhFooVzv5Tb4k\r\n」
「nRr+v8ht/baCu3vtZEeGxM8/IeP3ttjavdNnb/IiCS2nVgj/YfzNDw==\r\n」
"-----証明書終了-----\r\n";
pem_cert_to_der(ca_pem, &ca_der, &ca_der_len);
 
/* ==========================================================
* 3. CA証明書を解析して重要なフィールドを抽出する
* ============================================================ */
 
int rc = simple_x509_parse_der(ca_der, ca_der_len, &c);
(rc) の場合 {
/* これが失敗した場合、証明書は不正な形式であるかサポートされていません。*/
}
 
/* ==========================================================
* 4. 検証のために重要なASN.1スライスを見つける
* ============================================================ */
 
if (simple_x509_locate_core(ca_der, ca_der_len, &tbs, &tbs_len, &sig_oid,
&sig_oid_len, &sig, &sig_len) != SX_OK) {
printf("コアの検索に失敗しました\n");
-1 を返します。
}
 
/* ==========================================================
* 5. CA自身の公開鍵を抽出する(SPKIビット -> N、E)
* ============================================================ */
 
simple_x509_locate_spki_bits(ca_der, ca_der_len, &spki_bits, &spki_len);
rsa_pub_init(&ca_pub);
 
/* ==========================================================
* 6. 署名アルゴリズムOIDをRSA + SHA256スキームにマッピング
* ============================================================ */
 
sig_params_t スキーム = map_sig_oid(sig_oid, sig_oid_len);
 
g2b_HSE_Status = ハッシュ要求(HSE_ACCESS_MODE_ONE_PASS, 0U, 1U,
HSE_HASH_ALGO_SHA2_256, 0U, (uint32_t) tbs_len, tbs, &hash_len, ハッシュ,
txOptions、HSE_SGT_OPTION_NONE);
 
uint16_t modulus_len = ca_pub.N_len * 8;
uint16_t exponent_len = ca_pub.E_len;
g2b_HSE_Status = LoadRsaPublicKey(&g2b_keyPubHandler, 0U, modulus_len,
ca_pub.N、exponent_len、ca_pub.E);
 
g2b_HSE_Status = RsaPkcs1v15VerSrv(g2b_keyPubHandler、HSE_HASH_ALGO_SHA2_256、
(uint32_t) tbs_len, tbs, FALSE, HSE_SGT_OPTION_NONE,
(uint32_t) &sig_len, sig);
 
rsa_pub_free(&ca_pub);
 
/* デモ終了: 生き続ける*/
のために (;;) {
 
}
 
/* 到達不能 */
/* 0を返す; */
}
Re: RSA Verification of Signature of CA X509 Certificate for authenticity

こんにちは@R_S002

前回の返信を解決策として受け入れていただいたのを確認しました。問題は解決したということですか?今日は確認したかったSO、まだアクティブな問題であるかどうかを確認してください。

ありがとうございます

ルーカス

Re: RSA Verification of Signature of CA X509 Certificate for authenticity

こんにちは@lukaszadrapa


実際、私は次のステップに進む前に各ステップを検証するだけで、この完全なコードをステップごとに構築しました。したがって、署名検証ステップより上では問題はないと思います/予想します。

また、中間データはポインターなので、このコードを DS に直接ビルドして実行CAN。したがって、ここにコピーして貼り付けるのは面倒です。
ご希望であれば、証明書と公開鍵の PEM ファイルをCANお送りします。

これは緊急の開発です、SO迅速な返信が非常に役立ちます。

Re: RSA Verification of Signature of CA X509 Certificate for authenticity

こんにちは@R_S002

明確にするために、プロセスの各ステップを個別に検証してみましたか?たとえば、中間結果を OpenSSL と比較するなどです。そうすれば、どこで相違があるのかを正確に特定できるかもしれません。可能であれば、取得した中間データ(TBS、署名、公開鍵など)を共有していただけますか?

よろしくお願いいたします。

ルーカス

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 05:07 AM
Updated by: