2065738_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2065738_ja-JP

2065738_ja-JP

LPC55S28ブートローダーにおけるECDSA検証に関するヘルプ(サイズ制限32KB)

こんにちは、NXPコミュニティの皆さん、

LPC55S28用のセキュアブートローダーを開発しているのですが、ECDSA署名検証を実装する際に、コードサイズがかなり大きくなるという問題に直面しました。

最新号

私のブートローダーはECDSA P-256署名を検証する必要があり、32KBのフラッシュメモリ領域内に収まる必要があります。mbedTLSを使用してECDSA検証を行う場合(ECDSAのみを有効にする最小限の設定でも)、コードサイズが約13KBから56KBに急増します。

ネタバレ
名前 実行アドレス ロードアドレス サイズ タイプ
。文章0x0 該当なし 56412 セクション
mpi_mul_hlp 0x9ae2 n/a 6388 ローカル関数
ecp_mod_p256 0x839c n/a 2032 ローカル関数
左シフト 0x2bd0 n/a 1792 ローカル関数
MultprecCiosMul521_ct 0x4fdc n/a 1772 ローカル関数
shiftright 0x2514 n/a 1724 ローカル関数
倍精度スカラー乗算 0x3fb4 該当なし 1580 グローバル関数
MultprecCiosMul_ct 0x1b4c n/a 1444 ローカル関数
mbedtls_mpi_div_mpi 0xb69c 該当なし 1316 グローバル関数
mbedtls_mpi_inv_mod 0xbdfa n/a 1090 グローバル関数
precompute_double_scalar_LUT16 0x3aac n/a 1084 ローカル関数
invert_mod_p384 0x4884 n/a 1062 ローカル関数
ecp_double_jac 0x7d6c n/a 972 ローカル関数
ecp_add_mixed 0xac8 n/a 912 ローカル関数
mbedtls_ecp_muladd_restartable 0xea8 n/a 868 グローバル関数
Jac_addition 0x33ec n/a 776 グローバル関数
StrFormatPrintf 0x735c n/a 700 グローバル関数
invert_mod_p521 0x4d14 n/a 616 ローカル関数
invert_mod_p256 0x45e0 n/a 576 ローカル関数
verify_ecdsa_signature 0x4a4 n/a 544 ローカル関数
Jac_add_affine 0x36f4 n/a 536 グローバル関数
ecdsa_verify_restartable 0x12c0 n/a 504 ローカル関数
USART_Init 0x6404 n/a 460 グローバル関数
mbedtls_mpi_gcd 0xbc4a n/a 432 グローバル関数
CASPER_montadd 0x21f0 n/a 428 ローカル関数
hashcrypt_sha_process_message_data 0x5ddc n/a 420 ローカル関数
Jac_double 0x390c n/a 416 グローバル関数
USART_SetBaudRate 0x6650 n/a 396 グローバル関数
mbedtls_mpi_mul_mpi 0xb3d6 n/a 382 グローバル関数
CLOCK_SetFLASHAccessCyclesForFreq 0x5888 n/a 380 グローバル関数
__aeabi_uldivmod 0xd048 n/a 372 グローバル関数
mbedtls_mpi_add_abs 0x96ba n/a 366 グローバル関数
read_and_verify_toc 0x6c4 n/a 364 ローカル関数
CASPER_ECC_SECP521R1_MulAdd 0x19f4 n/a 344 グローバル関数
CASPER_half 0x239c n/a 340 ローカル関数
lowpower_set_system_voltage 0x6024 n/a 340 ローカル関数
mbedtls_mpi_shift_l 0x91bc n/a 330 グローバル関数
mbedtls_mpi_sub_abs 0x98ba n/a 326 グローバル関数
CASPER_ECC_SECP256R1_MulAdd 0x179c n/a 324 グローバル関数
DbgConsole_Init 0x2b0 n/a 312 グローバル関数
mbedtls_mpi_shift_r 0x9306 n/a 310 グローバル関数
mbedtls_mpi_cmp_mpi 0x9540 n/a 310 グローバル関数
__ベクトル 0x0 n/a 304 グローバルオブジェクト
g_pfnVectors 0x0 n/a 304 グローバルオブジェクト
CASPER_ECC_SECP384R1_MulAdd 0x18e0 n/a 276 グローバル関数
HAL_UartInitCommon 0x68cc n/a 272 ローカル関数
mbedtls_mpi_cmp_abs 0x943c n/a 260 グローバル関数
CASPER_montsub 0x20f0 n/a 256 ローカル関数
CASPER_MEMCPY 0x14e0 n/a 252 グローバル関数
fseek 0x6d50 n/a 248 グローバル関数
ecp_normalize_jac 0x7c78 n/a 244 ローカル関数
hashcrypt_sha_finalize 0xc5e2 n/a 238 ローカル関数
lowpower_set_dcdc_power_profile 0x6178 n/a 236 ローカル関数
mbedtls_mpi_copy 0x8cf6 n/a 210 グローバル関数
ecp_modp 0x9f8 n/a 208 ローカル関数
HASHCRYPT_SHA_Update 0xc7ac n/a 208 グローバル関数
precompute_double_scalar_LUT4 0x3ee8 n/a 204 ローカル関数
mbedtls_ecp_point_read_binary 0x930 n/a 200 グローバル関数
malloc 0x6b2c n/a 200 グローバル関数
mbedtls_mpi_write_binary 0x90f4 n/a 200 グローバル関数
ConvertRadixNumToString 0x7208 n/a 194 ローカル関数
HASHCRYPT_SHA_Finish 0xc87c n/a 184 グローバル関数
mbedtls_int_div_int 0xb5e8 n/a 180 ローカル関数
mbedtls_ecp_fix_negative 0x82f0 n/a 172 ローカル関数
lowpower_set_voltage_for_process 0xc934 n/a 170 ローカル関数
Jac_toAffine 0x3348 n/a 164 グローバル関数
HASHCRYPT_DriverIRQHandler 0x5f80 n/a 164 グローバル関数
ecp_group_load 0x81c2 n/a 162 ローカル関数
CLOCK_AttachClk 0x56e8 n/a 160 グローバル関数
add_sub_mpi 0x9a00 n/a 156 ローカル関数
mbedtls_ecp_group_free 0x7966 n/a 152 グローバル関数
lowpower_get_part_process_corner 0x6264 n/a 148 ローカル関数
mbedtls_mpi_mul_int 0xb554 n/a 148 グローバル関数
derive_mpi 0xc23c n/a 148 ローカル関数
mpi_sub_hlp 0x9828 n/a 146 ローカル関数
casper_select 0x15dc n/a 144 ローカル関数
hashcrypt_get_data 0xc454 n/a 144 ローカル関数
USART_WriteBlocking 0x67dc n/a 140 グローバル関数
PrintGetPrecision 0x6fba n/a 140 ローカル関数
mbedtls_mpi_mod_mpi 0xbbc0 n/a 138 グローバル関数
mbedtls_ecp_group_load 0x1238 n/a 136 グローバル関数
メイン 0x8ac n/a 132 グローバル関数
mbedtls_mpi_grow 0x8c1c n/a 132 グローバル関数
CLOCK_SetClkDiv 0x5788 n/a 128 グローバル関数
CLOCK_SetupFROClocking 0x5808 n/a 128 グローバル関数
USART_GetDefaultConfig 0x65d0 n/a 128 グローバル関数
mbedtls_ecp_group_init 0x7888 n/a 126 グローバル関数
jump_to_application 0x830 n/a 124 ローカル関数
mbedtls_mpi_read_binary 0x907a n/a 122 グローバル関数
CASPER_ecc_init 0x166c n/a 120 グローバル関数
multiply_casper 0x32d0 n/a 120 ローカル関数
_initio 0x6bf4 n/a 120 グローバル関数
FLEXCOMM_SetPeriph 0xc3e0 n/a 116 ローカル関数
CASPER_ECC_equal 0x16e4 n/a 112 グローバル関数
_Cwritebuf 0x6ca8 n/a 108 グローバル関数
hashcrypt_sha_one_block 0xc576 n/a 108 ローカル関数
PrintGetWidth 0x6f50 n/a 106 ローカル関数
DbgConsole_Vprintf 0x3e8 n/a 104 グローバル関数
toMontgomery_ECC_P384 0x4cac n/a 104 ローカル関数
mbedtls_mpi_bitlen 0x8f30 n/a 104 グローバル関数
_fdopen 0xcee2 n/a 104 グローバル関数
DbgConsole_PrintCallback 0x6ebe n/a 102 ローカル関数
mbedtls_mpi_lsb 0x8e88 n/a 102 グローバル関数
mpi_bigendian_to_host 0x9014 n/a 102 ローカル関数
ResetISR 0x180 n/a 100 グローバル関数
toMontgomery_ECC_P256 0x4820 n/a 100 ローカル関数
SystemInit 0x6868 n/a 100 弱い関数
HAL_UartSendBlocking 0x69dc n/a 100 グローバル関数
FLEXCOMM_PeripheralIsPresent 0xc37c n/a 100 ローカル関数
mbedtls_ecp_copy 0x7a48 n/a 98 グローバル関数
toMontgomery_ECC_P521 0x4f7c n/a 96 ローカル関数
RESET_ClearPeripheralReset 0x63a4 n/a 96 グローバル関数
mbedtls_mpi_sub_mod 0x7b64 n/a 96 ローカル関数
SerialManager_Init 0xcb56 n/a 96 グローバル関数
SerialManager_OpenReadHandle 0xcc06 n/a 96 グローバル関数
reverse_array 0x8138 n/a 94 ローカル関数
HASHCRYPT_SHA 0xc6fe n/a 94 グローバル関数
FLEXCOMM0_DriverIRQHandler 0x5aa0 n/a 92 グローバル関数
FLEXCOMM1_DriverIRQHandler 0x5afc n/a 92 グローバル関数
FLEXCOMM2_DriverIRQHandler 0x5b58 n/a 92 グローバル関数
FLEXCOMM3_DriverIRQHandler 0x5bb4 n/a 92 グローバル関数
FLEXCOMM4_DriverIRQHandler 0x5c10 n/a 92 グローバル関数
FLEXCOMM5_DriverIRQHandler 0x5c6c n/a 92 グローバル関数
FLEXCOMM6_DriverIRQHandler 0x5cc8 n/a 92 グローバル関数
FLEXCOMM7_DriverIRQHandler 0x5d24 n/a 92 グローバル関数
FLEXCOMM8_DriverIRQHandler 0x5d80 n/a 92 グローバル関数
RESET_SetPeripheralReset 0x6348 n/a 92 グローバル関数
mbedtls_mpi_add_mod 0x7bc4 n/a 92 ローカル関数
mbedtls_mpi_lset 0x8dea n/a 92 グローバル関数
BOARD_BootClockFROHF96M 0x6a98 n/a 88 グローバル関数
mbedtls_mpi_shift_l_mod 0x7c20 n/a 88 ローカル関数
fclose 0xcf9c n/a 88 グローバル関数
mbedtls_mpi_resize_clear 0x8ca0 n/a 86 ローカル関数
DbgConsole_SendDataReliable 0x25c n/a 84 グローバル関数
calculate_sha256 0x450 n/a 84 ローカル関数
mbedtls_ecp_set_zero 0x7aaa n/a 82 グローバル関数
_fflush 0xcf4a n/a 82 グローバル関数
ecp_add 0xe58 n/a 80 グローバル関数
FLEXCOMM_Init 0x5a50 n/a 80 グローバル関数
POWER_SetVoltageForFreq 0x62f8 n/a 80 グローバル関数
HASHCRYPT_SHA_Init 0xc75c n/a 80 グローバル関数
SerialManager_OpenWriteHandle 0xcbb6 n/a 80 グローバル関数
calloc 0xcdc6 n/a 80 グローバル関数
strlen 0xce54 n/a 78 グローバル関数
FLEXCOMM_GetInstance 0x5a04 n/a 76 グローバル関数
mbedtls_mpi_free 0x8bd0 n/a 76 グローバル関数
CASPER_ECC_equal_to_zero 0x1754 n/a 72 グローバル関数
mpi_uint_bigendian_to_host_c 0x8fb4 n/a 72 ローカル関数
add32 0x8264 n/a 70 ローカル関数
sub32 0x82aa n/a 70 ローカル関数
ftell 0x6e48 n/a 68 グローバル関数
PrintOutputdifFobpu 0x70aa n/a 68 ローカル関数
PrintOutputxX 0x70ee n/a 68 ローカル関数
mbedtls_mpi_cmp_int 0x9676 n/a 68 グローバル関数
SerialManager_Write 0xcb12 n/a 68 ローカル関数
mbedtls_mpi_get_bit 0x8e46 n/a 66 グローバル関数
mbedtls_clz 0x8eee n/a 66 ローカル関数
PrintGetRadixFromobpu 0x71c8 n/a 64 ローカル関数
mbedtls_mpi_mul_mod 0x7b24 n/a 64 ローカル関数
_deferredlazyseek 0xcea2 n/a 64 グローバル関数
_do_fflush 0xd008 n/a 64 グローバル関数
toc_verification_key 0xda84 n/a 64 ローカルオブジェクト
PrintFilterLengthFlag 0x718a n/a 62 ローカル関数
Serial_UartInit 0xcc86 n/a 62 グローバル関数
setvbuf 0xce16 n/a 62 グローバル関数
BOARD_InitDEBUG_UARTPins 0x6af0 n/a 60 グローバル関数
_sbrk 0x6c6c n/a 60 グローバル関数
fflush 0x6d14 n/a 60 グローバル関数
hashcrypt_sha_check_input_args 0xc53a n/a 60 ローカル関数
BOARD_InitDebugConsole 0x6a40 n/a 56 グローバル関数
PrintIsobpu 0x7046 n/a 56 ローカル関数
USART_EnableContinuousSCLK 0xc9fa n/a 56 ローカル関数
SerialManager_StartWriting 0xcada n/a 56 ローカル関数
Serial_UartWrite 0xccc4 n/a 56 グローバル関数
HardFault_Handler 0x77f8 n/a 54 グローバル関数
HAL_UartInit 0xca62 n/a 54 グローバル関数
mbedtls_ecp_point_free 0x7932 n/a 52 グローバル関数
mbedtls_ecp_keypair_free_o 0x79fe n/a 52 グローバル関数
__aeabi_lowlevel_memset 0xd1f2 n/a 50 グローバル関数
mbedtls_ecdsa_verify 0xc2e8 n/a 48 グローバル関数
CLOCK_EnableClock 0xc34c n/a 48 ローカル関数
空き 0xcd96 n/a 48 グローバル関数
mbedtls_ecp_get_type 0x782e n/a 46 グローバル関数
IOCON_PinMuxSet 0xcd46 n/a 46 ローカル関数
__assertion_failed 0x230 n/a 44 グローバル関数 />ecp_mpi_set1 0x120c n/a 44 ローカル関数
DbgConsole_Printf 0x6f24 n/a 44 グローバル関数
PrintIsdi 0x707e n/a 44 ローカル関数
PrintIsfF 0x7132 n/a 44 ローカル関数
PrintIsxX 0x715e n/a 44 ローカル関数
mbedtls_ecp_point_init 0x785c n/a 44 グローバル関数
mbedtls_ecp_keypair_init 0x7906 n/a 44 グローバル関数
ecp_mpi_load 0x8196 n/a 44 ローカル関数
hashcrypt_engine_init 0xc4e4 n/a 44 ローカル関数
hashcrypt_sha_check_input_alg 0xc510 n/a 42 ローカル関数
__aeabi_memcpy4 0xd1c8 n/a 42 グローバル関数
__aeabi_memcpy8 0xd1c8 n/a 42 グローバル関数
mbedtls_platform_zeroize 0x14b8 n/a 40 グローバル関数
mbedtls_ecp_is_zero 0x7afc n/a 40 グローバル関数
StrFormatExaminedi 0x72ca n/a 38 ローカル関数
StrFormatExaminexX 0x72f0 n/a 38 ローカル関数
StrFormatExamineobpu 0x7316 n/a 38 ローカル関数
mbedtls_mpi_init 0x8baa n/a 38 グローバル関数
casper_get_word 0x24f0 n/a 36 ローカル関数
mbedtls_mpi_sub_mpi 0x9abe n/a 36 グローバル関数
s_flexcommBaseAddrs 0xdbd8 n/a 36 ローカルオブジェクト
s_flexcommResets 0xdc10 n/a 36 ローカルオブジェクト
mpi_sint_abs 0x8dc8 n/a 34 ローカル関数
mbedtls_mpi_add_mpi 0x9a9c n/a 34 グローバル関数
HAL_UartGetStatus 0xca40 n/a 34 ローカル関数
DisableGlobalIRQ 0xca98 n/a 34 ローカル関数
POWER_DisablePD 0x56c8 n/a 32 ローカル関数
ConvertPrecisionWidthToLength 0x733c n/a 32 ローカル関数
EnableGlobalIRQ 0xcaba n/a 32 ローカル関数
SerialManager_WriteBlocking 0xcc66 n/a 32 グローバル関数
secp256r1_p 0xdac4 n/a 32 ローカルオブジェクト
secp256r1_a 0xdae4 n/a 32 ローカルオブジェクト
secp256r1_b 0xdb04 n/a 32 ローカルオブジェクト
secp256r1_gx 0xdb24 n/a 32 ローカルオブジェクト
secp256r1_gy 0xdb44 n/a 32 ローカルオブジェクト
secp256r1_n 0xdb64 n/a 32 ローカルオブジェクト
s_UsartAdapterBase 0xdc34 n/a 32 ローカルオブジェクト
data_init 0x1e8 n/a 30 グローバル関数
mbedtls_mpi_zeroize 0x8b8c n/a 30 ローカル関数
mbedtls_ecdsa_free 0xc32e n/a 30 グローバル関数
mbedtls_mpi_size 0x8f98 n/a 28 グローバル関数
RESET_周辺機器リセット 0xc9de n/a 28 グローバル関数
fsl_assert_hook 0x6ea4 n/a 26 弱い関数
__check_heap_overflow 0x6e8c n/a 24 グローバル関数
mpi_uint_bigendian_to_host 0x8ffc n/a 24 ローカル関数
mbedtls_ecdsa_can_do 0xc2d0 n/a 24 グローバル関数
hashcrypt_save_running_hash 0xc6d0 n/a 24 ローカル関数
mbedtls_ecp_keypair_free 0x7a32 n/a 22 グローバル関数
mbedtls_ecdsa_init 0xc318 n/a 22 グローバル関数
hashcrypt_restore_running_hash 0xc6e8 n/a 22 ローカル関数
0xcff4 を削除 n/a 20 グローバル関数
bss_init 0x206 n/a 18 グローバル関数
s_flexcommClocks 0xdbfc n/a 18 ローカルオブジェクト
SystemInitHook 0xca32 n/a 14 弱い関数
BOARD_InitPeripherals 0xccfc n/a 14 グローバル関数
__main 0xcd80 n/a 14 グローバル関数
BOARD_InitBootPeripherals 0xcd0a n/a 12 グローバル関数
BOARD_InitBootPins 0xcd74 n/a 12 グローバル関数
__aeabi_memcpy 0xd1be n/a 10 グローバル関数

私の知る限り、CASPERは単独でECDSA検証を行うことはできません。mbedTLSをラッパーとして使う必要があり、それがすべての追加コードを取り込むためです。

ksdk_mbedtls_config.h ファイル内のほとんどすべての設定を無効化しました。

質問

  1. mbedTLSのオーバーヘッドなしに、CASPERハードウェアを直接ECDSA検証に使用する方法はありますか?
  2. LPC55S28にECDSA検証を扱えるROMベースの暗号機能はありますか?
  3. 32KBの制約内に収まるECDSA P-256検証の最小限の実装をLPC55S28にご存知の方はいらっしゃいますか?
  4. mbedTLSよりもフットプリントの小さい代替手段はありますか?
Re: Help with ECDSA Verification in LPC55S28 Bootloader (32KB Size Limit)
このチケットは当時のコミュニティプラットフォームの問題によりメールで処理されました。
タグ(1)
評価なし
バージョン履歴
最終更新日:
19 時間前
更新者: