2016-10-17 7 views
1

현재 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

'는 md.h'에서 정의 된 열거하고 다음 값을 설명 이. 나는 지금 다른 방법을 사용하여 해싱하고 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 해시를 사용할 때 내가 다르게 할 수있는 작업이 있으며 왜 서명이 서로 다른가요?

당신에게

답변

1

짧은 답변 감사합니다

  • 을 당신은 다르게 서명 알고리즘이

무작위 때문에

  • 서명이 다를 이것은 때문에 아무것도를 할 필요가 없습니다 mbedtls_ecdsa_write_signature으로 전달 된 mbedtls_md_type_t md_alg의 목적은 지정된 해시를 만드는 데 사용 된 알고리즘을 나타내지 않습니다.

    알고리즘은 주어진 md_alg에 기반한 의사 생성기 (hmac-drbg)를 생성하고 개인 키로 시드합니다. 이제 해시 알고리즘이 다른 경우 의사 랜덤 시퀀스가 ​​달라 지므로 서명 자체도 달라집니다.