密码检查安全性和链接时间优化

时间:2013-10-01 15:43:44

标签: c security optimization

我有一个应用程序,我需要检查给定的输入是否与存储的密码匹配。

这是代码的简化示例:

int authorize_(const uint8_t input[restrict HASH_SIZE], const uint8_t password[restrict HASH_SIZE])
{
    // Compare each byte to prevent timing attacks. Make sure the compiler doesn't optimize the comparison.

    unsigned diff = 0;
    size_t index;

    for(index = 0; index < HASH_SIZE; ++index)
        diff += (input[index] != password[index]);

    return diff;
}

#define authorize(i, p) (bool)(authorize_((i), (p)) == 0)

我读到时间攻击,这是我的解决方案:函数authorize_始终检查所有字符,以确保检查始终花费相同的时间。由于外部函数只关心结果是否为0,因此我有一个宏进行检查。

但是我担心链接时间优化是否会导致函数在第一次不匹配时停止(因为diff已经!= 0且只能增加值)。

我应该担心吗?或者我做错了什么?

0 个答案:

没有答案