현재 mbedTLS (이전 polarSSL) 라이브러리를 사용하여 해시 된 메시지에 서명하고 있습니다. 나는 현재 명백한 기능을 사용하여 끼 었어 :mbedTLS ECDSA 서명이 해시 알고리즘에 의존하는 이유는 무엇입니까?
int mbedtls_ecdsa_write_signature(mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg,
const unsigned char *hash, size_t hlen,
unsigned char *sig, size_t *slen,
int (*f_rng)(void *, unsigned char *, size_t),
void *p_rng)
이 제대로 작동 것으로 보인다하지만 주어진 매개 변수 mbedtls_md_type_t md_alg
에 문제가 있습니다. 이 매개 변수는 지정된 해시에 사용 된 메시지 다이제스트 알고리즘을 식별합니다. mbedTLS은 제안하지 않는다 해싱 알고리즘으로 I는 SHA3를 이용해야하기
enum mbedtls_md_type_t { MBEDTLS_MD_NONE =0, MBEDTLS_MD_MD2, MBEDTLS_MD_MD4, MBEDTLS_MD_MD5, MBEDTLS_MD_SHA1, MBEDTLS_MD_SHA224, MBEDTLS_MD_SHA256, MBEDTLS_MD_SHA384, MBEDTLS_MD_SHA512, MBEDTLS_MD_RIPEMD160 }
(256 keccak)
md_alg
mbedtls_ecdsa_write_signature()
함수에 SHA3 해시를 넣습니다. 나는 메세지 다이제스트 알고리즘을 정의하는 다른 값을 시도하고 나는 다음과 같은 출력을 얻을
매개 변수 md_alg
으로 : 다른 값을 선택,
(md_alg) + Signature: (len: length) signature
(3) + Signature: (len: 70) 304402206AD43BB99B8D97A0890ED7295BDDF8E826AF44AA1FAC9B471EBD415078F3194C02204C0DE87286C2C2B6160B7410A7692DE0995FE79347752A1E828E829FFD981257 (4) + Signature: (len: 72) 3046022100D8C89CD146F08ECA0ACCD66AD0FAF07D8ED761602EBB5DAC8E4F2B6E9634EBC4022100897583BAE04B0B46044AD5910CC704039F7B46DDCBA46344E065687798B2E605 (5) + Signature: (len: 71) 3045022100EBDFC64BC39F77753E5255AED340CFB8946584B7D2AAF5F32A611BFF29631CFC022DD8E96598483F2BEAFACD03E5D8449511A3F6BAB85175158950333084 (6) + Signature: (len: 71) 304502200E7220C8697456CA3151C967EEB2DB6AD6F9E6ACB740E7980D41582496635228022100A01FA55C71A30D042C5932498C0F69ADAB81F5026E5CC0204A304217883B814C (7) + Signature: (len: 71) 3045022100ADBC91C37D20EA747B9854C26CFE067311C86A168FE8B06237C1D0EB2F8E6F04022004B99EE9B920B57BAE1BFFCED6BDD7ED3C48571BC4D7326F67EC90AF045AC193 (8) + Signature: (len: 71) 3045022027CC7F76558EF628370E3554B575A0FD15F55952AB2E1CC30AC51A21DEFAE1AC0221009746FF2012E005057BFF0674E78235BD08B7C54C2547CAC63EDD5B160245A309 (9) + Signature: (len: 70) 3044022059512D16AC85EB8BFDFBD488A497A0CAA28AEA0A53F280FD7FDB4297C4D49DBD02200AAD2F32B63C76B82B75F3C97F555E5D895C3A8717D5E617AAFD7E8788E4311F
당신이 볼 수 있듯이을 md_alg는 다른 서명 (동일한 해시 및 private_key가 주어진 경우)을 초래합니다.
지금까지 'ecdsa.c'소스 파일을 살펴본 결과 md_alg
에 대해 다른 값을 선택하면 출력 서명이 달라지는 이유를 찾을 수 없습니다.
SHA3 해시를 사용할 때 내가 다르게 할 수있는 작업이 있으며 왜 서명이 서로 다른가요?
당신에게