区分数字签名消息摘要的开始

时间:2016-02-22 20:02:19

标签: digital-signature hmac digest ecdsa

由于我刚刚使用IETF RFC 4634的功能创建了这个原始测试,我不确定我是否已经正确使用它们用于HMAC-SHA-384-192,所以我'我将在这里开始使用该代码:

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "sha.h"

int main(int argc, char *argv[]) {
        HMACContext hmac;
        const unsigned char *keyarr = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
        int err = hmacReset(&hmac, SHA384, keyarr, 48);
        if (err != shaSuccess) {
                printf("err 1\n");
                exit(1);
        }
        const uint8_t testarray[65] = {'I',' ','a','m',' ','n','o','t',' ','a',' ','c','r','o','o','k','!'};
        const unsigned char *prfkey = "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789";
        memcpy((void *)testarray + 17, (void *)prfkey, 48);
        const int testlen = 65;
        err = hmacInput(&hmac, testarray, testlen);
        if (err != shaSuccess) {
                printf("err 2\n");
                exit(1);
        }
        uint8_t Message_Digest[USHAMaxHashSize];
        err = hmacResult(&hmac, Message_Digest);
        if (err != shaSuccess) {
                printf("err 3\n");
                exit(1);
        }
        int i;
        for(i = 0; i < 24; i++) printf(" %02X", Message_Digest[i]);
        putchar('\n');
}

如果我到目前为止做的一切都正确(除了选择好的密钥),我通常会有一个24字节(即192位)的摘要,但如果我在追加它之前对摘要进行数字签名,我的经验是签名块不是可预测的长度。我确信我能想出任何方法来确定消息部分的结尾,但我不想让它成为一个黑客。这样做的可接受方式是什么? (签名将使用ECDSA。)

我还应该提一下,这将是一个在ESP内部使用UDP的多播消息,因为这会对消息经济性产生限制。 (这也是问题的主要原因 - 保持二进制。另一种是附加的做法,而不是在它前面添加一个字节数。)

0 个答案:

没有答案